2744557306 发表于 2023-12-31 17:32

四阶RK法求解常微分方程

这段MATLAB代码实现了四阶Runge-Kutta(RK)方法来求解常微分方程(ODE)。以下是代码的主要解释:
function y = RK(a, b, N, af)
    h = (b - a) / N;
    x(1) = a;
    y(1) = af;
    jqj(1) = af;

    for i = 2:N+1
        K1 = f(x(i-1), y(i-1));
        K2 = f(x(i-1) + h/2, y(i-1) + h*K1/2);
        K3 = f(x(i-1) + h/2, y(i-1) + h*K2/2);
        K4 = f(x(i-1) + h, y(i-1) + h*K3);

        y(i) = y(i-1) + (K1 + 2*K2 + 2*K3 + K4) / 6;
        x(i) = x(i-1) + (i-1) * h;
        jqj(i) = x(i) + exp(-x(i));
    end

   
    er = norm(y - jqj, 2) / norm(y);

    plot(x', y', 'r', x', jqj', 'g');
    legend('RK法', '精确解');
end

这是代码的简要说明:

1.函数RK接受初始值和终止值a和b,步数N以及解的初始值af。
2.初始化数组x、y和jqj,用于存储自变量、使用RK方法得到的解以及精确解的值。
3.for循环执行RK方法的迭代,每一步更新解y。
4.与RK解同时计算精确解jqj。
5.该函数以表格形式打印x、y和jqj的值,计算相对误差er,并绘制RK解和精确解的图表。
6.注意:函数f被假定在您的代码中其他地方已经定义,并且表示要使用RK方法求解的函数的导数。



页: [1]
查看完整版本: 四阶RK法求解常微分方程