Maple6ch41常微分方程共23页Word格式.docx

上传人:b****6 文档编号:17406063 上传时间:2022-12-01 格式:DOCX 页数:13 大小:99.11KB
下载 相关 举报
Maple6ch41常微分方程共23页Word格式.docx_第1页
第1页 / 共13页
Maple6ch41常微分方程共23页Word格式.docx_第2页
第2页 / 共13页
Maple6ch41常微分方程共23页Word格式.docx_第3页
第3页 / 共13页
Maple6ch41常微分方程共23页Word格式.docx_第4页
第4页 / 共13页
Maple6ch41常微分方程共23页Word格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

Maple6ch41常微分方程共23页Word格式.docx

《Maple6ch41常微分方程共23页Word格式.docx》由会员分享,可在线阅读,更多相关《Maple6ch41常微分方程共23页Word格式.docx(13页珍藏版)》请在冰豆网上搜索。

Maple6ch41常微分方程共23页Word格式.docx

其中“_a”为积分变量.即解为

最后加入参数“parametric”,可以知道经过一段时段运算后的结果:

sol4:

=dsolve(eq,implicit,y(x),useInt,parametric);

我们惊讶地发现函数没有给出任何结果,这是因为解太复杂了,函数找不到用参数表示的方法。

下面我们用一个比较简单的例子来说明设置参数以后的结果,大家容易从结果中看出表示的方法:

dsolve(diff(y(x),x)=-x/y(x),parametric);

圆曲线上切线的斜率

此为圆的上半圆与下半圆曲线表示式.

dsolve(diff(y(x),x)=-x/y(x),implicit,parametric);

参数式

此为圆曲线的参数式,但并不是常用的

参数式格式.

2.用函数odetest检验常微分方程的解

odetest(sol,ODE);

——y(x)可省略

odetest(sol,ODE,y(x));

——y(x)最好加上

odetest(solsys,sysODE);

——用于方程组

以返回值为“0”给出解为真。

with(DEtools):

odetest(sol1[1],eq,y(x));

sol1[1]是方程的解

odetest(sol1[2],eq,y(x));

sol1[2]是方程的解

odetest(sol1[3],eq,y(x));

sol1[3]是方程的解

odetest(sol2,eq,y(x));

sol2是方程的解

odetest(sol3,eq,y(x));

sol3是方程的解

odetest(sol4,eq,y(x));

sol4不能代入检验

Error,(inodetest)expectingthesecondargumenttobeanODEorasetorlistofODEs.Received:

y(x)

下面验证一个函数是否前面所给方程的解:

y(x)=x^2;

验证y(x)=x^2是否方程的解,这里的y(x)不能赋给

odetest(%,eq);

所给函数y(x)=x^2使方程左端不为0,故不是方程的解

但它是下列方程的解:

=diff(y(x),x)=2*x;

3.用Deplot函数来显示微分方程的解的图像

DEplot(deqns,vars,trange,eqns);

Deplot(deqns,vars,trange,inits,eqns);

其中deqns:

是待求的微分方程或微分方程组,本节中就是指微分方程;

vars:

是一个非独立的变量或变量的集合,如y(x);

trange:

设定变量的取值范围;

eqns是一个等式形式的条件,如:

linecolor=blue(设定图像中线的颜色为蓝的);

stepsize=0.05(变量的取值步长);

inits:

是微分方程的初值条件,如果有多个初值条件,用集合表示,并且每个初值条件都必须用方括号起来,如果不给初始值,函数将等间隔的取最后解中的常数为某值。

请看下面的例子:

DEplot(eq,y(x),x=-10..10,y=0..3,linecolor=blue,stepsize=0.05);

这个例子中没有为微分方程设定初始值,所以函数用一些箭头来表示解的趋势,假如我们设方程的初始值是y(0)=2。

图像将变为:

DEplot(eq,y(x),x=-10..10,[[y(0)=2]],y=0..3,linecolor=blue,stepsize

=0.05);

[[y(0)=2]]这个初始条件也可放在“y=0..3”的后面

图形中的粗线就是满足初始条件的解的图形,假如我们对这个图形是不是刚才求得的解的图形有疑问的话,我们可以用另外一个作图函数contourplot来验证一下,这个函数在plots程序包里:

with(plots):

f:

=sin(x)+1/3*y^3+y:

contourplot(f,x=-10..10,y=-3..3,coloring=[red,blue]);

显然,过y(0)=2这点的图形跟上面图形中篮粗线对应的图形是一样的,说明我们的求解没有错。

如果将这个图的范围适当调整,尽量得到过y(0)=2的那条曲线,显示效果会更好些。

实际上,只要将作图中y的范围改为-2.55~2.55即可达到目的.

4.用各种特定函数求解各种微分方程——P176

odeadvisor(ODE);

在Detools程序包中

这是一个判断微分方程类型的函数,可用来判分离变量、一阶线性、全微分方程还是普通方程。

最常见的返回参数和中文含义如下:

separable可分离变量方程,用separablesol(lode,v)求解,其中v为未知函数

linear线性方程,用linearsol(lode,v)

homogeneous齐次型方程,用homogeneous(lode,v)

bernoulli贝努里

exact全微分方程

Abel阿贝尔方程

Quadrature积分形式的微分方程(如dy=xdx),是可离变量方程中最简单的

(1)可分离变量的方程

解:

(Maple-lx4-解法参考)

=x*y(x)*(1-x*diff(y(x),x))=x+y(x)*diff(y(x),x);

调用程序包

odeadvisor(eq);

判断方程类型

方程为可分离变量的方程

separablesol(eq,y(x));

用程序包中的分离变量法求解

法2:

仍用dsolve求解:

dsolve(eq,explicit);

用通用函数求解.接上方程,结果与上法相同

法3:

将方程改为

求隐式解:

diffy:

diffy'

初始化变量,这步一要定做

diffy=solve(eq,diff(y(x),x));

解出y的导数

f'

g:

g'

=x->

x/(x^2+1);

g:

=y->

y/(y-1);

构造函数f(x),g(y)

这里的y视为单变量,不要写成y(x)

RHS:

=int(g(y),y);

LHS:

=int(f(x),x);

赋表达式分别得左、右两端

LHS=RHS+C;

给出隐式解

solve(%,y);

求出显式解

(2)齐次型的方程

解(Maple-lx4-1)

法1:

(按齐次方程专用求解函数求解)

;

=diff(y(x),x)=y(x)/x+tan(y(x)/x);

调程序包

判断类型

齐次型方程的A种,是一阶、线性对称方程

genhomosol(eq);

用齐次方程的求解函数求解,得以下两个通解

用通用函数求解:

按解齐次型方程的求解方法求解:

y:

y'

x:

x'

u:

u'

如果不是新打开的Maple工作窗口,最好要这一步

=u*x:

one:

=expand(eq);

试将方程中“y/x”直接换成u后给出新方程

two:

=subs(diff(x(x),x)=1,x(x)=x,one);

简化方程

diffu:

=solve(two,diff(u(x),x));

化为可分离变量的方程

left:

=int(1/tan(u),u);

right:

=int(1/x,x);

按可分离变量方法求

解,这里的u不能写成u(x),因为要把它当单变量进行积分

初始化变量y,此前它是”ux”

subs(u=y/x,left)=right+_C1;

这一结果与前的解仅在于任意常数的写法上不同而已.

法4:

本人的解法——化为分离变量方程的求解函数进行求解:

y(x):

y(x)'

u(x):

u(x)'

=u(x)*x:

注意函数关系,如果用y=ux或(x)=u*x,得不到下面的形式

eq1:

=subs(y(x)/x=u(x),eq);

替换完毕,再对方程化简

上式两端可不再化简,解过程用时相近

separablesol(eq1,u(x));

用分离变量法函数求解方程,得两个同样的通解

a:

=subs(u(x)=y/x,%);

换回原变量,如果不将两个通解赋值给集合a,就不能用“solve”对集合中的两个非方程组的函数关于同一变量求解

y1:

=solve(op(1,a),y);

y2:

=solve(op(2,a),y);

给出两个显式解

上面用了提出集合元素的函数“op”,参第一章“1.1.3集合”.也可用分离方程中变量的函数isolate,执行“isolate(op(1,a),y);

”得到第一个通解中的y的表达式.请试之.

Ex.2’解齐次型(C)的微分方程

答案:

解(Maple-lx4-2)

也可以用通用求解函数dsolve()求解.这里选用求齐次型方程的求解函数进行求解:

=diff(y(x),x)=(x-y(x)+1)/(x+y(x)-2);

=genhomosol(eq);

用齐次型方程的求解函数求解,解用集合表示,其解需要

按元素取出使用,为此,将解赋给集合“a”

由于x与y的隐式关系很简单,而这里的显示结果即较为复杂,为此,如以下化简:

subs(_C1=C,a[1]):

subs(y(x)=z,a[1]):

subs(_C1=C,%);

替换

map(simplify,%);

对上式两端化简。

因为上式根号中的内容计算机不认识,现在认识的是它的如下根式中的化简结果,所以,要想解出根式下面的表达式,要先化简

isolate(%,8*C^2*x^2-8*C^2*x+2*C^2+1);

解出根式下面的表达式

simplify((lhs(%)-rhs(%)))=0;

取出上式的左右两端作差的方程,

目的是消去相同项

sort(%,z);

对变量z按降幂排此代数方程的两端

simplify((lhs(%)+14*C^2-1))=-4*C^2*_C1;

用solve解出后两项行吗?

factor(%)/(-4*C^2);

先分解因式,再除以分母才可以得到下面的结果

subs(z=y,%):

注:

这个结果用通用求解函数也不能简单给出,而是给出

dsolve(eq,implicit);

问题:

试将此结果化为如上多项式形式的“标准”答案。

(3)一阶线性方程

Ex.3解一阶线性微分方程

解(Maple-lx4-3)

=diff(y(x),x)+y(x)/x=sin(x)/x;

(用通用函数求解,解出后的检验略)

dsolve(eq);

(用特定求解方程的函数求解,解出后的检验略)

linearsol(eq);

(用

的通解公式

求解)

P(x):

=1/x;

Q(x):

=sin(x)/x;

y(x)=exp(-int(P(x),x))*(int(Q(x)*exp(int(P(x),x)),x)+C);

(4)贝努里方程

Ex.4解贝努里微分方程

解(Maple-lx4-4)

restart;

=diff(y(x),x)=6*y(x)/x-x*y(x)^2;

(用通用函数求解)

用通用函数求解

(按贝努里方程专用求解函数求解)

bernoullisol(eq);

(按解贝努里方程的推导方法求解)

=subs(y(x)=1/z(x),eq);

odeadvisor(eq1,z(x));

simplify(%);

如用通用函数或专用求解函数求解,这步不需要

factor(%)*(-z(x)^2);

如用通用函数或专用求解函数求解,这步不需要

linearsol(%);

上面已经判断为线性方程,就可用线性方程专用求解函数

subs(z(x)=1/y(x),%);

solve(%,y(x));

也可用simplify(%)

(5)全微分方程

解(Maple-lx4-4)

=diff(y(x),x)=(2+y(x)*exp(x*y(x)))/(2*y(x)

-x*exp(x*y(x)));

(用通用求解函数求解)

eq1'

=(2*y(x)-x*exp(x*y(x)))*diff(y(x),x)=2+y(x)*exp(x

*y(x));

=dsolve(eq);

系统用隐式给出了通解

odetest(sol1,eq);

验隐式解是正确的

要求给出显式解

odetest(sol2,eq);

验显式解是正确的

(用专用求解函数求解)

odeadvisor(eq,y(x));

判断方程类型(给出结果不知是何类型

但从原方程观察应为全微分方程(exact))

odeadvisor(eq1,y(x));

转换成“eq1”判断为全微分方程(是否都需这样转化)

exactsol(eq1);

用全微分方程的专用求解函数求解

(按全微分方程的求解步骤进行求解)

M:

M'

N:

N'

=(x,y)->

2+y*exp(x*y);

-(2*y-x*exp(x*y));

eq2:

eq2'

=M(x,y(x))+N(x,y(x))*diff(y(x),x)=0;

化为M(x,y)dx+N(x,y)dy=0格式

testeq(diff(N(x,y),x),diff(M(x,y),y));

方程为全微分方程的充要条件是

exactsol(eq2);

方程的隐式解为

Ex.5’

解(Maple-lx4-6)

要求:

用3~4种方法给出通解,并将答案化成下式。

答案:

(6)高阶常系数线性(非)齐次微分方程——Maple:

P188~193

(7)级数解(默认为5阶展式)——Maple:

P193~195——dsolve(ODE,y(x),

4.1.2常微分方程组的解析解

求解函数与求解常微分方程所用的函数一样,它的参数形式如下:

dsolve({sysODE,Ics},{func},extra_args);

其中各参数的意义如下:

sysODE方程组的集合

Ics初始条件的集合

Func待求的函数集合

Exgra_args设置解的形式

sysOde:

sysOde'

={D(x)(t)=x(t)+y(t)+exp(-t),D(y)(t)=y(t)};

dsolve(sysOde,{x(t),y(t)});

={D(x)(t)=y(t)-z(t),D(y)(t)=z(t),D(z)(t)=y(t)};

dsolve(sysOde,{x(t),y(t),z(t)},implicit);

odetest(%,sysOde);

验法1

=dsolve(sysOde,{x(t),y(t),z(t)});

验法2

odetest(a,sysOde);

4.1.3常微分方程定解问题的求解

很多时候求定解问题是先求出通解,再求定解。

但用Maple在大多数情形下可直接求解。

所用求解函数仍是dsolve:

dsolve({ODE,ICs},y(x),extra_args);

dsolve({sysODE,sysICs},{func},extra_args);

注意:

在使用上面第二个命令求方程组定解问题时,“sysODE,sysICs”的内容都要以元素给出,而不能用子集合分别给出“sysODE”、“sysICs”。

1.一个方程的定解问题

(一阶方程的定解问题)

=D(y)(x)+4*x*y(x)/(x^2-1)=x*sqrt(y(x));

简化方程再求解

=dsolve({eq,y(0)=4},y(x));

给出含RootOf(查帮助)的解

=allvalues(sol1);

将RootOf表达的解化为常见式

(隐式解可以避开RootOf函数,但解过程稍复杂)

=dsolve(eq,y(x),implicit);

求隐式解

isolate(subs(x=0,y(0)=4,sol2),_C1);

确定任意常数_C1

isolate(subs(_C1=-2,sol2),y(x));

将任意常数_C1代入解sol2中

(高阶方程的定解问题)

=diff(x(t),t,t)-2*diff(x(t),t)+x(t)=4*t*exp(t);

dsolve({eq,x(0)=2,D(x)(0)=2},x(t));

2.方程组的定解问题

(方程组的定解问题)

dsolve({sysOde[1],sysOde[2],x(0)=0,y(0)=0},{x(t),y(t)});

4.1.4常微分方程的数值解

除了上面介绍的几种特殊的常微方程以外,大部分常微方程都很难求解析解,如下面这个简单的一阶方程:

={D(y)(x)=cos(x*y(x))};

dsolve(eq,y(x));

经过一段时间的计算后,给出空解

这个时候我们就得用数值方法得到微分方程的数值解,所求函数可以是

dsolve(deqns,vars,numeric)

dsolve(deqns,vars,numeric,options)

dsolve(deqns,vars,type=numeric)

dsolve(deqns,vars,type=numeric,options)

其中:

deqns是待求微分方程或方程组和初始值的集合

vars是待求的微分方程中的待求函数

numeric或type=numeric设置函数求出方程的数值解而不是解析解

options设置函数求解的各种设置,是一个可选参数,看帮助,这节经常用到的是output=listprocedure,value=[a1,a2,…,an],ai表示待求的数值点的自变量的值,前者表示让dsolve函数以列表加过程的方式输出,而后者则让函数输出给定的几个点的函数值,对这两者的理解参下例:

法1(希望将解以过程表示时,然后随机求值,则用:

=D(y)(x)=cos(x*y(x));

=dsolve({eq,y(0)=2},y(x),type=numeric,output=

listprocedure);

s:

=[1,2,3,4,5];

接下来再随机求值

map(g,s);

“map”的用法

先解出过程的好处在于还可以观察解的基本形状,

plot('

rhs(g(x)[2])'

x=-10..10);

对每个x的值,用上面的过程解g

的表达式算出相应的g(x)值

在上面的命令中,g(x)是一个列表,里面每个元素都是自变量x的取值表达式和其对应的应变量y的取值表达式构成的,而画图时只需第二个表达式的右端的值,故用“rhs(g(x)[2])”来取列表的每个元素的第二个表达式的值.

法2(如果只想知道后面的结果:

=D(y)(x)=cos(x*y(x))

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 解决方案

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1