Matlab 将Runge-Kutta ODE解算器从一阶调整到二阶

Matlab 将Runge-Kutta ODE解算器从一阶调整到二阶,matlab,function,ode,runge-kutta,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));

我有一个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

将其转换为一阶系统,这意味着函数
F
将变为向量值,并且应在
y
列表的构造中包含
y0
的形状

y''=f(x,y,y')
转化为

y0'=y1
y1'=f(x,y0,y1)
因此(使用matlab索引)


将其转换为一阶系统,这意味着函数
F
将变为向量值,并且应在
y
列表的构造中包含
y0
的形状

y''=f(x,y,y')
转化为

y0'=y1
y1'=f(x,y0,y1)
因此(使用matlab索引)


你是说我应该把我正在研究的二阶常微分方程转换成一阶常微分方程组,然后应用我已有的算法,但为常微分方程组的二方程组设置输入?是的,就是这样。对于二阶系统有很多方法,Beeman对它们进行了分子动力学的比较研究,但它们大多适用于(能量)保守系统。所以,你是说我应该把我正在研究的二阶常微分方程转换成一阶常微分方程组,然后应用我已有的算法,但为二方程常微分方程组设置输入?是的,就是这样。对于二阶系统有很多方法,Beeman对它们进行了分子动力学的比较研究,但它们大多适用于(能量)保守系统。