头顶好凉 2022-12-30 16:36 采纳率: 33.3%
浏览 31
已结题

Runge-Kutta方法下的微分方程数值解问题

友友们求解初值问题

img

的经典四阶 Runge-Kutta 方法,取 h=0.4 进行mathlab数值实验,把计算结果、精确解及误差用表格给出。

  • 写回答

2条回答 默认 最新

  • |__WhoAmI__| 2022-12-30 16:53
    关注
    % 定义常微分方程
    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
        % 计算 k1k2k3k4 和 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
    

    望采纳。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月30日
  • 已采纳回答 12月30日
  • 创建了问题 12月30日

悬赏问题

  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序
  • ¥15 多址通信方式的抗噪声性能和系统容量对比
  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 Centos / PETSc / PETGEM