如何用MATLAB画出以二阶微分方程的解y为自变量的函数M图像?
假设一个二阶微分方程如下:假设y(1)的导数为y(2),则y(2)的导师为y(1)的二阶导。functiondydt=functn(t,y)dydt=[y(2);y(1)...
假设一个二阶微分方程如下:
假设y(1)的导数为y(2),则y(2)的导师为y(1)的二阶导。
function dydt = functn(t,y)
dydt = [y(2); y(1)+y(2)];
可以通过ode45求解:
[t,y] = ode45(@functn,[0 20],[2; 0]);
若设M=y(1)*y(2),如何通过Matlab绘制M随时间变化的图像? 展开
假设y(1)的导数为y(2),则y(2)的导师为y(1)的二阶导。
function dydt = functn(t,y)
dydt = [y(2); y(1)+y(2)];
可以通过ode45求解:
[t,y] = ode45(@functn,[0 20],[2; 0]);
若设M=y(1)*y(2),如何通过Matlab绘制M随时间变化的图像? 展开
1个回答
展开全部
题主已利用ode45求解得到了【t,y】值,想通过M=y(1)*y(2),来绘制M随时间变化的图像。
首先,我们应了解【t,y】的结构形式,使用whos函数可知,t是137×1的列向量,而y是137×2的列向量(有两列)
其二,由于y1和y2值是通过y列向量来储存的,所以y1=y(:,1),y2=y(:,2),而y1和y2的相乘,实际上是数组运算,应使用点运算符计算。即 M=y(:,1).*y(:,2)
最后,使用plot函数绘制M随时间变化的图像,即
plot(t,M,'*-')
完整的代码为
[t,y] = ode45(@functn,[0 20],[2; 0]);
M=y(:,1).*y(:,2);
whos
A=[t,y,M];
disp(' t y1 y2 M')
disp(A)
plot(t,M,'*-');
grid on
xlabel('t'),ylabel({'M','y_1(t)×y_2(t)'});
function dydt = functn(t,y)
dydt = [y(2); y(1)+y(2)];
运行结果
追问
非常感谢您的回复!确实是我需要的答案
但我还想请问一下,在经过ode45求解之后出来的y不应该是之前方程式的解吗?
为什么y(:,1)还是y(1), y(:,2)还是y(2)呢?
还是说在经过ode45之后出来的y确实依旧是y(1)、y(2),只是matlab把他们对应的值算出来储存进去了
追答
y(1)是对应y,而y(2)是对应y'(一阶导数)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询