友友们求解初值问题
的经典四阶 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
望采纳。
可以按照以下步骤在 matlab 中求解初值问题:
% 定义初值问题的函数
f = @(t, u) (u^2 + u)/t;
% 定义精确解函数
exact = @(t) -2./t;
% 定义误差函数
error = @(t, u) abs(u - exact(t));
% 使用 ode45 函数求解初值问题
[t, u] = ode45(f, [1, 3], -2);
% 计算误差
e = error(t, u);
% 使用 uitable 函数展示计算结果、精确解和误差
data = [t, u, e];
columnnames = {'t', 'u', 'error'};
uitable('Data', data, 'ColumnName', columnnames);