朋友问题: 有微分方程以下:
其中, , 。
请在区间 内绘制两个子图,分别为 与 ,每一个子图涵盖 与 两种状况。html
因此本题的核心问题在于:用数值计算的方法求解该方程,获得各点,绘制点图。web
使用 matlab 自带的 ode45
,方程组用句柄表示。app
ode45
参见教程:如何使用ODE45svg
首先把题目方程转换,转换为 ode45
能理解的方式。spa
先声明变量:
code
因而整理方程:orm
xml
因而咱们知道,ode45
中要有2个变量,且将其右边的式子分别表示出来,即:htm
dy = @(t, y)[y(2); (5 - y(2)*exp(y(1)) + y(1)^2)/m];
其中:blog
y(2)
表明
;(5 - y(1)*exp(y(2)) + y(2)^2)/m
表明
。接着,规定初值: , 。
y10 = 1; y20 = -10;
规定自变量 范围:
tspan = [0, 5];
输入 ode45
则为:
[t, y] = ode45(dy, tspan, [y10, y20]);
整个题目的代码为:
% 表示该方程组 m = 1; dy = @(t, y)[y(2); (5 - y(2)*exp(y(1)) + y(1)^2)/m]; y10 = 1; y20 = -10; tspan = [0, 5]; % m = 1 [t_m_1, y_m_1] = ode45(dy, tspan, [y10, y20]); % m = 2 m = 2; dy = @(t, y)[y(2); (5 - y(2)*exp(y(1)) + y(1)^2)/m]; [t_m_2, y_m_2] = ode45(dy, tspan, [y10, y20]); % plot subplot(1, 2, 1); plot(t_m_1, y_m_1(:, 2)); hold on plot(t_m_2, y_m_2(:, 2)); title('dy/dt') legend('m=1','m=2') subplot(1, 2, 2); plot(t_m_1, y_m_1(:, 1)); hold on plot(t_m_2, y_m_2(:, 1)); title('y') legend('m=1','m=2')
顺便学了 ode45
,不错。