以下是使用MATLAB实现四阶Runge-Kutta法来解微分方程并绘制图形的代码:

% 定义微分方程
dydx = @(x, y) 2*y/(x+1) + (x+1)^(5/2);

% 定义初始条件
x0 = 0;
y0 = 2/3;

% 定义步长和区间
h = 0.1;
xspan = [0, 5];

% 使用四阶Runge-Kutta法求解微分方程
[x, y] = rk4(dydx, xspan, y0, h);

% 计算解析解
y_exact = @(x) (x+1).^2 * ((2/3) * (x+1).^(3/2));

% 绘制图形
plot(x, y, 'bo', 'MarkerFaceColor', 'b'); hold on;
fplot(y_exact, xspan, 'r--');
legend('Runge-Kutta法', '解析解');
xlabel('x');
ylabel('y');
title('y-x图');
grid on;

% 定义四阶Runge-Kutta法函数
function [x, y] = rk4(dydx, xspan, y0, h)
    x = xspan(1):h:xspan(2);
    y = zeros(size(x));
    y(1) = y0;
    for i = 1:length(x)-1
        k1 = h * dydx(x(i), y(i));
        k2 = h * dydx(x(i) + h/2, y(i) + k1/2);
        k3 = h * dydx(x(i) + h/2, y(i) + k2/2);
        k4 = h * dydx(x(i) + h, y(i) + k3);
        y(i+1) = y(i) + (k1 + 2*k2 + 2*k3 + k4) / 6;
    end
end

运行以上代码,将会得到一个绘制了Runge-Kutta法求解结果和解析解的图形。蓝色圆圈表示Runge-Kutta法的计算结果,红色点线表示解析解。图中还包括了图例、坐标轴标签和标题,并启用了网格


原文地址: http://www.cveoy.top/t/topic/h1jZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录