龙格-库塔法的 MATLAB 实现
龙格-库塔法是一种用于求解常微分方程初值问题的数值方法。下面提供了一个四阶龙格-库塔法在 MATLAB 中的实现示例。这个示例将用于求解一个简单的常微分方程。
假设我们需要求解微分方程:
[ \frac{dy}{dt} = f(t, y) ]
其中 ( f(t, y) ) 是已知的函数,初始条件为 ( y(t_0) = y_0 )。
以下代码实现了四阶龙格-库塔法来近似解该方程:
% 定义微分方程的右侧函数 f(t, y)
function dydt = f(t, y)
dydt = -2 * t * y; % 示例函数
end
% 四阶龙格-库塔法实现
function [t_values, y_values] = runge_kutta_4th_order(f, t0, y0, h, n)
% 初始化时间和解向量
t_values = t0:h:(t0 + n*h);
y_values = zeros(size(t_values));
y_values(1) = y0;
% 迭代计算
for i = 1:n
t_i = t_values(i);
y_i = y_values(i);
k1 = h * f(t_i, y_i);
k2 = h * f(t_i + h/2, y_i + k1/2);
k3 = h * f(t_i + h/2, y_i + k2/2);
k4 = h * f(t_i + h, y_i + k3);
y_values(i+1) = y_i + (k1 + 2*k2 + 2*k3 + k4) / 6;
end
end
% 使用示例
t0 = 0; % 初始时间
y0 = 1; % 初始条件
h = 0.1; % 步长
n = 100; % 步数
[t_values, y_values] = runge_kutta_4th_order(@f, t0, y0, h, n);
% 绘制结果
plot(t_values, y_values, 'b-o');
xlabel('Time t');
ylabel('Solution y');
title('Runge-Kutta 4th Order Method');
grid on;
在这段代码中:
- 定义了一个函数 f(t, y)
作为右端项。
- runge_kutta_4th_order
函数实现了四阶龙格-库塔法,它接收函数句柄 f
、初始值 t0
和 y0
、步长 h
以及步数 n
。
- 后面的代码片段设置了初始条件和参数,调用上述函数并绘制计算结果。
确保替换函数 f(t, y)
为你具体问题的实际函数实现。