嗨,这可能是我的一个非常棒的问题,但是我被困住了,我想尝试一段时间,请帮助我。
我正在尝试做这样的事情:
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。
但这不起作用。有什么建议吗?
答案 0 :(得分:2)
您的k1
到k4
未被定义或用作功能。当您声明k1 = ODE(x,y)
时,会尝试使用未定义的向量ODE
和x
评估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);