用runge kutta求解非线性一阶ODE系统

时间:2015-05-04 16:04:55

标签: matlab ode runge-kutta

我完全陷入了我的一个问题集。

我应该使用Matlab解决以下ODE系统:

o'(u) = R-acos(u)/sqrt(b^2 + (R-acosu)^2)
e'(u) = Rcos(o)
n'(u) = Rsin(o)
R,a,b are constants
u goes from 0 to 2pi

我应该使用Runge Kutta方法,我之前没有尝试过。 我已经有一段时间了,但是甚至不知道从哪里开始 - 这就是为什么我没有任何代码可以告诉你。我一直在做很多googleing但没有结果。

如果有人能帮助我,我将不胜感激!

1 个答案:

答案 0 :(得分:0)

阅读math use of ODE solverssyntax of calling a specific solver上提供的友好手册。这里的经典方式是

function yprime = odefunc(u,y,R,a,b)
    o=y(1); e=y(2); n=y(3);
    oprime = R-a*cos(u)/sqrt(b^2 + (R-a*cos(u))^2);
    eprime = R*cos(o);
    nprime = R*sin(o);
    yprime = [oprime; eprime; nprime ];
end //function

在定义初始条件,时间范围和参数后,将其称为

[t,y] = ode45(@(t,y) odefunc(t,y,R,a,b), [t0, tf], [o0; e0; n0])