头顶好凉 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 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题