如何用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随时间变化的图像?
展开
 我来答
lhmhz
高粉答主

2020-02-22 · 专注matlab等在各领域中的应用。
lhmhz
采纳数:7264 获赞数:17019

向TA提问 私信TA
展开全部

题主已利用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'(一阶导数)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式