使Runge-Kutta ODE求解器从一阶到二阶适应

时间:2015-12-12 05:47:23

标签: matlab function ode runge-kutta

我有一个Matlab函数用于对一阶ODE进行Runge-Kutta4k近似,我想调整它以适用于二阶ODE。有人能帮助我开始吗?这就是我对第一批RK4K的要求:

function [y,t,h] = rungekutta4kh(F,y0,a,b,n)

% Euler ODE solver
t = linspace(a,b,n);
h = t(2)-t(1);

y = zeros(n,1);
y(1) = y0;
for i=2:n
    s1 = feval(F,t(i-1),y(i-1));
    s2 = feval(F,t(i-1)+h/2,y(i-1)+ (h/2)*s1);
    s3 = feval(F,t(i-1)+h/2,y(i-1)+ (h/2)*s2);
    s4 = feval(F,t(i-1)+h,y(i-1)+ h*s3);

    y(i) = y(i-1) + ...
        (h/6)*( s1 + 2*s2 + 2*s3 + s4 );
end

1 个答案:

答案 0 :(得分:0)

您将其转换为一阶系统,这意味着函数F变为矢量值,您应该在y0列表的构造中包含y的形状。 / p>

y''=f(x,y,y')

转换为

y0'=y1
y1'=f(x,y0,y1)

这样(使用matlab索引)

F(x,y) = [ y(2), f(x,y(1),y(2)) ]