友友们求解初值问题
的经典四阶 Runge-Kutta 方法,取 h=0.4 进行mathlab数值实验,把计算结果、精确解及误差用表格给出。
友友们求解初值问题
的经典四阶 Runge-Kutta 方法,取 h=0.4 进行mathlab数值实验,把计算结果、精确解及误差用表格给出。
% 定义常微分方程
function dy = f(t, y)
dy = t^(-1) * (y^2 + y);
end
% 初始化变量
t0 = 1;
u0 = -2;
h = 0.4;
t_end = 3;
% 初始化结果数组
results = [t0, u0];
% 迭代计算
while t0 < t_end
% 计算 k1、k2、k3、k4 和 u1
k1 = h * f(t0, u0);
k2 = h * f(t0 + h/2, u0 + k1/2);
k3 = h * f(t0 + h/2, u0 + k2/2);
k4 = h * f(t0 + h, u0 + k3);
u1 = u0 + (k1 + 2*k2 + 2*k3 + k4) / 6;
% 更新 t0 和 u0
t0 = t0 + h;
u0 = u1;
% 记录结果
results = [results; t0, u0];
end
% 输出结果
results
% 计算计算结果、精确解和误差
for i = 1:size(results, 1)
t = results(i, 1);
u_calc = results(i, 2);
u_exact = u(t); % 这里假设 u(t) 是精确解函数
error = abs(u_calc - u_exact);
end
% 输出表格标题
fprintf('| t | u(t) (计算结果) | u(t) (精确解) | 误差 |\n');
fprintf('|----|-----------------|----------------|------|\n');
% 输出表格数据
for i = 1:size(results, 1)
t = results(i, 1);
u_calc = results(i, 2);
u_exact = u(t); % 这里假设 u(t) 是精确解函数
error = abs(u_calc - u_exact);
fprintf('| %.1f| %.4f | %.4f | %.4f |\n', t, u_calc, u_exact, error);
end
望采纳。