MATLAB四阶Runge-Kutta法解微分方程并绘制图形
以下是使用MATLAB实现四阶Runge-Kutta法来解微分方程并绘制图形的代码:\n\nmatlab\n% 定义微分方程\ndydyx = @(x, y) 2*y/(x+1) + (x+1)^(5/2);\n\n% 定义初始条件\nx0 = 0;\ny0 = 2/3;\n\n% 定义步长和区间\nh = 0.1;\nxspan = [0, 5];\n\n% 使用四阶Runge-Kutta法求解微分方程\n[x, y] = rk4(dydx, xspan, y0, h);\n\n% 计算解析解\ny_exact = @(x) (x+1).^2 * ((2/3) * (x+1).^(3/2));\n\n% 绘制图形\nplot(x, y, 'bo', 'MarkerFaceColor', 'b'); hold on;\nfplot(y_exact, xspan, 'r--');\nlegend('Runge-Kutta法', '解析解');\nxlabel('x');\nylabel('y');\ntitle('y-x图');\ngrid on;\n\n% 定义四阶Runge-Kutta法函数\nfunction [x, y] = rk4(dydx, xspan, y0, h)\n x = xspan(1):h:xspan(2);\n y = zeros(size(x));\n y(1) = y0;\n for i = 1:length(x)-1\n k1 = h * dydx(x(i), y(i));\n k2 = h * dydx(x(i) + h/2, y(i) + k1/2);\n k3 = h * dydx(x(i) + h/2, y(i) + k2/2);\n k4 = h * dydx(x(i) + h, y(i) + k3);\n y(i+1) = y(i) + (k1 + 2*k2 + 2*k3 + k4) / 6;\n end\nend\n\n\n运行以上代码,将会得到一个绘制了Runge-Kutta法求解结果和解析解的图形。蓝色圆圈表示Runge-Kutta法的计算结果,红色点线表示解析解。图中还包括了图例、坐标轴标签和标题,并启用了网格。
原文地址: https://www.cveoy.top/t/topic/pKnp 著作权归作者所有。请勿转载和采集!