matlab 二阶微分方程 求解

我初学matlab 需要用matlab解决毕设中的一个问题,

y=f(x)
a*y''+b*y'+c*y=0
y(0)=d, y'(0)=e,
a,b,c,d,e已知 求x在(200,400)之间的 (x,y)图像 最好能求出y的表达式
希望能把每句的含义标注下,谢谢各位啦!
1L 你没明白我的意思,我缺少的是matlab的程序,不是单纯的一道。

y''+(1+cos(x))*y=0 y(0)=0.01 y'(0)=0 如果是这样的方程怎么解呢?

dsolve求解时 会出现 empty sym 不能求出解析解 。。。

>> clear
>> syms a b c d e;
>> y=dsolve('a*D2y+b*Dy+c*y=0','y(0)=d','Dy(0)=e')

y =

(2*a*e + b*d + d*(b^2 - 4*a*c)^(1/2))/(2*exp((t*(b - (b^2 - 4*a*c)^(1/2)))/(2*a))*(b^2 - 4*a*c)^(1/2)) - (2*a*e + b*d - d*(b^2 - 4*a*c)^(1/2))/(2*exp((t*(b + (b^2 - 4*a*c)^(1/2)))/(2*a))*(b^2 - 4*a*c)^(1/2))

>> a=1;b=1;c=1;d=1;e=1;%若常数已知

>> t=1;%desolve中没指定自变量x,这里默认为t,带入任意一个x值
>> y=eval(y)

y =

1.1932 + 0.0000i
这是解方程的方法,画图也差不多,我在命令窗写的改麻烦,下面是我在editor写的。
syms a b c d e;
y=dsolve('a*D2y+b*Dy+c*y=0','y(0)=d','Dy(0)=e','x');
x=200:0.1:400;%取值范围,步长
a=1;b=1;c=1;d=1;e=1;%带入参数
y=eval(y);
plot(x,y)

你补充问题的方程解得也是一个空的,并报错,或许就是无解的,我也很疑问。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-05-14

1、建立微分方程的自定义函数,odefun(容x,y)

2、当a=10、θ=π/6时,执行下列代码

theta=pi/6;

[x,y]= ode45(@odefun,[0,0.18],[0.5,theta])

plot(x,y),grid on

legend('y (x)','y’(x)')

xlabel('x'),ylabel('y (x),y’(x)') 

figure(2)

plot(y(:,1),y(:,2)),grid on

xlabel('y (x)'),ylabel('y’(x)')

title('y (x)—y’(x)的相平面图'); 

扩展资料:

升阶法:

设y''+p(x)y'+q(x)y=f(x),当f(x)为多项式时,设f(x)=a0x^n+a1x^(n-1)+…+a(n-1)x+an,此时,方程两边同时对x求导n次,得

y'''+p(x)y''+q(x)y'=a0x^n+a1x^(n-1)+…+a(n-1)x+an……

y^(n+1)+py^(n)+qy^(n-1)=a0n!x+a1(n-1)!

y^(n+2)+py^(n+1)+qy^(n)=a0n!

令y^n=a0n!/q(q≠0),此时,y^(n+2)=y^(n+1)=0。由y^(n+1)与y^n通过倒数第二个方程可得y^(n-1),依次升阶,一直推到方程y''+p(x)y'+q(x)y=f(x),可得到方程的一个特解y(x)。

本回答被网友采纳
第2个回答  2010-04-18
这么简单的常微分方程问题高数应该有教怎么解吧,去看看高数吧,
常微分方程部分有关λ的部分,又是其次方程,两步就出来了。

第一次补充回答也是最后一次补充回答:
开始以为abcde是常数,没想到不是。
dsolve后面的函数应该是一次的微分方程,你应该将函数标准化处理。令y'=y1,带到原方程中去形成两个一次的微分方程,注意初始条件也要变一下y'(0)=e变成y1(0)=e,然后再用dsolve函数求解,系数为非常数,可能这个函数解不了,可能需要手动编程,建议你去找本常微分的书看看,高数上可能没有讲过这种方程的求解。刚翻了下书,发现这问题还是比较烦的,你自己去研究吧 O(∩_∩)O~
另外用一个函数多看看帮助,matlab帮助写的很好的
第3个回答  2010-04-15
我也是这两天开始学MATLAB
建议你去图书馆找本书-翻到符号运算-常微分方程求解,然后照例题着输入
下面是我做的。。。
你做的时候把a,b,c,d,e输进去
y=dsolve('a*D2y+b*Dy+c*y=0','y(0)=d','Dy(0)=e')

y =

(2*a*e + b*d + d*(b^2 - 4*a*c)^(1/2))/(2*exp((t*(b - (b^2 - 4*a*c)^(1/2)))/(2*a))*(b^2 - 4*a*c)^(1/2)) - (2*a*e + b*d - d*(b^2 - 4*a*c)^(1/2))/(2*exp((t*(b + (b^2 - 4*a*c)^(1/2)))/(2*a))*(b^2 - 4*a*c)^(1/2))

暂时我也不知道如何ABCDE得方法
只能手动代入
>> y=dsolve('1*D2y-3*Dy-4*y=0','y(0)=0','Dy(0)=-5')

y =

1/exp(t) - exp(4*t)

下面是作图的
ezplot(y,[0,4]),为了使图形可见把范围所谓0到4
你在实际运用时候把中括号改为[200,400]

y=dsolve('D2y+(1+cos(t))*y=0','y(0)=0.01','Dy(0)=0') %因为默认的是t,所以我把X改成t了

Warning: Explicit solution could not be found.
无解,当然也有可能是因为MATLAB也不是全能的,或者我还没学到家,因为我也是这个星期才学的。。。
感觉MATLAB很简单的,如果只是解解微分方程的话找本书三两下就能搞定,或者找身边同学问下,用不了多少时间
第4个回答  2010-04-14
doslove函数可以解决
相似回答