#先上代码后补笔记#
#可以直接复制粘贴调用的MATLAB函数代码!#
1. 朗格-库塔(Runge-Kutta)方法族
目前只实现了四阶Runge-Kutta方法。
function [ YMat ] = Runge_Kutta( func, tvec, y_init, order )
% 朗格-库塔(Runge-Kutta)算法解常微分方程(组);
% 输入四个参数:函数句柄func(接收列向量、返回列向量),积分时间列向量tvec,初值行向量y_init,阶数order;
% 输出一个参数:数值解,每一行对应积分时间列向量的一行,各列为变量一个分量。
% 暂时只实现了阶数为4的(即order='4')
col = size(y_init, 2); row = size(tvec, 1); YMat = zeros(row, col);
YMat(1, :) = y_init;
switch order
case '4'
for i=1:row-1
y = YMat(i, :).'; h = tvec(i+1) - tvec(i); t = tvec(i);
k1 = func(t, y);
k2 = func(t + h/2, y + k1*h/2);
k3 = func(t + h/2, y + k2*h/2);
k4 = func(t + h, y + k3*h);
YMat(i + 1, :) = (y + (k1 + 2*k2 + 2*k3 + k4)*h/6).';
end
end