首页 > 解决方案 > 我如何评估其他函数句柄中的函数句柄?(matlab)

问题描述

function [v] = f_dora(f,x0,y0,n)

p_y=@(f,x,y) (f(x,y+0.0001) - f(x,y-0.0001))/(2*0.0001);
p_x=@(f,x,y) (f(x+0.0001,y) - f(x-0.0001,y))/(2*0.0001);



for i=1:n   
    g=@(x,y) f(x,y)*p_y(f,x,y) + p_x(f,x,y)
    f=@(x,y) g(x,y)
end
v=f(x0,y0);
end

该函数有一个输入 f,例如 (f=@((x,y) y -x^2 +1),并希望输出 $f^n(x,y)$(f 的第 n 个导数,其中 y 取决于 x)

我为解决此问题所遵循的步骤是:

首先,我定义了函数 p_y 和 p_x,它是 f 的偏导数近似。

并且,我定义了函数 g,它是 (p_x + p_y*f(x,y))(这是导数 f 的形式)

最后,我想在同一个函数中对函数 g_k 进行 n 次评估,如下所示:

g_1=@(x,y) f(x,y)*p_y(f,x,y) + p_x(f,x,y);    
g_2=@(x,y) g_1(x,y)*p_y(g_1,x,y) + p_x(g_1,x,y); 
.
.
.
g_n=@(x,y) g_(n-1)(x,y)*p_y(g_(n-1),x,y) + p_x(g_(n-1),x,y); 
g_n(x,y)

或者

算法

但是,当我使用第一个代码时,n>=3 的结果不正确。

尝试代码的示例是使用 f_dora(@((x,y) y -x^2 +1,0,0.5,n),对于 n=1,正确的结果是 1.5。对于 n =2,正确的结果是-0.5,对于n=3,正确的结果是-0.5....

有人可以通过查看我的代码中的错误来帮助我吗?或者有人知道不使用符号来计算偏导数的更好方法吗?

标签: algorithmmatlabfunctionode

解决方案


推荐阅读