MATLAB求助,求解析解

MATLAB求助,求解析解,第1张

使用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了。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12154886.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存