y=dsolve('D2y=(-9.8sin(y))','t')用matlab怎么解出y的轨迹?

问题描述:

y=dsolve('D2y=(-9.8sin(y))','t')用matlab怎么解出y的轨迹?
就是y对t的二阶导加上9.8siny=0
1个回答 分类:数学 2014-10-18

问题解答:

我来补答
y=dsolve('Dy=-9.8*sin(y)','t')
Warning:Explicit solution could not be found; implicit solution returned.
用数值法吧.
[t,y]=ode45(@(t,y)[y(2);-9.8*sin(y(1))],[0 1],[0 1]);
plot(t,y(:,1))% y(:,1)即为y,y(:,2)即为dy
再问: 是y的二阶导。。。y‘’,如何改动你的式子啊
再答: 就是二阶导呀,设y1=y,y2=y',则dy1=y'=y2, dy2=y''=-9.8sin(y1), 即[dy1;dy2]=[y2;-9.8sin(y1)],用ode解出y1即是原来的y了,而y2是y'
再问: 我最后问一个:我明白了大半就是细节不懂,就是y(1)代表第一列对吧?可是在您列的这些式子中器内部的数据到底是怎么运算的呢?
再答: 匿名函数@(t,y)[y(2);-9.8*sin(y(1))]里面的y是按列排列的即[y1;y2], 返回值也是按列排列的即[dy1;dy2], ode45返回值中的y与匿名函数中的y属于不同变量(作用域不同),这个y是一个矩阵,第i列是yi的数据,都与列向量t对应。ode类的函数有好几个呢,但是内部细节没研究过,就是matlab的内部函数,只管拿来用。
 
 
展开全文阅读
剩余:2000