尝试在MATLAB中的匿名函数内部创建匿名函数

时间:2011-10-29 20:32:44

标签: matlab function math anonymous-function nested

嗨,这可能是我的一个非常棒的问题,但是我被困住了,我想尝试一段时间,请帮助我。

我正在尝试做这样的事情:

a=0.5;
ODE= @(x,y) ((-2*(a^2)*x*y)/(x^2+y^2)^2)/(1-((a^2)*(x^2-y^2)/(x^2+y^2)^2));


%The classical RK4 solution as a function
k1 = ODE(x,y);
k2 = ODE(x+0.5*dx,y+k1*0.5*dx);
k3 = ODE(x+0.5*dx,y+k2*0.5*dx);
k4 = ODE(x+dx,y+k3*dx);
rk4= @(x,y,dx) y + 1/6*(k1 + 2*(k2+k3) + k4)*dx;

所以我首先将ODE定义为匿名函数,然后我尝试从ODE定义k,最后从k定义RK4。

但这不起作用。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您的k1k4未被定义或用作功能。当您声明k1 = ODE(x,y)时,会尝试使用未定义的向量ODEx评估y函数。你可能想说的是:

k1 = @(x,y,dx) (ODE(x,y));
k2 = @(x,y,dx) (ODE(x+0.5*dx,y+k1(x,y,dx)*0.5*dx));
k3 = @(x,y,dx) (ODE(x+0.5*dx,y+k2(x,y,dx)*0.5*dx));
k4 = @(x,y,dx) (ODE(x+dx,y+k3(x,y,dx)*dx));
rk4= @(x,y,dx) (y + 1/6*(k1(x,y,dx) + \
                2*(k2(x,y,dx)+k3(x,y,dx)) + \
                k4(x,y,dx))*dx);