Maple-ch-常微分方程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 / 20
第四章 微分方程
§4.1 常微分方程
4.1.1 常微分方程的解析解
1. 函数dsolve 在微分方程中的应用
在Maple 中,这是一个用途最广的函数——称为通用函数吧,几乎可以求解所有的微 分方程和方程组,既能求解解析解,也能求解数值解,本节只介绍其求微分方程的解析解中的作用:
dsolve (ODE);
dsolve (ODE,y(x),extra_args);
其中,ODE(Ordinary Differential Equation)是一个常微分方程; y(x)为未函数,求解时这个参数可以省略;第三个参数extra_args 是一个可选的参数,主要用来设置最后解析解的形式或求解过程中一些积分的设置,它的选值很广,这里仅举几个参数。
(1) explicit: 求出显式解; (2) implicit: 解可以是隐式;
(3) useInt: 运算中用“Int ”函数代替“int ”函数,可加快运算速度; (4) parametric: 将最后的解析解表达成另外一个自变量的形式。
这些参数的位置很灵活,可以放在除第一个参数位置外的任何位置,并且它们的组合 也很灵活,可以单独作用,也可几何参数合用,只要在中间用逗号隔开,而且参数并不一定需要写在一起,也可以分开。
> eq:='eq': eq:=diff(y(x),x)*(1+y(x)^2)+cos(x)=0; 可以两端都不是零
:= eq = + ⎛⎝ ⎫⎭
⎪⎪∂()y x () + 1()y x 2()cos x 0 > sol1:=dsolve(eq,explicit); 给出显式解
sol1()y x =
:= 12
- ()- - + 12()sin x 12_C12 - + + 3418()cos 2x 72()sin x _C136_C12()
/234
()
- - + 12()sin x 12_C12 - + + 3418()cos 2x 72()sin x _C136_C12()/13,
其中“_C 1”表示第一个任意常数。方程的解是很恐怖的解,这里仅给出了一个解,另
2 / 20
外还有两个更长的解,读者可以在Maple 下执行上面求解过程观察到另外两个解的全貌。这是由于将解转换成显函数造成的,假如我们将参数进行改善:
> sol2:=dsolve(eq,implicit,y(x)); 给出隐式解,式中的y(x)可省略
:= sol2 = + + + ()sin x ()y x 1
()y x 3_C10
再加上一个参数“useInt ”,可以明显感到运算速度非常快,因此,它在求解过程中积分比较复杂时很有用,同时还能使解过程、解结果给出较多的信息: > sol3:=dsolve(eq,implicit,y(x),useInt);
:= sol3 = - + d ⎛⎠⎜()cos x x d ⎛⎠
⎜⎜
()
y x - - 1_a 2_a _C10
其中“_a ”为积分变量.即解为.0)1(cos 2=+---
⎰
⎰C dt t xdx y
a
最后加入参数“parametric ”,可以知道经过一段时段运算后的结果: > sol4:=dsolve(eq,implicit,y(x),useInt,parametric);
:= sol4
我们惊讶地发现函数没有给出任何结果,这是因为解太复杂了,函数找不到用参数表示的方法。
下面我们用一个比较简单的例子来说明设置参数以后的结果,大家容易从结果中看出表示的方法:
>dsolve(diff(y(x),x)=-x/y(x), parametric); 圆曲线上切线的斜率
, = ()y x - + x 2_C1 = ()y x -- + x 2_C1
此为圆的上半圆与下半圆曲线表示式.
> dsolve(diff(y(x),x)=-x/y(x),implicit, parametric); 参数式
⎡⎣⎢⎢⎤⎦
⎥⎥, = ()x _T -_T _C1 + 1_T 2 = ()y _T _C1 + 1_T 2
此为圆曲线的参数式,但并不是常用的t a y t a x sin ,cos ==参数式格式. 2. 用函数odetest 检验常微分方程的解
odetest(sol,ODE); ——y(x)可省略 odetest(sol,ODE,y(x));——y(x)最好加上 odetest(solsys,sysODE);——用于方程组
以返回值为“0”给出解为真。 > with(DEtools):
3 / 20
> 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, (in odetest) expecting the second argument to be an ODE or a set or list of ODEs. Received: y(x)
下面验证一个函数是否前面所给方程的解:
> y(x)=x^2; 验证y(x)=x^2是否方程的解,这里的y(x)不能赋给
= ()y x x 2
> odetest(%,eq); 所给函数y(x)=x^2使方程左端不为0,故不是方程的解
+ + 2x 2x 5()cos x
但它是下列方程的解:
> eq:='eq': eq:=diff(y(x),x)=2*x;
:= eq = ∂
()y x 2x
> y(x)=x^2;
= ()y x x 2
> odetest(%,eq);
3.用Deplot 函数来显示微分方程的解的图像
DEplot(deqns,vars,trange,eqns); Deplot(deqns,vars,trange,inits, eqns);
其中 deqns :是待求的微分方程或微分方程组,本节中就是指微分方程;
vars :是一个非独立的变量或变量的集合,如y(x);
trange :设定变量的取值范围;eqns 是一个等式形式的条件,如:
linecolor=blue(设定图像中线的颜色为蓝的);