使用dsolve命令求解微分方程。
方法/步骤
在matlab命令窗口输入help
dsolve
可以得到关于dsolve函数的一些帮助。基本的使用方式是dsolve('equ');
其中,equ表示方程,返回结果为带有常量的符号解,
例一:
syms
y(x);
dsolve(diff(y)
==
y+
1)
用命令:dsolve('s','s1','s2',…,'x')
其中s
为方程s1,s1,s3,…为初始条件x
为自变量方程s
中用d
表示求导
数d2,d3,…表示二阶三阶等高阶导数初始条件缺省时给出带任意常数
c1,c2,的通解自变量缺省值为t
也可求解微分方程组
例
1、dsolve('dy=1+y^2')
结果ans
=tan(t+c1)
2、y=dsolve('dy=1+y^2','y(0)=1','x')
结果y
=tan(x+1/4pi)
3、x=dsolve('d2x+2d1x+2x=exp(t)','x(0)=1','dx(0)=0')
结果x
=1/5exp(t)+3/5exp(-t)sin(t)+4/5exp(-t)cos(t)
4、s=dsolve('df=3f+4g','dg=-4f+3g')
%解微分方程组
s
=
f:
[1x1
sym]
g:
[1x1
sym]
计算结果返回在一个结构
s
中为了看到其中
f,g
的值有如下指令
f=sf
g=sg
f
=exp(3t)(cos(4t)c1+sin(4t)c2)
g
=-exp(3t)(sin(4t)c1-cos(4t)c2)
用matlab的dsolve函数计算该二阶微分方程的解析值是有一定的难度。只能用数值分析的方法来求解其数值解。当然求其数值解,必须还得已知a、θ的具体数值。该问题可以用matlab的ode45函数求得。求解方法如下:
1、建立微分方程的自定义函数,odefun(x,y)
2、当a=10、θ=π/6时,执行下列代码
theta=pi/6;
[x,y]= ode45(@odefun,[0,018],[05,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)的相平面图');
对于相对简单的微分方程或微分方程组,可以dsolve()函数得到解析值(精确解)。
例①:
>>syms x(t) a
>>dsolve(diff(x) == -ax)
ans =
C2exp(-at)
>>dsolve(diff(x) == -ax, x(0) == 1)
ans =
exp(-at)
例②:
syms y(t) a
>> Dy = diff(y); D2y = diff(y,2);
>> y=dsolve(D2y == -a^2y, y(0) == 1, Dy(pi/a) == 0)
y =
exp(-ati)/2 + exp(ati)/2
例③:
>> syms w(t)
>> Dw = diff(w); D2w = diff(w,2);
>> w = dsolve(diff(D2w) == -w, w(0)==1, Dw(0)==0, D2w(0)==0)
w =
exp(-t)/3 + (2exp(t/2)cos((3^(1/2)t)/2))/3
零输入的含义是
f(t)=0,直接用dsolve求解即可(其中题目第三个方程第一项有误,应为三阶导数y'''(t)):
>> dsolve('d2y+5dy+6y=0','y(0)=1,dy(0)=-1')
ans =
2exp(-2t)-exp(-3t)
>> dsolve('d2y+2dy+5y=0','y(0)=2,dy(0)=-2')
ans =
2exp(-t)cos(2t)
>> dsolve('d3y+4d2y+5dy+2y=0','y(0)=0,dy(0)=-1,d2y(0)=-1')
ans =
-3exp(-2t)+3exp(-t)-4exp(-t)t
利用函数dsolve,因为不晓得你公式里面是否是y=f(x),所以为层编写程序。
请问公式中是否满足:
y=f(x);
x=g(t)的关系?
solve和dsolve函数均可以用于解函数方程或者方程组,solve主要用于解一般的方程及方程组,而dsolve则一般用于求解微分方程组,如求解方程sin(x)pi=8,求x
>>
solve('sin(x)pi=8')
ans
=
asin(8/pi)
pi
-
asin(8/pi)
这里默认求解的是x,如果是>>
solve('sin(x)piy=8'),那么依旧默认求解的是x,那如果想输出y呢?则需要>>
solve('sin(x)piy=8','y'),那么会输出ans
=8/(pisin(x))。
dsolve函数的话,需要知道函数是关于谁的倒数,故这里没有给出你程序。你可以在matlab的command
window窗口输入doc
dsolve,查看函数dsolve的用法。
祝好~
用matlab求解微分方程初值问题数值解和解析解,可以这样处理:
一、数值解
微分方程初值问题数值解可以用ode函数求解。
首先,自定义微分方程的函数,即
dy = 3/xy+x^3(exp(x)+cos(x))-2x;
其二,确定初始条件,即
y0=[(exp(pi)+2/pi)pi^3];
其三,使用ode45函数,求出其数值解x,y
二、解析解
微分方程初值问题解析解可以用dsolve函数求解。
首先,对y(x)进行变量声明,即
syms y(x)
其二,对y(x)求一阶导数,即
Dy=diff(y,1)
其三,使用dsolve函数,求出其解析解y(x)的表达式
y=dsolve(Dy==3/xy+x^3(exp(x)+cos(x))-2x,y(pi)==(exp(pi)+2/pi)pi^3)
三、绘制数值解和解析解曲线
首先,使用plot函数,绘出数值解的曲线
plot(xy)
其二,计算x在π,2π区间内的一系列若干个值与y相当于的y值
其三,再使用plot函数,绘出解析解的曲线
运行代码后可以得到如下结果。
能画一个当然也能画多个了。
画第二个之前用plot on命令,这样后面再绘图的时候就都画在同一个坐标图里面了。
如果你用的ode函数,注意参数t或者你给的例子是x,范围要按你分段的那么分,得出的数据才会在绘图中也分段。也就是说分段放在ode函数里,不是放在plot里。
另外很多微分方程可以直接解出来的,用dsolve函数。
比如你给的这个例子就可以,只不过解出来的y=C1exp(xt)和y=C1exp(2xt),里面含有两个待定系数,要先给出初始值或者边界条件,把系数确定,才能绘图的。这时分段范围就可以直接放在plot函数里了。
对于第二个问题,用ode解的微分方程确定不了反函数。
可以用dsolve解出微分方程,然后再用solve,把x当未知数,求出用y表示的x。
再代入y的特定值,就可以求出对应的x了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)