Maple在非线性方程求解中的应用
达式, 从中很难得到有益的结果, 而函数fsolve( ) 则可以找出这个非线性方程式的浮点数解( 以下简称解) .
输入fsolve( x- ( x/4) ^4- cos( x^5) =0, {x}) , 显示{x=0.8744267217}.
但是 fsolve( ) 函数每次只能找到方程的一个解, 那么怎样尽可能找到方程的全部解呢? 下面通过具体
输入 fsolve( f3( x) =0, {x=- 1, y=0.7}) , 显示{y=0.7071067812, x=1.224744871}.
这样, 就找到了( 3) 式的全部解, 仿照例 1 与例 2, 也可以进行验根, 这里从略.
3 结论
通过上面的 3 个例子, 可以找到解非线性方程( 或非线性方程组) 的一般方法, 步骤如下:
绘图功能和计算能力, 通过具体的例子, 寻找求解非线性方程的一般方法.
对于次数低于 4 的多项式方程, Maple 提供的 solve( ) 函数一般能解出其精确解或解析解. 例如要求方
程 x3+2x2- 5x- 6=0 的解, 就可以在 Maple 中输入以下命令:
输入 solve( x^3+2*x^2- 5*x- 6=0, {x}) , 显示{x=- 1}{x=2}{x=- 3}.
Maple 是加拿大滑铁卢大学( University of Waterloo) 和 Waterloo Maple Software 公司注册的一套为微积
分、线性代数、微分方程、概率统计等数学分支研制开发的数学分析型的数学软件, 它的主要功能包括数学
图形的描绘、数值计算和符号处理等方面. 有不少文献对其进行了不同方面的论述, 如文献[1], [2], [3].
本文仅从解非线性方程方面, 来探究 Maple 在数学研究和教学中的应用. 求解一般的非线性方程( 或非
线性方程组) , 传统的方法是利用函数的一阶、二阶导数( 或偏导数) 的判断单调性、凹凸性的几何方法, 以及
利用牛顿迭代法为代表的数值方法[4], 它们分别存在精确度差和计算繁琐的缺点. 本文利用 Maple 的强大的
输入 fsolve( f3( x) =0, {x=- 1, y=0.7}) , 显示{y=0.7071067812, x=- 1.224744871};
输入 fsolve( f3( x) =0, {x=- 1, y=- 0.7}) , 显示{y=- 0.7071067812, x=1.224744871};
6) 将解代入函数 f( x) 进行验根.
( 下转第 36 页)
36
石家庄学院学报
2007 年 11 月
确实为( 1) 式的解.
那么, 为什么不一次绘出函数 f1( x) 的全部图形来寻找方
程的解呢? 不妨做个试验.
输入 plot( f1( x) , x=- inf inity..inf inity) , 显示如图 5, 这时
Maple 绘制的图形出现了失真现象.
例 2 求方程 sinh2( x) +cosh( x2) =6x- 1 的解. 解 首先, 将方程改写为
的例子, 寻找一种求非线性方程解的方法. 首先介绍一下将要用到的 Maple 中的函数.
1 本文用到的 Maple 中的函数
solve( eqn, var) , 求解 eqn 中的未知数 var; fsolve( eqn, var) , 求解 eqn 中的未知数 var, 并返回一个浮点数解; fsolve( eqn, var=x0) , 从 var=x0 来搜寻 eqn 的解, 并返回一个浮点数解; plot( f( x) , x=xmin…xmax) , 从 xmin 到 xmax 绘出 f( x) 的函数图. 另外 Maple 用 inf inity 表示无穷大. 关于这几个函数更多的用法见文献[5]. 接下来, 举几个例子.
收稿日期: 2007- 05- 27 作者简介: 岳崇山( 1979- ) , 男, 河北崇礼人, 助教, 硕士研究生, 主要从事微分几何、拓扑以及数学软件研究.
6
石家庄学院学报
2 例子
例 1 求方程 x2 - 6x=sin( x+8) 的解. 12
解 将方程改写为
x2 - 6x- sin( x+8) =0. 12
输入 plot( f1( x) , x=100..inf inity) , 显示如图 4.
如图 4 所示, 当 x>100 时, ( 1) 式没有其他解了. 那么 x1=- 0.166 248 692 5, x2=71.839 080 18 是否一定是
( 1) 式的解呢? 这就需要进行验根. 方法很简单, 只要将上述数值代入函数f1( x) , 如果 f1( xi) - 0 <ε, ( i=1, 2)
输入 plot( f1( x) , x=- inf inity…- 0.17) , 显示如图 2. 如图 2 显示, ( 1) 式在 x<- 0.17 时是无解的. 同样, 观察 0.5≤x≤100 时, 函数 f1( x) 的图形. 输入 plot( f1( x) , x=0.5..100) , 显示如图 3.
"1- x2+y2=0
2- x2- y2=0
( 3)
的解.
解ห้องสมุดไป่ตู้设变量 f3( x, y) ={1- x2+y2=0, 2- x2- y2=0}.
输入 f3∶={1- x^2+y^2=0, 2- x^2- y^2=0}∶, 在( x, y) ∈[- 2, 2]×[- 2, 2]的范围内寻求( 3) 式的解.
1) 将方程化成 f( x) =0( 或 f( x, y) =0) 的形式, 再将方程左边设为一个函数 f( x) ;
2) 运行指令 fsolve( f( x) =0, {x}) , 求出方程的一个解 x=x0;
3) 用函数 plot( ) 在区间[x0- ε, x0+ε]内绘出函数 f( x) 的图形, 观察函数图形与 x 轴的交点的横坐标, 设为
输入 plots[implicit]( f3( x) , x=- 2..2, y=- 2..2, scaling=CONSTRAINED) 显示如图 10.
观察图 10, 有:
图 10 方程组函数f3( x) 在[- 2, 2]×[- 2, 2]上的图像
输入 fsolve( f3( x) =0, {x=- 1, y=- 0.7}) , 显示{x=- 1.224744871, y=- 0.7071067812};
6
2007 年 11 月
( 1)
4
2
-1
- 0.5 0
0.5
1
x
-2
-4
-6
图 1 函数 f1( x) 在区间[- 1, 1]上的图像
图 2 函数 f1( x) 在区间[- ∞, - 0.17]上的图像
如图 1 显示, ( 1) 式确实有解为x=- 0.166 248 692 5. 但是( 1) 式只有这一个解吗? 试着将搜寻的范围扩 大.
则其即为( 1) 式的解, 这里 ε是一个足够小的正整数. 为此:
输入 abs( f1( - 0.1662486925) ) , abs( f1( 71.83908018) ) , 显 示 1, 10-10, 2.5, 10-9.
上面的数据表明, x1=- 0.166 248 692 5, x2=71.839 080 18
第9卷 第6期 2007 年 11 月
石家庄学院学报 Journal of Shijiazhuang University
Vol.9, No.6 Nov.2007
Maple在非线性方程求解中的应用
岳崇山 1, 景海斌 2, 张 贺 1
( 1.河北北方学院 数学系, 河北 张家口 075000; 2.河北建筑工程学院 数理系, 河北 张家口 075000)
x1, x2, x3…;
4) 运行指令 fsolve( {f( x) =0}, x=xi) , 求出方程 f( x) =0 的精确解 x=xi, i=1, 2, 3…;
5) 利用 3) 和 4) 的结果改变 x0 及 ε的值, 重复步骤 3) 和步骤 4) , 直到找到方程 f( x) =0 的全部的解;
图 5 Maple 绘制的( - ∞, +∞) 上函数 f1( x) 上的图像
sinh2( x) +cosh( x2) - 6x+1=0.
( 2)
设函数f2( x) =sinh2( x) +cosh( x2) - 6x+1, 输入f2∶=sinh( x) ^2+cosh( x^2) - 6*x+1∶, 接着求( 2) 式的一个解. 输入
图 7 函数 f2( x) 在区间[- ∞, 0.3]上的图像
图 8 函数 f2( x) 在区间[0.2, 2]上的图像
图 9 函数 f2( x) 在区间[2, 4]上的图像
8
石家庄学院学报
2007 年 11 月
输入 fsolve( f2( x) =0, x=1.4) , 显示 1.412520994; 输入 plot( f2( x) , x=2..4) , 显示如图 9.
如果继续扩大搜寻范围, Maple 将提示数据溢出, 如:
输入 plot( f2( x) , x=2..130) , 显示 Error, Floating point overflow. Please shorten axes. 这表明当 x→∞ 时,
函数 f2( x) 增长得非常快, 与 x 轴没有交点. 下面进行验根: 输入 abs( f2( 0.3568224931) ) , abs( f2( 1.412520994) ) 显示 0, 1, 10-10. 上面的数据表明, x1=0.356 822 493 1, x2=1.412 520 994 确实为( 2) 式的解. 例 3 求方程组
Maple 大作业
一、Maple 程序编写实例1. 如图中1所示单自由度弹簧质量系统在,质量块质量为m ,当质量块下拉弹簧处于平衡位置时,静变形为40mm 。
求此弹簧质量系统的振动规律。
解:●建模图1 系统受力:mg,回复力kx 。
物体作上下的自由振动运动。
● Maple 程序> restart: #清零> eq:=m*diff(x(t),t$2)=m*g-k* #∑=F x m x ..(delta[st]+x):> eq:=lhs(eq)-rhs(eq)=0: #移项> eq:=subs(diff(x(t),t$2)=DDx, #代换delta[st]=m*g/k,eq):> eq:=expand(eq/m): #展开> eq:=subs(k=m*omega[0]^2,eq): #代换> X:=A*sin(omega[0]*t+beta): #系统通解> k:=m*g/delta[st]: #弹簧刚度系数> omega[0]:=sqrt(k/m): #固有频率> x[0]:=-delta[st]: #初位移> v[0]:=0: #初速度> A:=sqrt(x[0]^2+v[0]^2/omega[0]^2): #振幅> beta:=-Pi/2: #初相角> delta[st]:=0.04:g:=9.8: #已知条件> omega[0]:=eval(omega[0]): #已知条件> A:=eval(A): #振幅数值> X:=evalf(X,4); #系统振动规律 := X -.04000()cos 15.65t答:此弹簧质量系统的振动规律x=-0.04cos(15.65t)。
2. 一个质量为m 的物体在一根抗弯刚度为EJ ﹑长为l 的简支梁上作自由振动。
若此物体在梁未变形的位置无初速度释放,求系统自由振动的频率。
计算机代数系统第4章-Maple方程求解
第四章 方程求解1 代数方程(组)求解1.1 常用求解工具—solve求解代数方程或代数方程组, 使用Maple 中的solve 函数. 求解关于x 的方程eqn=0的命令格式为:solve(eqn, x);求解关于变量组vars 的方程组eqns 的命令为:solve(eqns, vars);> eqn:=(x^2+x+2)*(x-1);:= eqn () + + x 2x 2() - x 1> solve(eqn,x);,,1- + 1212I 7- - 1212I 7 当然, solve 也可以求解含有未知参数的方程:> eqn:=2*x^2-5*a*x=1;:= eqn = - 2x 25a x 1> solve(eqn,x);, + 5a 14 + 25a 28 - 5a 1 + 25a 28 solve 函数的第一个参数是有待求解的方程或方程的集合, 当然也可以是单个表达式或者表达式的集合, 如下例:> solve(a+ln(x-3)-ln(x),x);3e a- + 1ea 对于第二个参数, Maple 的标准形式是未知变量或者变量集合, 当其被省略时, 函数indets 自动获取未知变量. 但当方程中含有参数时, 则会出现一些意想不到的情况: > solve(a+ln(x-3)-ln(x));{}, = x x = a - + ()ln - x 3()ln x很多情况下, 我们知道一类方程或方程组有解, 但却没有解决这类方程的一般解法, 或者说没有解析解. 比如, 一般的五次或五次以上的多项式, 其解不能写成解析表达式. Maple 具备用所有一般算法尝试所遇到的问题, 在找不到解的时候, Maple 会用RootOf 给出形式解.> x^7-2*x^6-4*x^5-x^3+x^2+6*x+4;- - - + + + x 72x 64x 5x 3x 26x 4> solve(%); + 15 - 15()RootOf , - - _Z 5_Z 1 = index 1()RootOf , - - _Z 5_Z 1 = index 2()RootOf , - - _Z 5_Z 1 = index 3,,,,,()RootOf , - - _Z 5_Z 1 = index 4()RootOf , - - _Z 5_Z 1 = index 5, > solve(cos(x)=x,x);()RootOf - _Z ()cos _Z对于方程组解的个数可用nops 命令获得, 如:> eqns:={seq(x[i]^2=x[i],i=1..7)};:= eqns {},,,,,, = x 12x 1 = x 22x 2 = x 32x 3 = x 42x 4 = x 52x 5 = x 62x 6 = x 72x 7 > nops({solve(eqns)}); 128但是, 有时候, Maple 甚至对一些“显而易见”的结果置之不理, 如:> solve(sin(x)=3*x/Pi,x);()RootOf - 3_Z ()sin _Z π此方程的解为0 ,6π±, 但Maple 却对这个超越方程无能为力, 即便使用allvalues 求解也只有下述结果:> allvalues(%);()RootOf , - 3_Z ()sin _Z π0.另外一个问题是, Maple 在求解方程之前,会对所有的方程或表达式进行化简, 而不管表达式的类型, 由此而产生一些低级的错误:> (x-1)^2/(x^2-1);() - x 12- x 21> solve(%);1但是, 大量实验表明, solve 的确是一个实用的方程求解工具, 但是也不可盲目相信它给出的一切结果, 特别是对于非线性方程而言, 对于给出的结果需要加以验证.下面通过几个例子说明在Maple 中非线性方程组的求解问题.例:求解方程组:⎩⎨⎧=-=+y x y x 925222 > eqns:={x^2+y^2=25,y=x^2-5};:= eqns {}, = y - x 25 = + x 2y 225> vars:={x,y};:= vars {},x y> solve(eqns,vars);,,,{}, = x 0 = y -5{}, = x 0 = y -5{}, = y 4 = x 3{}, = y 4 = x -3也可用下面的语句一步求出:> solve({x^2+y^2=25,y=x^2-5},{x,y});,,,{}, = x 0 = y -5{}, = x 0 = y -5{}, = y 4 = x 3{}, = y 4 = x -3这个问题非常简单, 但通常遇到的非线性问题却不是这么简单, 例如要求解方程组:y x y x y x -=+=+,122> eqns:={x^2+y^2=1,sqrt(x+y)=x-y};vars:={x,y};:= eqns {}, = + x 2y 21 = + x y - x y:= vars {},x y> sols:=solve(eqns,vars);sols = y ()RootOf , + + 2_Z 24_Z 3 - -1.000000000.7071067812I ,{ := = x - - ()RootOf , + + 2_Z 24_Z 3 - -1.000000000.7071067812I 2}{}, = x 1 = y 0,可以看出, 方程解的形式是以集合的序列给出的, 序列中的每一个集合是方程的一组解, 这样就很利于我们用subs 把解代入原方程组进行检验:> subs(sols[2],eqns);{} = 11> sols2:=allvalues(sols[1]);:= sols2{}, = x - + 112I 2 = y - - 112I 2 > simplify(subs(sols2,eqns));{}, = I 2I 2 = 111.2 其他求解工具1.2.1 数值求解对于求代数方程的数值解问题, Maple 提供了函数fsolve , fsolve 的使用方法和solve 很相似:fsolve(eqns, vars, options);其中, eqns 表示一个方程、方程组或者一个程序, vars 表示一个未知量或者未知量集合, options 控制解的参数(诸如:complex: 复根; maxsols=n :只找到n 阶最小根; intervals :在给定闭区间内求根, 等).> fsolve(x^5-x+1,x);-1.167303978> fsolve(x^5-x+1,x,complex);-1.167303978 - -.1812324445 1.083954101I + -.1812324445 1.083954101I - .7648844336.3524715460I ,,,,+ .7648844336.3524715460I > fsolve(x^3-3*x+1,x,0..1);.3472963553对于多项式方程, fsolve 在默认情况下以给出所有的实数解, 如果附加参数complex , 就可以给出所有的解. 但对于更一般的其他形式的方程, fsolve 却往往只满足于得到一个解:> eqn:=sin(x)=x/2;:= eqn = ()sin x 1x > fsolve(eqn);0.> fsolve(eqn,x,0.1..infinity);1.895494267> fsolve(eqn,x,-infinity..-0.1);-1.895494267函数fsolve 主要基于两个算法, 通常使用牛顿法, 如果牛顿法无效, 它就改而使用切线法. 为了使fsolve 可以求得所有的实根, 我们通常需要确定这些根所在的区间. 对于单变量多项式, 函数realroot 可以获得多项式的所有实根所在的区间.> 4+6*x+x^2-x^3-4*x^5-2*x^6+x^7;+ + - - - + 46x x 2x 34x 52x 6x 7> realroot(%);[],,[],02[],24[],-2-1函数realroot 还有一个可选参数, 它是用来限制区间的最大长度的, 为了保证使用数值求解方法时收敛, 我们可以用它限制区间的最大长度:> realroot(%%,1/1000);⎡⎣⎢⎢⎤⎦⎥⎥,,⎡⎣⎢⎢⎤⎦⎥⎥,11951024299256⎡⎣⎢⎢⎤⎦⎥⎥,331310241657512⎡⎣⎢⎢⎤⎦⎥⎥,-633512-12651024 求解方程或方程组的整数解时使用函数isolve , 它常常被用来求解不定方程. 例如著名的“百钱买百鸡”问题♣的求解过程为:> isolve({x+y+z=100,5*x+3*y+z/3=100});{},, = z + 753_Z1 = x 4_Z1 = y - 257_Z1据此可得满足该问题的三组解为:{x, y, z}={4, 18, 78}, {x, y, z}={8, 11, 81}, {x, y, z}={12, 4, 84}1.2.2 整数环中的方程(组)求解利用Maple 中的函数msolve(eqns, vars, n), 可以在模n 的整数环中求解方程(组)eqns.例:在Z 7中求解Pell 方程2837-=x y> msolve(y^7=x^3-28,7); {}, = x 3 = y 6{}, = x 4 = y 1{}, = y 0 = x 0{}, = x 1 = y 1{}, = y 6 = x 6,,,,,{}, = x 2 = y 1{}, = y 6 = x 5, 再如下例:> msolve(y^4=x^3+32,5);,,,,{}, = x 2 = y 0{}, = x 4 = y 1{}, = x 4 = y 2{}, = x 4 = y 3{}, = x 4 = y 41.2.3 递归方程的求解在Maple 中, 可以求解有限差分方程(也称递归方程), 所需调用的函数是rsolve , 该函数使用的是一些比较通用的方法, 例如产生函数法、z 变换法以及一些基于变量替换和特征方程的方法. 作为例子, 求解Fibonacci 多项式:> eq:=f(n)=f(n-1)+2*f(n-2);:= eq = ()f n + ()f - n 12()f - n 2> rsolve({eq,f(0)=1,f(1)=1},f(n)); + 1()-1n 22n 当然, 并不是所有的递归形式的函数方程的解可以写成解析形式, 如果不能, Maple 将保留原来的调用形式. 此时, 可用asympt 函数获得它的渐进表达式, 也就是1/n 的级数解. 例如, 对于一个具有超越形式的递归函数方程, 仍然可以得到解的渐进形式:♣ 百钱买百鸡问题:用100元钱买100只鸡, 大公鸡5元钱1只, 大母鸡3元钱1只, 小鸡1元钱3只, 问如何买法?> rsolve(u(n+1)=ln(u(n)+1),u(n));()rsolve , = ()u + n 1()ln + ()u n 1()u n> asympt(%,n,5);+ + + 21 + _C 2()ln n n 2 - + - + 11_C 1_C 2⎛⎝ ⎫⎭⎪⎪- + 2_C 2()ln n 2()ln n 2n 3⎛⎝ ⎫⎭⎪⎪O 1n 41.2.4 不等式(组)求解求解一元不等式方程(组)使用命令solve :> solve((x-1)*(x-2)*(x-3)<0,x);,()RealRange ,-∞()Open 1()RealRange ,()Open 2()Open 3> solve((x-1+a)*(x-2+a)*(x-3+a) < 0, {x});,{} < x - 1a {}, < - 2a x < x - 3a> solve(exp(x)>x+1);,()RealRange ,-∞()Open 0()RealRange ,()Open 0∞> solve({x^2*y^2=0,x-y=1,x<>0});,{}, = y 0 = x 1{}, = y 0 = x 1对于由不等式方程组约束的最优问题的求解使用“线性规则”工具包simplex : > with(simplex):> cnsts:={3*x+4*y-3*z<=23, 5*x-4*y-3*z<=10,7*x+4*y+11*z<=30};:= cnsts {},, ≤ + - 3x 4y 3z 23 ≤ - - 5x 4y 3z 10 ≤ + + 7x 4y 11z 30 > obj:=-x+y+2*z;:= obj - + + x y 2z> maximize(obj,cnsts union {x>=0,y>=0,z>=0});{},, = z 12 = y 498= x 0 2 常微分方程求解微分方程求解是数学研究与应用的一个重点和难点. Maple 能够显式或隐式地解析地求解许多微分方程求解. 在常微分方程求解器dsolve 中使用了一些传统的技术例如laplace 变换和积分因子法等, 函数pdesolve 则使用诸如特征根法等经典方法求解偏微分方程. 此外, Maple 还提供了可作摄动解的所有工具, 例如Poincare-Lindstedt 法和高阶多重尺度法.帮助处理常微分方程(组)的各类函数存于Detools 软件包中, 函数种类主要有:可视化类的函数, 处理宠加莱动态系统的函数, 调整微分方程的函数, 处理积分因子、李对称法和常微分方程分类的函数, 微分算子的函数, 利用可积性与微分消去的方法简化微分方程的函数, 以及构造封闭解的函数等. 更重要的是其提供的强大的图形绘制命令Deplot 能够帮助我们解决一些较为复杂的问题.2.1 常微分方程的解析解求解常微分方程最简单的方法是利用求解函数dsolve . 命令格式为:dsolve(ODE);dsolve(ODE, y(x), extra_args);dsolve({ODE, ICs}, y(x), extra_args);dsolve({sysODE, ICs}, {funcs}, extra_args);其中, ODE —常微分方程, y(x)—单变量的任意变量函数, Ics —初始条件, {sysODE}—ODE 方程组的集合, {funcs}—变量函数的集合, extra_args —依赖于要求解的问题类型.例如, 对于一阶常微分方程y xy y y x -=')ln(可用dsolve 直接求得解析解: > ODE:=x*diff(y(x),x)=y(x)*ln(x*y(x))-y(x);:= ODE = x ⎛⎝ ⎫⎭⎪⎪∂∂x ()y x - ()y x ()ln x ()y x ()y x > dsolve(ODE,y(x));= ()y x e ⎛⎝ ⎫⎭⎪⎪x _C1x可以看出, dsolve 的第一个参数是待求的微分方程, 第二个参数是未知函数. 需要注意的是, 无论在方程中还是作为第二个参数, 未知函数必须用函数的形式给出(即:必须加括号, 并在其中明确自变量), 这一规定是必须的, 否则Maple 将无法区分方程中的函数、自变量和参变量, 这一点和我们平时的书写习惯不一致. 为了使其与我们的习惯一致, 可用alias 将函数用别称表示:> alias(y=y(x));> ODE:=x*diff(y,x)=y*ln(x*y)-y;:= ODE = x ⎛⎝ ⎫⎭⎪⎪∂∂x y - y ()ln x y y > dsolve(ODE,y);= y e⎛⎝ ⎫⎭⎪⎪x x函数dsolve 给出的是微分方程的通解, 其中的任意常数是用下划线起始的内部变量表示的.在Maple 中, 微分方程的解是很容易验证的, 只需要将解代入到原方程并化简就可以了.> subs(%,ODE);= x ⎛⎝⎫⎭⎪⎪⎪⎪∂∂x e ⎛⎝ ⎫⎭⎪⎪x x - e ⎛⎝ ⎫⎭⎪⎪x ⎛⎝ ⎫⎭⎪⎪ln e ⎛⎝ ⎫⎭⎪⎪x x e ⎛⎝ ⎫⎭⎪⎪xx > assume(x,real): assume(_C1,real):> simplify(%); = -e ⎛⎝ ⎫⎭⎪⎪x~()- + x~_C1~x~_C1~-e ⎛⎝ ⎫⎭⎪⎪x~()- + x~_C1~x~_C1~> evalb(%); true evalb 函数的目的是对一个包含关系型运算符的表达式使用三值逻辑系统求值, 返回的值是true, false 和FAIL. 如果无法求值, 则返回一个未求值的表达式. 通常包含关系型运算符“=, <>, <, <=, >, >=”的表达式在Maple 中看作是代数方程或者不等式. 然而, 作为参数传递给evalb 或者出现在if 或while 语句的逻辑表达式中时, 它们会被求值为true 或false. 值得注意的是, evalb 不化简表达式, 因此在使用evalb 之前应将表达式化简, 否则可能会出错. 再看下面常微分方程的求解:12+='y y> alias(y=y(x)):> ODE:=diff(y,x)=sqrt(y^2+1);:= ODE = ∂∂xy + y 21 > dsolve(ODE,y);= y ()sinh + x _C1函数dsolve 对于求解含有未知参变量的常微分方程也完全可以胜任:> alias(y=y(x)):> ODE:=diff(y,x)=-y/sqrt(a^2-y^2);:= ODE = ∂∂xy -y - a 2y 2> sol:=dsolve(ODE,y); := sol = + - + x - a 2y 2a 2⎛⎝ ⎫⎭⎪⎪ln + 2a 22a 2- a 2y 2y a 2_C10由此可见, 对于不能表示成显式结果的微分方程解, Maple 尽可能将结果表示成隐式解. 另外, 对于平凡解y=0常常忽略, 这一点应该引起注意.dsolve 对于求解微分方程初值问题也十分方便的:> ODE:=diff(u(t),t$2)+omega^2*u(t)=0;:= ODE = + ⎛⎝ ⎫⎭⎪⎪∂∂2t 2()u t ω2()u t 0 > dsolve({ODE,u(0)=u0,D(u)(0)=v0},u(t)); =()u t + v0()sin ωt u0()cos ωt 2.2 利用积分变换求解微分方程 对于特殊的微分方程, 我们还可以指定dsolve 利用积分变换方法求解, 只需要在dsolve 中加入可选参数method=transform 即可. 其中transform 是积分变换, 可以是laplace 、fourier 、fouriercos 或者fouriersin 变换.作为例子, 我们来看一个具有阻尼的振子在阶跃冲击(Heaviside 函数)下的响应: > ODE:=diff(u(t),t$2)+2*d*omega*diff(u(t),t)+omega^2*u(t)=Heaviside(t);:= ODE = + + ⎛⎝ ⎫⎭⎪⎪∂∂2t 2()u t 2d ω⎛⎝ ⎫⎭⎪⎪∂∂t ()u t ω2()u t ()Heaviside t > initvals:=(u(0)=u[0],D(u)(0)=v[0]);:= initvals , = ()u 0u 0 = ()()D u 0v 0> solution:=dsolve({ODE,initvals},u(t),method=laplace);:= solution = ()u t + 1ωe ()-t d ω⎛⎝ ⎫⎭⎪⎪⎪ + () - ω2u 01()cosh t - d 2ω2ω2ω() + - ωv 0d ω2u 0d ()sinh t - d 2ω2ω2 - d 2ω2ω2ωMaple 给出了问题的通解, 但没有区分自由振动(d=0)、欠阻尼(0<d<1)、临界阻尼(d=1)和过阻尼(d>1)的情况. 下面加以区分求解:> assume(omega>0):> simplify(subs(d=0,solution));= ()u t + - + 1()cos t ωω2u 0()cos t ωv 0()sin t ωωω2> K:=subs(d=1/5,u[0]=1,v[0]=1,solution);:= K = ()u t + 1ωe ()-/15t ω⎛⎝ ⎫⎭⎪⎪⎪⎪⎪⎪⎪ + () - ω21⎛⎝ ⎫⎭⎪⎪cosh t -2425ω2ω⎛⎝ ⎫⎭⎪⎪ + - ω15ω215⎛⎝ ⎫⎭⎪⎪sinh t -2425ω2-2425ω2ω> with(plots):> plot3d(rhs(%%),omega=2/3..4/3,t=0..20,style=hidden,orientation=[-30,45],axes=framed);对于d=1的情况, 可可用下式获得结果:> limit(rhs(solution),d=1);() + - + - + ω2u 0ω2v 0t 1ω3u 0t t ωe()t ωe ()-t ωω2再如下例:> diff(u(t),t$2)+3*diff(u(t),t)+2*u(t)=exp(-abs(t));= + + ⎛⎝ ⎫⎭⎪⎪∂∂2t 2()u t 3⎛⎝ ⎫⎭⎪⎪∂∂t ()u t 2()u t e ()-t > dsolve(%,u(t),method=fourier);= ()u t + + - 2e ()-2t ()Heaviside t 1e t ()Heaviside -t e ()-t t ()Heaviside t 1e ()-t ()Heaviside t2.3 常微分方程组的求解函数dsolve 不仅可以用来求解单个常微分方程, 也可以求解联立的常微分方程组. 特别是对于线性微分方程组, 由于数学上具有成熟的理论, Maple 的求解也是得心应手. 其命令格式为:dsolve( {eqn1, eqn2, …, ini_conds}, {vars});其中, ini_conds 是初始条件.> eqn1:={diff(x(t),t)=x(t)+y(t),diff(y(t),t)=y(t)-x(t)};:= eqn1{}, = ∂∂t ()x t + ()x t ()y t = ∂∂t()y t - ()y t ()x t > dsolve(eqn1,{x(t),y(t)}); {}, = ()x t e t () + _C1()sin t _C2()cos t = ()y t e t () - _C1()cos t _C2()sin t > eqn2:=2*diff(x(t),t$2)+2*x(t)+y(t)=2*t;:= eqn2 = + + 2⎛⎝ ⎫⎭⎪⎪∂∂2t 2()x t 2()x t ()y t 2t > eqn3:=diff(y(t),t$2)+2*x(t)+y(t)=t^2+1;:= eqn3 = + + ⎛⎝ ⎫⎭⎪⎪∂∂2t 2()y t 2()x t ()y t + t 21 > dsolve({eqn2, qn3, x(0)=0, D(x)(0)=1, y(0)=0, D(y)(0)=0}, {x(t),y(t)} );= ()x t + - + 18()sin 2t 2112t 3148t 434t ,{ = ()y t - + - + 1()sin 2t 21t 1t 21t 31t 4}2.4 常微分方程的级数解法1) 泰勒级数解法当一个常微分方程的解析解难以求得时, 可以用Maple 求得方程解的级数近似, 这在大多数情况下是一种非常好的方法. 级数解法是一种半解析半数值的方法. 泰勒级数法的使用命令为:dsolve({ODE,Ics}, y(x), 'series'); 或dsolve({ODE,Ics}, y(x), 'type=series');下面求解物理摆的大幅振动方程:θθsin g l -=, 其中l 是摆长, θ是摆角, g 是重力加速度.> ODE:=l*diff(theta(t),t$2)=-g*sin(theta(t));:= ODE = l ⎛⎝ ⎫⎭⎪⎪∂∂2t 2()θt -g ()sin ()θt > initvals:=theta(0)=0,D(theta)(0)=v[0]/l;:= initvals , = ()θ00 =()()D θ0v 0l> sol:=dsolve({ODE,initvals},theta(t),type=series);:= sol = ()θt - + + v 0l t 16g v 0l 2t 31120g v 0() + v 02g l l4t 5()O t 6 > Order:=11:> sol:=dsolve({ODE,initvals},theta(t),type=series);:= sol =()θt -+ - + + v 0l t 16g v 0l 2t 31120g v 0() + v 02g l l 4t 515040g v 0() + + 11g l v 02g 2l 2v 04l 6t 71362880g v 0() + + + 57g v 04l 102g 2v 02l 2g 3l 3v 06l 8t 9()O t 112) 幂级数解法对于一个符号代数系统来说, 幂级数是必不可少的微分方程求解工具. 幂级数求解函数powsolve 存于工具包powseries 中. 但是, 这一求解函数的使用范围很有限, 它只可以用来求解多项式系数的线性常微分方程或方程组,其求解命令为:powseries[function] (prep)或直接载入软件包后用function(prep), prep 为求解的线性微分方程及其初值.例:求解:042=+''+'y x y y x> ODE:=x*diff(y(x),x$2)+diff(y(x),x)+4*x^2*y(x)=0;:= ODE = + + x ⎛⎝ ⎫⎭⎪⎪∂∂2x 2()y x ⎛⎝ ⎫⎭⎪⎪∂()y x 4x 2()y x 0 > dsolve(ODE,y(x));= ()y x + _C1⎛⎝ ⎫⎭⎪⎪BesselJ ,04x ()/32_C2⎛⎝ ⎫⎭⎪⎪BesselY ,04x ()/32> initvals:=y(0)=y0,D(y)(0)=0;:= initvals , = ()y 0y0 = ()()D y 00> with(powseries):> sol:=powsolve({ODE,initvals});:= sol proc () ... end proc powparm> tpsform(sol,x,16);- + - + - + y049y0x 3481y0x 6166561y0x 9459049y0x 121613286025y0x 15()O x 16也可以用powsolve 给出的函数直接获得用递归形式定义的幂级数系数, 不过参数必须用_k , 这是powsolve 使用的临时变量. > sol(_k);-4()a - _k 3_k2例:求解一维谐振子的解:0)(2=-+''y x y ε > alias(y=y(x)):> ODE:=diff(y,x$2)+(epsilon-x^2)*y=0;:= ODE = + ⎛⎝ ⎫⎭⎪⎪∂∂2x 2y () - εx 2y 0 > H:=powsolve(ODE);:= H proc () ... end proc powparm> tpsform(H,x,8);C0C1x 1εC0x 21εC1x 3⎛⎝ ⎫⎭⎪⎪ + 1ε2C01C0x 4⎛⎝ ⎫⎭⎪⎪ + 1ε2C11C1x 5⎛⎝ ⎫⎭⎪⎪- - 1ε⎛⎝ ⎫⎭⎪⎪ + 1ε2C01C01εC0 + - - + + + x 6⎛⎝ ⎫⎭⎪⎪- - 1ε⎛⎝ ⎫⎭⎪⎪ + 1ε2C11C11εC1x 7()O x 8 + + > H(_k);-- ε()a - _k 2()a - _k 4_k ()- _k 12.5 常微分方程的数值解法在对微分方程的解析解失效后, 可以求助于数值方法求解微分方程. 数值求解的好处是只要微分方程的条件足够多时一般都可求得结果, 然而所得结果是否正确则必须依赖相关数学基础加以判断. 调用函数dsolve 求常微分方程初值问题的数值解时需加入参数type=numeric .另一方面, 常微分方程初值问题数值求解还可以选择算法, 加入参数“method=方法参数”即可, 方法参数主要有:rkf45:4~5阶变步长Runge-Kutta-Fehlberg 法 dverk78:7~8阶变步长Runge-Kutta-Fehlberg 法classical :经典方法, 包括向前欧拉法, 改进欧拉法, 2、3、4阶龙格库塔法,Sdams-Bashford 方法等 gear :吉尔单步法 mgear :吉尔多步法 2.5.1变步长龙格库塔法下面用4~5阶Runge-Kutta-Fehlberg 法求解van der Pol 方程:⎩⎨⎧-='==+'--''1.0)0(,0)0(0)1(2y y y y y y > ODE:=diff(y(t),t$2)-(1-y(t)^2)*diff(y(t),t)+y(t)=0;:= ODE = - + ⎛⎝ ⎫⎭⎪⎪∂∂2t()y t () - 1()y t 2⎛⎝ ⎫⎭⎪⎪∂()y t ()y t 0> initvals:=y(0)=0,D(y)(0)=-0.1;:= initvals , = ()y 00 = ()()D y 0-.1> F:=dsolve({ODE,initvals},y(t),type=numeric);:= F proc () ... end proc rkf45_x此时, 函数返回的是一个函数, 可以在给定的数值点上对它求值:> F(0);⎡⎣⎢⎢⎤⎦⎥⎥,, = t 0. = ()y t 0. = ∂()y t -.1 > F(1);⎡⎣⎢⎢⎤⎦⎥⎥,, = t 1. = ()y t -.144768589749425608 = ∂()y t -.178104066128215944 可以看到, F 给出的是一个包括t 、y(t)、D(y)(t)在内的有序表, 它对于每一个时间点可以给出一组数值表达式. 有序表的每一项是一个等式, 可对其作图描述. > plot('rhs(F(t)[2])', t=0..15, title="solution of the Van de Pol's Equation");> plots[odeplot](F,[t,y(t)],0..15,title="solution of the Van de Pol's Equation");2.5.2吉尔法求解刚性方程在科学和工程计算中, 常常会遇到这样一类常微分方程问题, 它可以表示成方程组:00)(),,(y t y y t f y ==', 称其为刚性方程, 其解的分量数量相差很大, 分量的变化速度也相差很大. 如果用常规方法求解, 为了使变量有足够高的精度, 必须取很小的步长, 而为了使慢变分量达到近似的稳态解, 则需要很长的时间, 这样用小步长大时间跨度的计算, 必定造成庞大的计算量, 而且会使误差不断积累. 吉尔法是专门用来求解刚性方程的一种数值方法.> ODE:=diff(u(t),t)=-2000*u(t)+999.75*v(t)+1000.25,diff(v(t),t)=u(t)-v(t);:= ODE , = ∂∂t ()u t - + + 2000()u t 999.75()v t 1000.25 = ∂∂t()v t - ()u t ()v t> initvals:=u(0)=0,v(0)=-2;:= initvals , = ()u 00 = ()v 0-2> ansl:=dsolve({ODE,initvals},{u(t),v(t)},type=numeric,method=gear);:= ansl proc () ... end proc x_gear> ansl(10,0);[],, = t 10. = ()u t .989893921726687442 = ()v t .979787842765888594> p1:=plots[odeplot] (ansl,[t,u(t)],0..20,color=red):p2:=plots[odeplot] (ansl,[t,v(t)],0..20,color=blue):plots[display] ({p1,p2}, title="Solution of a stiff equation");2.5.3 经典数值方法Maple中常微分方程数值解法中有一类被称作是“经典”(classical)方法. 当然, 称其为经典方法不是因为它们常用或是精度高, 而是因为它们的形式简单, 经常被用于计算方法课上的教学内容. 它们是一些常见的固定步长方法, 在dsolve中用参数method=classical[方法名称], 如果不特别指出, 将默认采用向前欧拉法. 主要有:foreuler:向前欧拉法(默认)hunform:Heun公式法(梯形方法, 改进欧拉法)imply:改进多项式法rk2:二阶龙格库塔法rk3:三阶龙格库塔法rk4:四阶龙格库塔法adambash:Adams-Bashford方法(预测法)abmoulton:Adams-Bashford-Moulton方法(预测法)下面给出微分方程数值方法的参数表:另外, 还有一些特殊的附加参数:maxfun :整数类型, 用于最大的函数值数量, 默认值50000, 为负数时表示无限制 corrections :正整数类型, 指定每步修正值数量, 在abmoulton 中使用, 建议值≤4 stepsize :浮点数值, 指定步长 下面看一个简单的例子:> ODE:=diff(y(x),x)=y(x)-2*x/y(x);:= ODE = ∂∂x ()y x - ()y x 2x()y x> initvals:=y(0)=1;:= initvals = ()y 01> sol1:=dsolve({ODE,initvals},y(x),numeric,method=classical,stepsize=0.1,start=0);:= sol1proc () ... end proc x_classical而其解析解为:> sol2:=dsolve({diff(y(x),x)=y(x)-2*x/y(x), y(0)=1}, y(x));:= sol2 = ()y x + 2x 1将两者图形同时绘制在同一坐标系中比较, 可以发现, 在经过一段时间后, 欧拉法的数值结果会产生较大误差.> plot({rhs(sol2),'rhs(sol1(x)[2])'},x=0..2);求解微方程, 无论使用什么方法或者加入什么选项, 求解完成后必须利用相关数学知识进行逻辑判断, 绝对不对简单迷信Maple 给出的结果, 否则很有可能得到一个对于方程本身也许还看得过去, 但在数学或者物理意义上不合理的解.2.6摄动法求解常微分方程由于微分方程求解的复杂性, 一般微分方程常常不能求得精确解析解, 需要借助其它方法求得近似解或数值解, 或者两种方法兼而有之. 摄动法是重要的近似求解方法.摄动法又称小参数法, 它处理含小参数ε的系统, 一般当ε=0时可求得解x 0. 于是可把原系统的解展成ε的幂级数 +++=2210εεx x x x , 若这个级数当ε→0时一致收敛,则称正则摄动, 否则称奇异摄动. 摄动法的种类繁多, 最有代表性的是庞加莱—林斯泰特(Poicare-Lindstedt )法, 在此, 我们以该方法求解van der Pol 方程:0)1(2=+'--''y y y y ε当ε=0时该方程退化为数学单摆的常微分方程, 当ε=1时为3.5讨论的情况, 对任意ε, 该微分方程拥有一个渐进稳定的周期解, 称为极限环.由于van der Pol 方程中没有显式的时间依赖项, 不失一般性, 设初值为y(0)=0. 在庞加莱—林斯泰特法中, 时间通过变换拉伸:t ωτ=, 其中∑∞==0i ii εωω对于)(τy , van der Pol 方程变为:0)1(22=+'--''y y y y ωεωrestart:diff(y(t),t$2)-epsilon*(1-y(t)^2)*diff(y(t),t)+y(t)=0;= - + ⎛⎝ ⎫⎭⎪⎪∂∂2t 2()y t ε() - 1()y t 2⎛⎝ ⎫⎭⎪⎪∂∂t ()y t ()y t 0 > ODE:=DEtools[Dchangevar]({t=tau/omega,y(t)=y(tau)},%,t,tau);:= ODE = - + ω2⎛⎝ ⎫⎭⎪⎪∂∂2τ2()y τε() - 1()y τ2ω⎛⎝ ⎫⎭⎪⎪∂()y τ()y τ0> e_order:=6:> macro(e=epsilon,t=tau):> alias(seq(y[i]=eta[i](tau),i=0..e_order)): > e:=()->e:> for i from 0 to e_order do eta[i]:=t->eta[i](t) od:> omega:=1+sum('w[i]*e^i','i'=1..e_order);:= ω + + + + + + 1w 1εw 2ε2w 3ε3w 4ε4w 5ε5w 6ε6> y:=sum('eta[i]*e^i','i'=0..e_order);:= y + + + + + + η0η1εη2ε2η3ε3η4ε4η5ε5η6ε6> deqn:=simplify(collect(ODE,e),{e^(e_order+1)=0}):> for i from 0 to e_order do ode[i]:=coeff(lhs(deqn),e,i)=0 od:> ode[0];= + y 0⎛⎝ ⎫⎭⎪⎪∂∂2τ2y 00> ode[1];= - + + + ⎛⎝ ⎫⎭⎪⎪∂∂2τ2y 1⎛⎝ ⎫⎭⎪⎪∂y 0y 12w 1⎛⎝ ⎫⎭⎪⎪∂∂2τ2y 0⎛⎝⎫⎭⎪⎪∂y 0y 020 > ode[2];= + - + + + - + + + ⎛⎝ ⎫⎭⎪⎪∂y 0w 1y 022⎛⎝ ⎫⎭⎪⎪∂y 0y 0y 1⎛⎝ ⎫⎭⎪⎪∂y 1⎛⎝ ⎫⎭⎪⎪∂∂2τy 2y 2⎛⎝ ⎫⎭⎪⎪∂y 1y 02⎛⎝ ⎫⎭⎪⎪∂y 0w 12w 1⎛⎝ ⎫⎭⎪⎪∂∂2τy 12⎛⎝ ⎫⎭⎪⎪∂∂2τy 0w 2⎛⎝ ⎫⎭⎪⎪∂∂2τy 0w 12> dsolve({ode[0],eta[0](0)=0,D(eta[0])(0)=C[1]},eta[0](t));= y 0C 1()sin τ> eta[0]:=unapply(rhs(%),t);:= η0 → τC 1()sin τ> ode[1];= - + - + ⎛⎝ ⎫⎭⎪⎪∂∂2τ2y 1C 1()cos τy 12w 1C 1()sin τC 13()cos τ()sin τ20 > map(combine,ode[1],'trig');= - + - + - ⎛⎝ ⎫⎭⎪⎪∂∂2τ2y 1C 1()cos τy 12w 1C 1()sin τ14C 13()cos τ14C 13()cos 3τ0 > ode[1]:=map(collect,%,[sin(t),cos(t)]);:= ode 1 = - + + + - 2w 1C 1()sin τ⎛⎝ ⎫⎭⎪⎪- + C 114C 13()cos τ⎛⎝ ⎫⎭⎪⎪∂∂2τ2y 1y 114C 13()cos 3τ0 > dsolve({ode[1],eta[1](0)=0,D(eta[1])(0)=C[2]},eta[1](t),method=laplace);= y 1 + - ⎛⎝ ⎫⎭⎪⎪- + + 18C 1() - C 12() + C 12τw 1C 1C 2()sin τ⎛⎝ ⎫⎭⎪⎪ - 132C 13C 1τw 1()cos τ132C 13()cos 3τ > map(collect,%,[sin(t),cos(t),t]);= y 1 + - ⎛⎝ ⎫⎭⎪⎪- + + 1C 1() - C 12() + C 12τw 1C 1C 2()sin τ⎛⎝ ⎫⎭⎪⎪ - 1C 13C 1τw 1()cos τ1C 13()cos 3τ> solve({coeff(lhs(ode[1]),sin(t))=0,coeff(lhs(ode[1]),cos(t))=0});,,{}, = C 10 = w 1w 1{}, = C 12 = w 10{}, = C 1-2 = w 10> w[1]:=0:C[1]:=-2: > ode[1];= + + ⎛⎝ ⎫⎭⎪⎪∂∂2τ2y 1y 12()cos 3τ0 > dsolve({ode[1],eta[1](0)=0,D(eta[1])(0)=C[2]},eta[1](t),method=laplace);= y 1 - + 1()cos 3τ1()cos τC 2()sin τ> eta[1]:=unapply(rhs(%),tau);:= η1 → τ - + 1()cos 3τ1()cos τC 2()sin τ> map(combine,ode[2],'trig'):> ode[2]:=map(collect,%,[sin(t),sin(3*t),cos(t),cos(3*t)]);:= ode 2 = + + - + - + ⎛⎝ ⎫⎭⎪⎪ + 14w 2()sin τ5()sin 5τ⎛⎝ ⎫⎭⎪⎪∂∂2τ2y 23()sin 3τ2C 2()cos τ3C 2()cos 3τy 20> solve({coeff(lhs(ode[2]),sin(t))=0,coeff(lhs(ode[2]),cos(t))=0});{}, = C 20 = w 2-1> assign(%):> dsolve({ode[2],eta[2](0)=0,D(eta[2])(0)=C[3]},eta[2](t),method=laplace): > eta[2]:=unapply(rhs(%),t);:= η2 → τ-+ + 3()sin 3τ⎛⎝ ⎫⎭⎪⎪ + 29C 3()sin τ5()sin 5τ > for i from 0 to e_order domap(combine,ode[i],'trig'):ode[i]:=map(collect,%,[seq(sin((2*j+1)*t),j=0..i),seq(cos((2*j+1)*t),j=0..i)]): solve({coeff(lhs(ode[i]),sin(t))=0,coeff(lhs(ode[i]),cos(t))=0}): assign(%):dsolve({ode[i],eta[i](0)=0,D(eta[i])(0)=C[i+1]},eta[i](t),method=laplace): collect(%,[seq(sin((2*j+1)*t),j=0..i),seq(cos((2*j+1)*t),j=0..i)]): eta[i]:=unapply(rhs(%),t); od:> omega;- + + 1116ε2173072ε435884736ε6> y(t):> y:=unapply(simplify(y(t),{e^e_order=0}),t): > e:=1:y(t);1037927()sinτ1519()sinτ()cosτ681()sinτ()cosτ461()sinτ()cosτ813()sinτ()cosτ25257957()cosτ35533()cosτ11912187()cosτ7799991()cosτ- + - - + + + + -1212373 259200()cosτ511494128800()cosτ9- -> plot(y(t),t=0..15);在该问题的求解过程中, 前半部分我们按照交互式命令方式输入, 也就是把数学逻辑推理的过程“翻译”成Maple函数, 而在后半部分, 则采用程序设计方式书写了数学推导过程, 这是应用Maple解决实际问题的两种方式. 前一种方法只需了解Maple函数即可应用, 而后一种程序设计方式则需掌握Maple程序设计语言. 但是, 不论是那一种方式, 数学基础总是最重要的.3 偏微分方程求解初步Maple中偏微分方程求解器为pdsolve, 该函数及其它偏微分方程求解工具存于软件包PDEtools中. 函数pdsolve能够很快的辨认出偏微分方程是否为可以用标准方法求解的类型, 如果无法判别, 则pdsolve采用一种启发式的算法尝试偏微分方程按特征结构分离出来. pdsolve的策略就是寻找给定偏微分方程的通解, 如不能成功则寻找可以完全分离的变量, 因此, 该函数返回的结果可能为:(i) 通解;(ii) 近似的通解(即包含任意函数但又不足以得到通解的解);(iii) 变量分离的非耦合的常微分方程.如不能完全分离变量, 则函数再次调用自身, 如仍失败则返回未完全分离的变量并给出一个警告信息. 其命令格式为:pdsolve(PDE, f);其中, PDE为偏微分方程, f为被求解函数.下面通过几个例子说明pdsolve的用法:> PDE1:=diff(u(x,t),[t$2])-1/v^2*diff(u(x,t),[x$2]);:= PDE1 - ⎛⎝ ⎫⎭⎪⎪∂∂2t 2()u ,x t ∂∂2x 2()u ,x t v 2 > pdsolve(PDE1,u(x,t));= ()u ,x t + ()_F1- - t v x ()_F2 - t v x> restart:> PDE2:=a*x*diff(u(x,t),x)+b*t*diff(u(x,t),t)=0;:= PDE2 = + a x ⎛⎝ ⎫⎭⎪⎪∂∂x ()u ,x t b t ⎛⎝ ⎫⎭⎪⎪∂∂t ()u ,x t 0 > pdsolve(PDE2,u(x,t));= ()u ,x t ⎛⎝ ⎫⎭⎪⎪⎪⎪_F1t x ⎛⎝ ⎫⎭⎪⎪b a> PDE3:=diff(u(x,t),x$2)-t^2*diff(u(x,t),t$2)-t*diff(u(x,t),t)=0;:= PDE3 = - - ⎛⎝ ⎫⎭⎪⎪∂∂2x 2()u ,x t t 2⎛⎝ ⎫⎭⎪⎪∂∂2t 2()u ,x t t ⎛⎝ ⎫⎭⎪⎪∂∂t ()u ,x t 0 > pdsolve(PDE3,u(x,t));= ()u ,x t + ()_F1t e x ()_F2t e()-x> restart:> heatPDE:=diff(u(x,t),t)=diff(u(x,t),[x$2]);:= heatPDE = ∂()u ,x t ∂∂2x2()u ,x t> pdsolve(heatPDE,u(x,t));() = ()u ,x t ()_F1x ()_F2t &where ⎡⎣⎢⎢⎤⎦⎥⎥{}, = ∂∂2x 2()_F1x _c 1()_F1x = ∂∂t ()_F2t _c 1()_F2t > dsolve(diff(F2(t),t)=c[1]*F2(t),F2(t));= ()F2t _C1e()c 1t> dsolve(diff(F1(x),[x$2])=c[1]*F1(x));= ()F1x + _C1e()c 1x _C2e()-c 1x> result:=rhs(%)*rhs(%%);:= result () + _C1e ()c 1x _C2e()-c 1x _C1e()c 1t> subs(u(x,t)=result,heatPDE):expand(%);+_C12c 1e()c 1t e()c 1x _C1c 1e()c 1t _C2e()c 1x =+_C12c 1e()c 1t e ()c 1x _C1c 1e()c 1t _C2e()c 1x> lhs(%)-rhs(%);。
基于Maple系统的Riccati方程的自动求解
P it)删 除特解 及 重 复解 , 依特 定 的格 式输 出最 终 的行波 解 . r ( n 并 将 Dman制成 Ma l上 的 一个 共 享包 “ ma . , 过用 Dman 参 数 1 参数 2参 数 3 求解 非 线 i pe D i m”通 n i( , , )
性演化 方程 ( ) 组 .
解 , 且 自动生成 这 些行 波 解存 在 的条件 . 流程 基本 思路 为 : 并 其
Ii t l Rc 方程I 确定方程的阶数 I  ̄ 导出非线性方程组l I 调用模块求解I I 解集的最小化输出1 .
D i ma n由以下 六个 模 块构 成 :
D iO主模块 , ma n 完成一些初始化工作以及对其它几个子模块的调用 ; F l (根据 方程 中函数 的 自变量 产 生行 波变 量 , ds ) t 同时 将偏 微分 方 程 ( ) 化 为 常微 分方 程 ( ) 组 转 组 ;
f d r_ O通过平 衡 方程 组 中 各个 方 程 的 线 性最 高 阶 导 数项 和最 高 阶非 线 性 的 阶数 , 定 行 波解 i_ n n e 确
的阶数 ; cef 导 出行 波 解 系数所 满 足 的非线 性 代数 方程 组 ; ofO sl)简化 和 分组 非 线 性 代 数 方 程 组 , 用 吴 文俊 消 元 法 求 解 之 , 根 据 用 户 的 要 求 去 除所 有 的 o( 利 并
了非线性方程 ( 的求解过程的完全 自动化. 组) 利用计算机代数系统 Ma l来解决此类问题 , pe 既可利用计
算 机代 数系统 Ma l pe的成 熟 性 , 可 比较简 洁地 求 出 Rcti 程 的解 . 又 i t方 a 要 实现基 于 Ri ai c t方程 的 非线 性演 化 方程 ( ) c 组 精确行 波 解 的计 算 机 自动推 导 , 三个 关键 问题 需 有
Maple在非线性方程求解中的应用.kdh
Maple在非线性方程求解中的应用岳崇山1,景海斌2,张贺1(1.河北北方学院数学系,河北张家口075000;2.河北建筑工程学院数理系,河北张家口075000)摘要:介绍了数学软件Maple因式分解和解方程软件包FactorizationandSolvingEquations的部分函数,并利用Maple图形软件包Graphics的plot函数,通过具体的数学实验,给出了求解一般非线性代数方程的比较快速的方法.关键词:非线性方程;Maple;浮点数解中图分类号:O151.1文献标识码:A文章编号:1673-1972(2007)06-0005-04Maple是加拿大滑铁卢大学(UniversityofWaterloo)和WaterlooMapleSoftware公司注册的一套为微积分、线性代数、微分方程、概率统计等数学分支研制开发的数学分析型的数学软件,它的主要功能包括数学图形的描绘、数值计算和符号处理等方面.有不少文献对其进行了不同方面的论述,如文献[1],[2],[3].本文仅从解非线性方程方面,来探究Maple在数学研究和教学中的应用.求解一般的非线性方程(或非线性方程组),传统的方法是利用函数的一阶、二阶导数(或偏导数)的判断单调性、凹凸性的几何方法,以及利用牛顿迭代法为代表的数值方法[4],它们分别存在精确度差和计算繁琐的缺点.本文利用Maple的强大的绘图功能和计算能力,通过具体的例子,寻找求解非线性方程的一般方法.对于次数低于4的多项式方程,Maple提供的solve()函数一般能解出其精确解或解析解.例如要求方程x3+2x2-5x-6=0的解,就可以在Maple中输入以下命令:输入solve(x^3+2*x^2-5*x-6=0,{x}),显示{x=-1}{x=2}{x=-3}.而在数学上,5次方以上的多项式未必会有根式解,另外一些非线性方程也不一定有有理解,这些数学上的限制,使得solve()函数无法找到方程的解,例如要求方程x-x4!"4-cos(x5)=0的解,在Maple中输入以下命令solve(x-(x/4)^4-cos(x^5)=0,{x})时,Maple则显示出一个非常复杂的解析表达式,从中很难得到有益的结果,而函数fsolve()则可以找出这个非线性方程式的浮点数解(以下简称解).输入fsolve(x-(x/4)^4-cos(x^5)=0,{x}),显示{x=0.8744267217}.但是fsolve()函数每次只能找到方程的一个解,那么怎样尽可能找到方程的全部解呢?下面通过具体的例子,寻找一种求非线性方程解的方法.首先介绍一下将要用到的Maple中的函数.1本文用到的Maple中的函数solve(eqn,var),求解eqn中的未知数var;fsolve(eqn,var),求解eqn中的未知数var,并返回一个浮点数解;fsolve(eqn,var=x0),从var=x0来搜寻eqn的解,并返回一个浮点数解;plot(f(x),x=xmin…xmax),从xmin到xmax绘出f(x)的函数图.另外Maple用infinity表示无穷大.关于这几个函数更多的用法见文献[5].接下来,举几个例子.收稿日期:2007-05-27作者简介:岳崇山(1979-),男,河北崇礼人,助教,硕士研究生,主要从事微分几何、拓扑以及数学软件研究.第9卷第6期石家庄学院学报Vol.9,No.62007年11月JournalofShijiazhuangUniversityNov.20072例子例1求方程x212-6x=sin(x+8)的解.解将方程改写为x212-6x-sin(x+8)=0.设函数f1(x)=x212-6x-sin(x+8),输入f1∶=x->x^2/12-6*x-sin(x+8),再求(1)式的一个解.输入fsolve(f1(x)=0,{x}),显示{x=-0.1662486925},接着在不同的范围寻找(1)式的解.先在区间[-1,1]的范围内绘出函数f1(x)的图形:输入plot(f1(x),x=-1..1),显示如图1.如图1显示,(1)式确实有解为x=-0.1662486925.但是(1)式只有这一个解吗?试着将搜寻的范围扩大.输入plot(f1(x),x=-infinity…-0.17),显示如图2.如图2显示,(1)式在x<-0.17时是无解的.同样,观察0.5≤x≤100时,函数f1(x)的图形.输入plot(f1(x),x=0.5..100),显示如图3.(1)图1函数f1(x)在区间[-1,1]上的图像图2函数f1(x)在区间[-∞,-0.17]上的图像图3函数f1(x)在区间[0.5,100]上的图像图4函数f1(x)在区间[100,+∞)上的图像6420-1-0.50.51-2-4-6x石家庄学院学报2007年11月6岳崇山,景海斌,张贺:Maple在非线性方程求解中的应用如图3所示,(1)式在x=80附近还有一个解.输入fsolve(f1(x)=0,x=80),显示71.83908018.那么,当x>100时,(1)式还有其他解吗?输入plot(f1(x),x=100..infinity),显示如图4.如图4所示,当x>100时,(1)式没有其他解了.那么x1=-0.1662486925,x2=71.83908018是否一定是(1)式的解呢?这就需要进行验根.方法很简单,只要将上述数值代入函数f1(x),如果f1(xi)-0<ε,(i=1,2)则其即为(1)式的解,这里ε是一个足够小的正整数.为此:输入abs(f1(-0.1662486925)),abs(f1(71.83908018)),显示1,10-10,2.5,10-9.上面的数据表明,x1=-0.1662486925,x2=71.83908018确实为(1)式的解.那么,为什么不一次绘出函数f1(x)的全部图形来寻找方程的解呢?不妨做个试验.输入plot(f1(x),x=-infinity..infinity),显示如图5,这时Maple绘制的图形出现了失真现象.例2求方程sinh2(x)+cosh(x2)=6x-1的解.解首先,将方程改写为sinh2(x)+cosh(x2)-6x+1=0.设函数f2(x)=sinh2(x)+cosh(x2)-6x+1,输入f2∶=sinh(x)^2+cosh(x^2)-6*x+1∶,接着求(2)式的一个解.输入fsolve(f2(x)=0,{x}),显示{x=0.3568224931};其次,再在不同的范围寻找(1)式的解:输入plot(f2(x),x=-1..1),显示如图6.输入plot(f2(x),x=infinity..0.3),显示如图7;输入plot(f2(x),x=0.2..2),显示如图8;图5Maple绘制的(-∞,+∞)上函数f1(x)上的图像(2)图6函数f2(x)在区间[-1,1]上的图像图7函数f2(x)在区间[-∞,0.3]上的图像图8函数f2(x)在区间[0.2,2]上的图像图9函数f2(x)在区间[2,4]上的图像第6期7输入fsolve(f2(x)=0,x=1.4),显示1.412520994;输入plot(f2(x),x=2..4),显示如图9.如果继续扩大搜寻范围,Maple将提示数据溢出,如:输入plot(f2(x),x=2..130),显示Error,Floatingpointoverflow.Pleaseshortenaxes.这表明当x→∞时,函数f2(x)增长得非常快,与x轴没有交点.下面进行验根:输入abs(f2(0.3568224931)),abs(f2(1.412520994))显示0,1,10-10.上面的数据表明,x1=0.3568224931,x2=1.412520994确实为(2)式的解.例3求方程组1-x2+y2=02-x2-y2="0的解.解设变量f3(x,y)={1-x2+y2=0,2-x2-y2=0}.输入f3∶={1-x^2+y^2=0,2-x^2-y^2=0}∶,在(x,y)∈[-2,2]×[-2,2]的范围内寻求(3)式的解.输入plots[implicit](f3(x),x=-2..2,y=-2..2,scaling=CONSTRAINED)显示如图10.观察图10,有:输入fsolve(f3(x)=0,{x=-1,y=-0.7}),显示{x=-1.224744871,y=-0.7071067812};输入fsolve(f3(x)=0,{x=-1,y=0.7}),显示{y=0.7071067812,x=-1.224744871};输入fsolve(f3(x)=0,{x=-1,y=-0.7}),显示{y=-0.7071067812,x=1.224744871};输入fsolve(f3(x)=0,{x=-1,y=0.7}),显示{y=0.7071067812,x=1.224744871}.这样,就找到了(3)式的全部解,仿照例1与例2,也可以进行验根,这里从略.3结论通过上面的3个例子,可以找到解非线性方程(或非线性方程组)的一般方法,步骤如下:1)将方程化成f(x)=0(或f(x,y)=0)的形式,再将方程左边设为一个函数f(x);2)运行指令fsolve(f(x)=0,{x}),求出方程的一个解x=x0;3)用函数plot()在区间[x0-ε,x0+ε]内绘出函数f(x)的图形,观察函数图形与x轴的交点的横坐标,设为x1,x2,x3…;4)运行指令fsolve({f(x)=0},x=xi),求出方程f(x)=0的精确解x=xi,i=1,2,3…;5)利用3)和4)的结果改变x0及ε的值,重复步骤3)和步骤4),直到找到方程f(x)=0的全部的解;6)将解代入函数f(x)进行验根.(下转第36页)(3)图10方程组函数f3(x)在[-2,2]×[-2,2]上的图像石家庄学院学报2007年11月8(上接第8页)参考文献:[1]孙利霞.Maple在线性代数中的可视化教学[J].长春师范学院学报,2005,24(5):28-32.[2]王蕾,赵燕清,孙培安,等.Maple在级数和广义积分的应用[J].山东科学,2007,20(1):65-68.[3]程瑶,李扬,李世奇.基于Maple的原根及本原多项式的计算[J].重庆师范学院学报,2005,22(2):27-29.[4]同济大学应用数学系.高等数学(上册)(第五版)[M].北京:高等教育出版社,2002.[5]洪维恩.数学魔法师Maple6[M].北京:人民邮电出版社,2001.(责任编辑梁志星)ApplicationofMapleinSolvingNonlinearEquationYUEChong-shan1,JINGHai-bin2,ZHANGHe1(1.DepartmentofMathematics,HebeiNorthUniversity,Zhangjiakou,Hebei075000,China;2.DepartmentofMathematics&Physics,HeibeiInstituteofArchitecture&CivilEngineeringZhangjiakou,Hebei075000,China)Abstract:ThearticlepresentspartoffunctionsofFactorizationandSolvingEquationssoftwarepackageofMaple.ItprovidesarelativelyquicksolutiontoanordinarynonlinearalgebraicequationbyusingplotfunctionofGraphicspackageofthesofewareandmathematicalexperiments.Keywords:nonlinearequation;maple;floatingpointsolve参考文献:[1]丘淦才.HPLC测定土霉素片的含量[J].现代食品与药品杂志,2006,16(2):30-31.[2]WILLIAMWARMSTRON,etal.OxytetracyclineCompositions.US:4259331[J],1981-03-31.[3]WinfriedDornhofer,ErwinEmbrechts.InjectionSolutionforIntramuscularandSubcutaneousAdministrationtoAnimals.US:5753636[J],1998-03-19.[4]国家兽药典委员会.中华人民共和国兽药典(一部)[M].北京:化学工业出版社,2005.(责任编辑李健飞)StudyonthePreparativeProcessofLon-ActinOxytetracyclineInjectionLIJing,CHANGMing,CHANGYong-fang,MOUWei,RENLei(SchoolofChemicalEngineering,ShijiazhuangUniversity,Shijiazhuang,Hebei050035,China)Abstract:Inordertoobtaintheoptimumproductiontechniqueandtechnicalparameter,thepreparationofLon-ActinOxytetracyclineInjectionwasinvestigated.Intheexperiment,theaccountofFormaldehydeSodiumsul-foxylate,Polyvinylpolypyrrolidone,α-Pyrrolidone,andSodiumMetabisulfitewereselectedrespectively.ThecontentofoxytetracyclinwasdeterminedbyHPLC.ThepreparationofLon-ActinOxytetracyclineInjectionwasoptimizedbyorthoonalexperiment,anditsstabilizationwasprovedbyremainingsampleatroomtemperature.ItprovedthatLon-ActinOxytetracyclineInjectionisreliableandsuitableforindustrialmanufacture.Itsqualitycanbecontrolled.Keywords:Lon-ActinOxytetracycline;injection;productiontechnique!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!石家庄学院学报2007年11月36。
Maple基础教程(修订稿).
Maple 基础一Maple 的基本运算1 数值计算问题在应用Maple 做算术运算时, 只需将Maple 当作一个“计算器”使用, 所不同的是命令结束时需加“;”或“:”.在Maple 中, 主要的算术运算符有“+”(加)、“–”(减)、“*”(乘)、“/”(除)以及“^”(乘方或幂,或记为**),值得注意的是, “^”的表达式只能有两个操作数, 换言之, c b a ^^是错误的, 而“+”或“*”的任意表达式可以有两个或者两个以上的操作数.2.1.1 有理数运算作为一个符号代数系统, Maple 可以绝对避免算术运算的舍入误差.如果要求出两个整数运算的近似值时, 只需在任意一个整数后加“.”(或“.0”), 或者利用“evalf ”命令把表达式转换成浮点形式, 默认浮点数位是10 (即: Digits:=10, 据此可任意改变浮点数位, 如Digits:=20).> 123456789/987654321;13717421109739369> evalf(%); .1249999989> big_number:=3^(3^3);:= big_number 7625597484987> length(%);13函数“length ”作用在整数上时是整数的十进制位数即数字的长度. “%”是一个非常有用的简写形式, 表示最后一次执行结果1)整数的余(irem)/商(iquo)命令格式:irem(m,n); #求m 除以n 的余数irem(m,n,'q'); #求m 除以n 的余数, 并将商赋给qiquo(m,n); #求m 除以n 的商数iquo(m,n,'r'); #求m 除以n 的商数, 并将余数赋给r其中, m, n 是整数或整数函数, 也可以是代数值, 此时, irem 保留为未求值.2)素数判别(isprime)命令格式: isprime(n);如果判定n 可分解, 则返回false, 如果返回true, 则n “很可能”是素数. > isprime(2^(2^4)+1);true3) 确定第i 个素数(ithprime)若记第1个素数为2,判断第i 个素数的命令格式: ithprime(i);4) 一组数的最大值(max)/最小值(min)命令格式: max(x1,x2,…,xn); #求x 1,x 2,…,x n 中的最大值min(x1,x2,…,xn); #求x 1,x 2,…,x n 中的最小值5)随机数生成器(rand)命令格式:rand( ); #随机返回一个12位数字的非负整数rand(a..b); #调用rand(a..b)返回一个程序, 它在调用时生成一个在范围[a, b]内的随机数> rand();427419669081> myproc:=rand(1..2002):> myproc();1916> myproc();1204注意, rand(n)是rand(0..n-1)的简写形式.2.1.2 复数运算复数是Maple中的基本数据类型. 虚数单位i在Maple中用I表示可以用Re( )、Im( )、conjugate( )和argument( )等函数分别计算实数的实部、虚部、共轭复数和幅角主值等运算. 试作如下实验:> complex_number:=(1+2*I)*(3+4*I);-510Icomplex_number +:=> Re(%);Im(%%);conjugate(%%%);argument(complex_number);-510-510I-- +arctan2π()1) 绝对值函数命令格式: abs(expr);当expr为实数时,返回其绝对值,当expr为复数时,返回复数的模.2)复数的幅角函数命令格式: argument(x); #返回复数x的幅角的主值3)共轭复数命令格式: conjugate(x); #返回x的共轭复数2.2 初等数学2.2.1 常用函数1) 确定乘积和不确定乘积命令格式: product(f,k);product(f,k=m..n);product(f,k=alpha);product(f,k=expr);其中, f—任意表达式, k—乘积指数名称, m,n—整数或任意表达式, alpha—代数数RootOf, expr—包含k的任意表达式.> product(k^2,k=1..10); #计算2k关于1..10的连乘13168189440000> product(k^2,k); #计算2k的不确定乘积()Γk 2> product(a[k],k=0..5); #计算a i (i=0..5)的连乘a 0a 1a 2a 3a 4a 5> Product(n+k,k=0..m)=product(n+k,k=0..m); #计算(n+k)的连乘, 并写出其惰性表达式= ∏ = k 0m() + n k ()Γ + + n m 1()Γn> product(k,k=RootOf(x^3-2)); #计算23-x 的三个根的乘积22)指数函数计算指数函数exp 关于x 的表达式的命令格式为: exp(x);3)确定求和与不确定求和sum命令格式: sum(f,k);sum(f,k=m..n);sum(f,k=alpha);sum(f,k=expr);其中, f —任意表达式, k —乘积指数名称, m,n —整数或任意表达式, alpha —代数数RootOf,expr —不含k 的表达式.> Sum(k^2,k=1..n)=sum(k^2,k=1..n);= ∑ = k 1nk 2 - + + 13() + n 1312() + n 1216n 16> Sum(1/k!,k=0..infinity)=sum(1/k!,k=0..infinity);= ∑ = k 0∞1!k e> sum(a[k]*x[k],k=0..n);∑ = k 0n a k xk> sum(k/(k+1),k=RootOf(x^2-3));33)三角函数/双曲函数命令格式: sin(x); cos(x); tan(x); cot(x); sec(x); csc(x);sinh(x); cosh(x); tanh(x); coth(x); sech(x); csch(x);其中, x 为任意表达式.> Sin(Pi)=sin(Pi);= ()Sin π04)反三角函数/反双曲函数命令格式: arcsin(x); arccos(x); arctan(x); arccot(x); arcsec(x); arccsc(x);arcsinh(x); arccosh(x); arctanh(x); arccoth(x); arcsech(x); arccsch(x);arctan(y,x);其中, x, y 为表达式. 反三角函数/反双曲函数的参数必须按弧度计算.> arcsinh(1);()ln + 12> cos(arcsin(x));- 1x 25)对数函数命令格式: ln(x); #自然对数log[a](x); #一般对数log10(x); #常用对数一般地, 在ln(x)中要求x>0. 但对于复数型表达式x, 有:)(argument *))(abs ln()ln(x I x x += (其中, ππ≤<-)(argument x )> log10(1000000);()ln 1000000()ln 10 > simplify(%); #化简上式62.2.2 函数的定义试看下面一个例子:> f(x):=a*x^2+b*x+c;---并不是函数,而是一个表达式:= ()f x + + a x 2b x c> f(x),f(0),f(1/a);,, + + a x 2b x c ()f 0⎛⎝ ⎫⎭⎪⎪f 1a 由上述结果可以看出, 用赋值方法定义的f(x)是一个表达式而不是一个函数在Maple 中, 要真正完成一个函数的定义, 需要用算子(也称箭头操作符):> f:=x->a*x^2+b*x+c;:= f → x + + a x 2b x c> f(x),f(0),f(1/a);,,+ + a x 2b x c c + + 1a b ac > f:=(x,y)->x^2+y^2; := f → (),x y + x 2y 2> f(1,2);5> f:=(x,y)->a*x*y*exp(x^2+y^2);:= f → (),x y a x y e() + x 2y 2另一个定义函数的命令是unapply,其作用是从一个表达式建立一个算子或函数.命令格式为: f:=unapply(expr, x);命令格式为: f:=unapply(expr, x, y, …);> f:=unapply(x^4+x^3+x^2+x+1,x);:= f → x + + + + x 4x 3x 2x 1借助函数piecewise 可以生成简单分段函数:> abs(x)=piecewise(x>0,x,x=0,0,x<0,-x); = x ⎧⎩⎪⎪⎪⎪⎪⎨x < 0x 0 = x 0-x < x 0清除函数的定义用命令unassign.> unassign(f);> f(1,1); ()f ,11定义了一个函数后, 就可以使用op 或nops 指令查看有关函数中操作数的信息. nops(expr), 函数op 的主要功能是,其命令格式为:op(expr); #获取表达式的操作数op(i, expr); #取出expr 里第i 个操作数,op(i .. j, expr); #expr 的第i 到第j 个操作数nops(expr); #返回操作数的个数> expr:=6+cos(x)+sin(x)*cos(x)^2;:= expr + + 6()cos x ()sin x ()cos x 2> op(expr);,,6()cos x ()sin x ()cos x 2> nops(expr);32.2.3 Maple 中的常量与变量名为了解决数学问题, 一些常用的数学常数是必要的. Maple 系统中已经存储了一些数学常数在表达式序列constants 中:> constants;,,,,,,false γ∞true Catalan FAIL π为了方便使用, 现将上述常数的具体含义列示如下:2.2.4 函数类型转换实现函数类型转换的命令是convert . 命令格式:convert(expr, form); #把数学式expr 转换成form 的形式convert(expr, form, x); #指定变量x, 此时form 只适于exp 、sin 、cosconvert 指令所提供的三角函数、指数与函数的转换共有exp 等7种:(1) exp : 将三角函数转换成指数(2) expln : 把数学式转换成指数与对数(3) expsincos : 分别把三角函数与双曲函数转换成sin 、cos 与指数的形式(4) ln : 将反三角函数转换成对数(5) sincos : 将三角函数转换成sin 与cos 的形式, 而把双曲函数转换成sinh 与cosh 的形式(6) tan : 将三角函数转换成tan 的形式(7) trig : 将指数函数转换成三角函数与对数函数> convert(sinh(x),exp); #将sinh(x)转换成exp 类型 - 12e x 121ex 2.2.5 函数的映射—map 指令在符号运算的世界里, 映射指令map 可以说是相当重要的一个指令, 它可以把函数或指令映射到这些结构里的元素, 而不破坏整个结构的完整性. 命令格式为:map(f, expr); #将函数f 映射到expr 的每个操作数map(f, expr, a); #将函数f 映射到expr 的每个操作数, 并取出a 为f 的第2个自变量map(f, expr, a1, a2,…, an); #将函数f 映射到expr 的每个操作数, 并取a1~an 为f 的第2~n+1个自变量map2(f, a1, expr, a2, …, an); #以a1为第1个自变量, expr 的操作数为第2个自变量, a2为第3个自变量…, an 为第n+1个自变量来映射函数f> f:=x->sqrt(x)+x^2;:= f → x + x x 2> map(f,[a,b,c]); [],, + a a 2 + b b 2 + c c 2> map(h, [a,b,c],x,y);[],,()h ,,a x y ()h ,,b x y ()h ,,c x y3 求 值3.1 赋值在Maple 中, 不需要申明变量的类型, 甚至在使用变量前不需要将它赋值, 这是Maple 与其它高级程序设计语言不同的一点, 也正是Maple 符号演算的魅力所在, 这个特性是由Maple 与众不同的赋值方法决定的. 为了理解其赋值机制, 先看下面的例子.> p:=9*x^3-37*x^2+47*x-19;:= p - + - 9x 337x 247x 19> roots(p);⎡⎣⎢⎢⎤⎦⎥⎥,[],12⎡⎣⎢⎢⎤⎦⎥⎥,1991> subs(x=19/9,p);3.2 变量代换subs ( var = repacedment , expression );调用的结果是将表达式expression 中所有变量var 出现的地方替换成 replacement.> f:=x^2+exp(x^3)-8;:= f + - x 2e()x 38> subs(x=1,f); - + 7e如果需要计算, 必须调用求值函数evalf . 如:> evalf(%);5.> subs(x=y,y=z,x^2*y); (顺序替换)z 3> subs({x=y,y=z},x^2*y); (同步替换)y 2z> subs((a=b,b=c,c=a),a+2*b+3*c); (顺序替换)6a> subs({a=b,b=c,c=a},a+2*b+3*c); (轮 换)+ + b 2c 3a> subs({p=q,q=p},f(p,q)); (互 换)()f ,q p3.3 求值规则1) 对表达式求值命令格式: eval(e, x=a); #求表达式e 在x=a 处的值eval(e, eqns); #对方程或方程组eqns 求值eval(e); #表达式e 求值到上面两层eval(x,n); #给出求值名称的第n 层求值> p:=x^5+x^4+x^3+x^2+x+73;:= p + + + + + x 5x 4x 3x 2x 73> eval(p,x=7);19680当表达式在异常点处求值时, eval 会给一个错误消息. 如下:> eval(sin(x)/x,x=0);Error, numeric exception: division by zero2) 在代数数(或者函数)域求值命令格式: evala(expr); # 对表达式或者未求值函数求值evala(expr,opts); #求值时可加选项(opts)在Maple 中, 代数数用函数RootOf ()来表示. 如3作为一个代数数, 可以表示为:> alpha:=RootOf(x^2-3,x);:= α()RootOf - _Z 23> simplify(alpha^2);3在Maple 内部, 代数数α不再表示为根式, 而在化简时, 仅仅利用到32=α这样的事实. 这里, Maple 用到一个内部变量_Z. 再看下面一个例子,其中alias 是缩写的定义函数,而参数lenstra 指lenstra 椭圆曲线方法:> alias(alpha=RootOf(x^2-2)):> evala(factor(x^2-2,alpha),lenstra); () + x α() - x α> evala(quo(x^2-x+3,x-alpha,x,'r'));- + + 1αx> r;- + 3αα2> simplify(%);- 5α3) 在复数域上符号求值操纵复数型表达式并将其分离给出expr 的实部和虚部的函数为evalc, 命令格式为:evalc(expr);evalc 假定所有变量表示数值, 且实数变量的函数是实数类型. 其输出规范形式为: expr1+I*expr2. > evalc(sin(6+8*I));+ ()sin 6()cosh 8I ()cos 6()sinh 8> evalc(f(exp(alpha+x*I)));()f + e α()cos x I e α()sin x4) 使用浮点算法求值命令格式为: evalf(expr, n);> evalf(Pi,50);3.1415926535897932384626433832795028841971693993751> evalf(sin(3+4*I)); - 3.853********.01681326I5) 对惰性函数求值把只用表达式表示而暂不求值的函数称为惰性函数,对任意代数表达式f 求值的命令格式为: value(f); > F:=Int(exp(x),x);:= F d ⎛⎠⎜e x x > value(%);e x> f:=Limit(sin(x)/x,x=0);:= f lim→ x 0()sin x x> value(%); 1另外, 将惰性函数的大写字母改为小写字母亦即可求值. 如下例:> Limit(sin(x)/x,x=0)=limit(sin(x)/x,x=0);= lim → x 0()sin x x1 4 数据结构Maple 中有许多内建的与FORTRAN 、C 或Pascal 不同的数据结构. 主要的数据结构有序列(sequence)、列表(list)、集合(set)、代数数( algebraic number)、未求值或惰性函数调用、表(table)、级数(series)、串(string)、索引名(index)、关系(relation)、过程体(process)以及整数(integer)、分数(fraction)、浮点数(float)、复数(complex number)等数据结构, 而矩阵(matrix)在Maple 中表示为阵列, 是一种特殊的表.4.1 数据类型查询在Maple 中, 用whattype 指令来查询某个变量的数据类型或特定类型, 命令格式为:whattype(expr) # 查询expr 的数据类型type(expr, t) # 查询expr 是否为t 类型, 若是则返回true, 否则返回false4.2 序列, 列表和集合4.2.1 序列所谓序列(Sequence), 就是一组用逗号隔开的表达式列. 如:> s:=1,4,9,16,25;:= s ,,,,1491625> t:=sin,com,tan,cot;:= t ,,,sin com tan cot一个序列也可以由若干个序列复合而成, 如:> s:=1,(4,9,16),25;:= s ,,,,1491625> s,s;,,,,,,,,,14916251491625而符号NULL 表示一个空序列. 序列有很多用途, 如构成列表、集合等. 事实上, 有些函数命令也是由序列构成. 例如:> max(s);25> min(s,0,s);函数seq 是最有用的生成序列的命令, 通常用于写出具有一定规律的序列的通项, 命令格式为: seq(f(i), i=m..n); # 生成序列f(m), f(m+1), …, f(n) (m,n 为任意有理数)seq(f(i), i=expr); # 生成一个f 映射expr 操作数的序列seq(f(op(i,expr)), i=1..nops(expr)); # 生成nops(expr)个元素组成的序列> seq(i^2,i=1..10);149162536496481100,,,,,,,,,> seq(i^3,i=x+y+z);x3y3z3,,获得一个序列中的特定元素选用操作符[ ], 如:> seq(ithprime(i),i=1..20);235711131719232931374143475359616771,,,,,,,,,,,,,,,,,,,> %[6],%[17];1359,4.2.2 列表列表(list), 就是把对象(元素)放在一起的一种数据结构, 一般地, 用方括号[ ]表示列表. 如下例: > l:=[x,1,1-z,x];x1 -1z x,,,:=l[]> whattype(%);list4.2.3 集合集合(set)也是把对象(元素)放在一起的数据结构,一般地, 用花括号表示集合.> s:={x,1,1-z,x};1z1x -,,s{}:=> whattype(%);set空集定义为{ }.Maple中集合的基本运算有交(intersect)、并(union)、差(minus):> A:={seq(i^3,i=1..10)};B:={seq(i^2,i=1..10)};,,,,,,,,,1827641252163435127291000A{}:=149162536496481100,,,,,,,,,B{}:=> A intersect B;,164{}4.3 数组和表在Maple中, 数组(array)由命令array产生, 其下标变量(index)可以自由指定. 下标由1开始的一维数组称为向量(vector), 二维以上的数组称为矩阵(matrix). 数组的元素按顺序排列, 任意存取一数组的元素要比列表或序列快的多. 区分一个数据结构是数组还是列表要用“type”命令.表(table)在建立时使用圆括号, 变量能对一个表赋值, 但一个在存取在算子中的未赋值变量会被自动地假定是表, 表的索引可以成为任意Maple表达式. 表中元素的次序不是固定的.5 Maple 高级输入与输出操作生成LATEXMaple 可以把它的表达式转换成LATEX, 使用latex 命令即可: > latex(x^2+y^2=z^2);{x}^{2}+{y}^{2}={z}^{2}还可以将转换结果存为一个文件(LatexFile):> latex(x^2 + y^2 = z^2, LatexFile);再如下例:> latex(Int(1/(x^2+1),x)=int(1/(x^2+1),x));\int \! \left( {x}^{2}+1 \right) ^{-1}{dx}=\arctan\left( x \right)二 微积分运算1 函数的极限和连续1.1 函数和表达式的极限)(lim x f ax →命令格式为: limit(f,x=a);求)(lim x f a x +→时的命令格式为limit(f, x=a, right); 求)(lim x f ax -→时的命令格式为limit(f, x=a, left); 请看下述例子:> Limit((1+1/x)^x,x=infinity)=limit((1+1/x)^x,x=infinity);= lim → x ∞⎛⎝ ⎫⎭⎪⎪ + 11x xe > Limit((x^n-1)/(x-1),x=1)=limit((x^n-1)/(x-1),x=1);= lim → x 1 - x n 1 - x 1n > Limit(x^x,x=0,right)=limit(x^x,x=0,right);= lim → +x 0x x 1> limit(a*x*y-b/(x*y),{x=1,y=1});- a b> limit(x^2*(1+x)-y^2*((1-y))/(x^2+y^2),{x=0,y=0});undefined下例就是化二重极限为二次极限而得正确结果:> limit((sin(x+y)/(sin(x)*sin(y)),{x=Pi/4,y=Pi/4}));⎛⎝ ⎫⎭⎪⎪limit ,()sin + x y ()sin x ()sin y {}, = x 14π = y 14π > limit(limit(sin(x+y)/(sin(x)*sin(y)),x=Pi/4),y=Pi/4);21.2 函数的连续性1.2.1 连续在Maple 中可以用函数iscont 来判断一个函数或者表达式在区间上的连续性. 命令格式为: iscont(expr, x=a..b, 'colsed '/'opened');其中, closed 表示闭区间, 而opened 表示开区间(此为系统默认状态).如果表达式在区间上连续, iscont 返回true, 否则返回false, 当iscont 无法确定连续性时返回FAIL. 另外, iscont 函数假定表达式中的所有符号都是实数型. 颇为有趣的是, 当给定区间[a,b ] (a >b )时, iscont 会自动按[b,a ]处理.> iscont(1/x,x=1..2);true> iscont(1/x,x=-1..1,closed);false> iscont(1/(x+a),x=0..1);FAIL> iscont(ln(x),x=10..1);true1.2.2 间断函数discont 可以寻找函数或表达式在实数域的间断点, 当间断点周期或成对出现时, Maple 会利用一些辅助变量予以表达, 比如, _Zn ~(任意整数)、_NZn ~(任意自然数)和Bn ~(一个二进制数, 0或者1), 其中n 是序号. 判定f(x)间断点的命令为:discont(f, x);> discont(ln(x^2-4),x);{},-22> discont(arctan(1/2*tan(2*x))/(x^2-1),x);{},,-11 + 12π_Z1~14π> discont(round(3*x-1/2),x);{} + 1313_Z1 函数round 为“四舍五入”函数,上例并非一目了然,对其进一步理解可借助于函数plot 或下面给出的fdiscont 例子。
maple解方程组命令
maple解方程组命令使用Maple解方程组的命令是一种快速且准确的方法,可以帮助我们解决复杂的数学问题。
Maple是一种强大的数学软件,它可以用来进行数值计算、符号计算、绘图等多种数学运算。
在这篇文章中,我们将探讨如何使用Maple解方程组,并给出一些实际应用的例子。
在Maple中,解方程组的命令是`fsolve`。
`fsolve`函数可以用来求解多个非线性方程组,它的语法如下:```fsolve({equations}, {variables})```其中,`equations`是一个包含多个方程的集合,`variables`是方程中的未知数。
通过这个命令,Maple可以找到方程组的解,并将解返回给用户。
下面我们来看一个简单的例子。
假设我们有一个方程组:```x + y = 5x - y = 1```我们可以使用Maple来解这个方程组。
首先,我们需要定义方程组的变量:```x, y := fsolve({x + y = 5, x - y = 1}, {x, y})```然后,我们可以通过打印变量的值来得到方程组的解:```print(x, y)```运行这段代码后,Maple会输出方程组的解,即x=3,y=2。
这样,我们就成功地用Maple解决了这个方程组。
除了这个简单的例子,我们还可以使用Maple来解决更复杂的方程组。
例如,假设我们有一个由三个方程组成的方程组:```x^2 + y^2 + z^2 = 1x + y + z = 2x - y + z = 0```我们可以使用`fsolve`命令来解这个方程组:```x, y, z := fsolve({x^2 + y^2 + z^2 = 1, x + y + z = 2, x - y + z = 0}, {x, y, z})```然后,我们可以打印变量的值来得到方程组的解:```print(x, y, z)```运行这段代码后,Maple会输出方程组的解,即x=1,y=0,z=1。
一类耦合非线性薛定谔方程组的求解
第38卷第1期2024年1月兰州文理学院学报(自然科学版)J o u r n a l o fL a n z h o uU n i v e r s i t y ofA r t s a n dS c i e n c e (N a t u r a l S c i e n c e s )V o l .38N o .1J a n .2024收稿日期:2023G05G15基金项目:国家自然科学基金项目(11761044)作者简介:仁世杰(1995G),男,甘肃庄浪人,助教,硕士,研究方向为孤立子理论及其应用.E Gm a i l :487450395@q q.c o m.㊀㊀文章编号:2095G6991(2024)01G0039G05一类耦合非线性薛定谔方程组的求解仁世杰1,李永军2,张㊀娟3(1.兰州城市学院信息工程学院,甘肃兰州730070;2.兰州城市学院电子工程学院,甘肃兰州730070;3.宁夏师范学院数学与计算机科学学院,宁夏固原756000)摘要:在可积条件c (t )=(γ2(t ))2=1(C 1t +C 2)2,γ1(t )=γ2(t )=1C 1t +C 2ìîíïïïï下,利用特殊变换法和S i n e Gc o s i n e 方法,得到了双芯光纤变系数线性耦合薛定谔方程组i ∂∂t u (x ,t )+i ∂∂x u (x ,t )-∂2∂t 2u (x ,t )+γ1(t )u (x ,t )2u (x ,t )+㊀㊀c (t )v (x ,t )=0,i ∂∂t v (x ,t )+i ∂∂x v (x ,t )-∂2∂t 2v (x ,t )+γ2(t )v (x ,t )2v (x ,t )+㊀㊀c (t )u (x ,t )=0ìîíïïïïïï的精确解.其中:C i (i =1,2)是常数;γi (t )(i =1,2)是第i 个纤芯的非线性参数;c (t )是两个纤芯之间的线性耦合参数.关键词:双芯光纤;线性耦合;薛定谔方程;可积;S i n e Gc o s i n e 方法中图分类号:O 175.29㊀㊀㊀文献标志码:AS o l v i n g aC l a s s o fC o u p l e dN o n l i n e a r S c h r öd i n g e rE qu a t i o n s R E N S h i Gj i e 1,L IY o n g Gju n 2,Z HA N GJ u a n 3(1.S c h o o l o f I n f o r m a t i o nE n g i n e e r i n g ,L a n z h o uC i t y U n i v e r s i t y,L a n z h o u730070,C h i n a ;2.S c h o o l o fE l e c t r o n i cE n g i n e e r i n g ,L a n z h o uC i t y U n i v e r s i t y,L a n z h o u730070,C h i n a ;3.S c h o o l o fM a t h e m a t i c s a n dC o m p u t e r S c i e n c e ,N i n g x i aN o r m a lU n i v e r s i t y,G u y u a n756000,N i n gx i a ,C h i n a )A b s t r a c t :I n t h i s p a p e r ,t h e e x a c t s o l u t i o n s o f t h e l i n e a r l y c o u p l e d n o n l i n e a r S c h r öd i n g e r E qu a Gt i o n G r o u p i ∂∂t u (x ,t )+i ∂∂x u (x ,t )-∂2∂t 2u (x ,t )+γ1(t )u (x ,t )2u (x ,t )+㊀㊀c (t )v (x ,t )=0i ∂∂t v (x ,t )+i ∂∂x v (x ,t )-∂2∂t 2v (x ,t )+γ2(t )v (x ,t )2v (x ,t )+㊀㊀c (t )u (x ,t )=0ìîíïïïïïïïïw i t h v a r i a b l e c o e f f i c i e n t s o f t w o Gc o r e f i b e r a r e c a l c u l a t e db y s p e c i a l t r a n s f o r m a t i o nm e t h o d a n dm e t h o du n Gd e r i n t e g r a b l e c o n d i t i o n c (t )=(γ2(t ))2=1(C 1t +C 2)2γ1(t )=γ2(t )=1C 1t +C 2ìîíïïïïa m o n g wh i c h C i (i =1,2)i s t h e c o n Gs t a n t ,γi (t )i s t h e n o n l i n e a r p a r a m e t e r s o f t h e i Gt h c o r e a n d c (t )i s t h e l i n e a r c o u p l i n g p a r a m e Gt e r sb e t w e e n t h e t w o c o r e s .K e y wo r d s :t w o Gc o r e f i b e r ;l i n e a r c o u p l i n g ;S c h r öd i n g e r e q u a t i o n ;i n t e g r a b l e ;S i n e Gc o s i n em e t h o d 0㊀引言双芯光纤耦合方程是一类数学与物理领域研究的热点方程,它描述了光纤中光孤子是光波在传播过程中色散效应与非线性压缩效应相平衡的结果.因为光孤立子通信具有高码率㊁长距离和大容量的优点,可以构成超高速传输系统,所以光孤立子及其在通信中的应用研究具有重要的研究价值.文献[1]研究了变系数线性耦合的非线性薛定谔方程组:i ∂∂t u (x ,t )+i ∂∂x β11u (x ,t )-㊀β122∂2∂t 2u (x ,t )+γ1(t )u (x ,t )2㊀u (x ,t )+c v (x ,t )+δa u (x ,t )=0,i ∂∂t v (x ,t )+i ∂∂x β21v (x ,t )-㊀β222(t )∂2∂t2v (x ,t )+γ2(t )v (x ,t )2㊀v (x ,t )+c (t )u (x ,t )-δav (x ,t )=0.ìîíïïïïïïïïïïïïïï(1)其中:βj 1(j =1,2)是第j 个纤芯的群速度参数;βj 2(j =1,2)是第j 个纤芯的色散参数;γi (i =1,2)是非线性参数;c 是两个纤芯之间的线性耦合参数;δa 是两个纤芯的相速度参数.对于方程组(1),文献[1]针对非线性定向耦合器中光学明孤子的相互作用动力学进行了广泛的数值研究,考虑群速度失配,相速度失配,以及群速度色散和有效模面积的差异等因素的影响,主要使用数值方法研究了在均匀白躁声形式下的谐波无穷小扰动作用下亮孤子的稳定性.求解此类方程学有以下方法:I S T 方法[2G3],齐次平衡法[4G5],B äc k l u n d 变换方法[6G7],S i n e Gc o s i n e 方法[8G9]等.本文研究的是变系数的线性耦合非线性薛定谔方程组,方程组为i ∂∂t u (x ,t )+i ∂∂x u (x ,t )-∂2∂t 2u (x ,t )+㊀γ1(t )u (x ,t )2u (x ,t )+㊀c (t )v (x ,t )=0,i ∂∂t v (x ,t )+i ∂∂x v (x ,t )-∂2∂t 2v (x ,t )+㊀γ2(t )v (x ,t )2v (x ,t )+㊀c (t )u (x ,t )=0.ìîíïïïïïïïïïïïï(2)通过P a i n l e v é检验,得到当非线性参数和耦合参数满足:c (t )=(γ2(t ))2=1(C 1t +C 2)2,γ1(t )=γ2(t )=1C 1t +C 2ìîíïïïï(3)时,方程组(2)是P a i n l e v é可积的.本文在条件(3)基础上,首先利用S i n e Gc o s i n e 方法求解方程组的特殊精确解,然后选取满足方程的特定参数,并给出图像,所涉及的计算均由M a pl e 完成.1㊀预备知识S i n e Gc o s i n e 方法是求解非线性数学物理方程的有效方法,主要用于可积系统的求解.本节简单地介绍S i n e Gc o s i n e 方法.考虑非线性偏微分方程组i ∂∂T U (X ,T )-α∂2∂X 2U (X ,T )+㊀㊀βU (X ,T )2U (X ,T )+㊀㊀μV (X ,T )=0,i ∂∂T V (X ,T )-α∂2∂X 2V (X ,T )+㊀㊀βV (X ,T )2V (X ,T )+㊀㊀μU (X ,T )=0.ìîíïïïïïïïïïïïï(4)假设方程组(4)的解具有如下形式:U (X ,T )=r 1(X ,T )e i (ωT +k X ),V (X ,T )=r 2(X ,T )e i (ωT +k X ).{(5)将(5)代入方程组(4),得-α∂2∂X2r 1(X ,T )+i ∂∂T r 1(X ,T )-㊀㊀2i αk ∂2∂X2r 1(X ,T )+β(r 1(X ,T ))3+㊀㊀(αk 2-ω)r 1(X ,T )+μr 2(X ,T )=0,-α∂2∂X 2r 2(X ,T )+i ∂∂T r 2(X ,T )-㊀㊀2i αk ∂2∂X 2r 2(X ,T )+β(r 2(X ,T ))3+㊀㊀(αk 2-ω)r 2(X ,T )+μr 1(X ,T )=0.ìîíïïïïïïïïïïïïïï(6)分离(6)中实部和虚部,则式(6)等价于虚部为0:式(7),实部为0:式(8).04㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀兰州文理学院学报(自然科学版)㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀第38卷∂∂T r 1(X ,T )-2αk ∂2∂X2r 1(X ,T )=0,∂∂T r 2(X ,T )-2αk ∂2∂X 2r 2(X ,T )=0.ìîíïïïï(7)-α∂2∂X 2r 1(X ,T )+β(r 1(X ,T ))3+㊀㊀(αk 2-ω)r 1(X ,T )+μr 2(X ,T )=0,-α∂2∂X2r 2(X ,T )+β(r 2(X ,T ))3+㊀㊀(αk 2-ω)r 2(X ,T )+μr 1(X ,T )=0.ìîíïïïïïïïï(8)求解(7)可得r 1(X ,T )=F 1(ξ),r 2(X ,T )=F 2(ξ).{(9)其中ξ=2T αk +X2αk,F i (ξ)(i =1,2)为任意函数,其具体形式根据F i (ξ)(i =1,2)满足的条件确定.将(9)代入(8)得-14αk 2∂2∂ξ2F 1(ξ)+β(F 1(ξ))3+㊀㊀(αk 2-ω)F 1(ξ)+μF 2(ξ)=0,-14αk 2∂2∂ξ2F 2(ξ)+β(F 2(ξ))3+㊀㊀(αk 2-ω)F 2(ξ)+μF 1(ξ)=0.ìîíïïïïïïïï(10)在方程组(10)中,假设F i (ξ)(i =1,2)有如下形式:F i (ξ)=E i s i n (h (ξ))+G i c o s (h (ξ))+H i (i =1,2),(11)其中E i ,G i 和H i (i =1,2)是待定常数,同时h (ξ)满足常微分方程:d h (ξ)d ξ=A s i n (h (ξ))+B c o s (h (ξ))+E ,(12)其中A ,B 和E 是待定常数.再将(11),(12)代入(10)中,整理得到关于s i n (h (ξ)),c o s (h (ξ))的多项式,令其系数为零,得到关于E 1,E 2,G 1,G 2,H 1,H 2,A ,B ,E ,k 和ω的代数方程组.将得到的解带回(12)中,再利用文献[10]中介绍的S i n e GG o r d o n 方程(12)的解,可以得到方程组(4)的解.2㊀方程组的求解本节使用S i n e Gc o s i n e 方法和特殊变换求方程组(2)的一组精确解.定义下列函数:T (t )=-1t ,b (x ,t )=-12ln (2t ),a (x ,t )=-(t -x )24t,X (x ,t )=x 2t .ìîíïïïïïïïïïï(13)方程(2)可经过变换:㊀u (x ,t )=U (X (x ,t ),T (t ))e i a (x ,t )+b (t ),v (x ,t )=V (X (x ,t ),T (t ))e i a (x ,t )+b (t ){(14)转化为方程(4).故先求解方程(4)得到方程的解U (X ,T ),V (X ,T ),然后再通过变换(14)就可以得到原方程组(2)的解.由第一节求解方程组(4)可以得到E 1,E 2,G 1,G 2,H 1,H 2,A ,B ,E ,k ,ω的代数方程组,令D 1=4H 1α2k 4-4H 1αk 2ω+4H 2αk 2μ+2A E E 1-B E G 1,D 2=4H 2α2k 4+4H 1αk 2μ-4H 2αk 2ω+2A E E 2-B E G 2,D 3=4E 2α2k 4+4E 1αk 2μ-4E 2αk 2ω+A 2E 2-A B G 2+E 2E 2,D 4=4G 1αk 2μ-4G 2αk 2ω+2A 2G 2+3A B E 2-B 2G 2+E 2G 2,则代数方程组有如下表示,-24Ε1G 1H 1αβk 2+3A E G 1+3B E E 1=0,(15)12E 12H 1αβk 2-12G 12H 1αβk 2-3A E E 1+3B E G 1=0,(16)12E 12G 1αβk 2-4G 13αβk 2-2A 2G 1-4A B E 1+2B 2G 1=0,(17)4E 13αβk 2-12E 1G 12αβk 2-2A 2E 1+4A B G 1+2B 2E 1=0,(18)㊀-12E 12H 1αβk 2-4H 13αβk 2+D 1=0,(19)-4G 1αk 2ω+4G 2αk 2μ+2A 2G 1+3AB E 1-B 2G 1+E 2G 1+4=0,(20)-24E 2G 2H 2αβk 2+3A E G 2+3B E E 2=0,(21)12E 22H 2αβk 2-12G 22H 2αβk 2-3A E E 2+3B E G 2=0,(22)12E 22G 2αβk 2-4G 22αβk 2-2A 2G 2-4A B E 2+2B 2G 2=0,(23)4E 23αβk 2-12E 2G 22αβk 2-14第1期仁世杰等:一类耦合非线性薛定谔方程组的求解2A 2E 2+4A B G 2+2B 2E 2=0,(24)-12E 22H 2αβk 2-4H 23αβk 2+D 2=0,(25)-4E 23αβk 2-12E 2H 22αβk 2+D 3=0,(26)-12E 22G 2αβk 2-12G 2H 22αβk 2+4G 2α2k 4+D 4=0.(27)求解方程组(15)-(27),选取其中一组非平凡解:A =33B ,B =B ,E =0,E 1=E 2,E 2=E 2,H 1=0,H 2=0,G 1=-33E 2,G 2=-33E 2,k =-B 2E 22αβ,ω=-8E 42β2-6E 22βμ+3B 26E 22β.ìîíïïïïïïïï(28)将(28)代入方程(12),得d h (ξ)d ξ=33B s i n (h (ξ))+B c o s (h (ξ)).(29)求解微分方程(29),得h (ξ)=2a r c t a n 3(1+e 233B ξ)-3+e 233B ξéëêêùûúú.(30)取特定例子如下:取定常数μ=10,β=-1,α=1,B =-1,E 2=3,将(30)代入方程组(11),得F 1(ξ)=F 2(ξ)=3s i n2a r c t a n 3(1+e 233B ξ)-3+e 233B ξéëêêùûúú{}-3c o s2a r c t a n 3(1+e 233B ξ)-3+e 233B ξéëêêùûúú{}.(31)相应F 2i (ξ)(i =1,2)的图像如图1所示,特别地,当待定系数αβ<0时,发现F 2i (ξ)(i =1,2)的能量凹陷,即为暗孤立子解.根据(5)和(28)可知U (X ,T )=V (X ,T ).当常数确定后,则k =-26,ω=39718,ξ=T +26X .(32)由此U (X ,T ),V (X ,T )表示为U (X ,T )=V (X ,T )={3s i n2a r c t a n 31+e -233(T +26X )()-3+e-233(T +26X )éëêêùûúú{}-3c o s2a r c t a n 31+e -233(T +26X )()-3+e-233(T +26X )éëêêùûúú{}}e I (39718T -26X ).(33)图1㊀F 2i (ξ)的图像㊀㊀限制自变量的范围,得到U (X ,T )2图像,如图2所示.图2㊀U (X ,T )2的图像从图2发现U (X ,T )2的能量凹陷,即为暗孤立子解.将(13)代入(33)中,令D (x ,t )=e -I (9x 2+9t 2+32x -18t x +794)+18t l n (2t )36t,u (x ,t ),v (x ,t )表示为u (x ,t )=v (x ,t )={3s i n2a r c t a n 3(1+e -32x -436t )-3+e -32x -436t éëêêùûúú{}-24㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀兰州文理学院学报(自然科学版)㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀第38卷3c o s2a r c t a n 31+e -32x -436t ()-3+e-32x -436t éëêêùûúú{}}D (x ,t).(34)限制自变量的范围,得到u (x ,t )2图像如图3所示.图3㊀u (x ,t )2的图像㊀㊀从图3可以发现u (x ,t )2的部分能量突起,即为亮孤立子解.3㊀结语本文主要研究的是一类薛定谔方程组在可积条件下,通过特殊变换法和S i n e Gc o s i n e 求解其精确解,然后给定待定的常数,确定方程组精确解的图像.本文的目标方程可进行适当地调整,若将部分常系数改为变量系数,那么可积条件将会发生变化,同时可使用上述方法求方程的精确解.参考文献:[1]G O V I N D A R A J A N A ,A R UMU G AM M ,U T HA Y A GK UMA R A.I n t e r a c t i o nd y n a m i c so fb r i gh ts o l i t i o n s i n L i n e a r l y c o u p l e d a s y mm e t r i c s y s t e m s [J ].O p t Q u a n tE l e c t r o n ,2016,48(12):563.[2]G A R D N E R C S ,G R E E N EJ M ,K R U S K A L M D ,e ta l .M e t h o d f o r s o l v i n g t h eK o r t e w e g Gd eV r i e s e q u a t i o n [J ].P h y sR e v ,1967,19:1095G1097.[3]郭玉翠.非线性偏微分方程引论[M ].北京:清华大学出版社,2008.[4]F A N E G ,Z HA N G H Q.N e we x c e pt s o l u t i o n s t oa s y s t e mo fc o u p l e de q u a t i o n s [J ].P h y Le t t A ,1998,245:389G392.[5]WA N G M L .E x a c ts o l u t i o n sf o rac o m po u n d K d v GB u r g e r s e q u a t i o n [J ].P h ys L e t t A ,1996,213:279G287.[6]M I U R A M R.B a c k l u n dt r a n s f o r m a t i o n [M ].B e r l i n :S p r i n g e r GV e r l a g,1978.[7]C A O X F .B äc k l u n dt r a n s f o r m a t i o nf o raf a m i l y of c o u p l e dK d ve q u a t i o n s [J ].P h y sS c r ,2023,98:115G209.[8]李新月,祁娟娟,赵敦,等.自旋G轨道耕合二分量玻色G爱因斯坦凝聚系统的孤子解[J ].物理学报,2023,72(10):285G295.[9]X I AJ ,Y A N GD ,Z HO U H ,e t a l .E v o l v i n g ke r n e l e x Gt r e m e l e a r n i n g m a df o r m e d i c a ld i ag n o s i sv i aad i s Gp e r s e f o r a g i n g s i n ec o n s i n ea l g o r i th m [J ].C o m pu t e r s i nB i o l o g y an d M e d i c i n e ,2022,141:105137.[10]Y A N C T.S o m e t h i n g hi d d e ni nt h eF o u r i e rs e r i e s a n d i t s p a r t i a l s u m :S o l i t a r y w a v e s o l u t i o n t o p o l y n o Gm i a l n o n l i n e a r d i f f e r e n t i a l e qu a t i o nw a v em o t i o n [J ].P h y Le t tA ,1997,26:219G237.[责任编辑:赵慧霞]34第1期仁世杰等:一类耦合非线性薛定谔方程组的求解。
计算机数学软件Maple概述
控制系统分析与设计
系统建模
Maple可用于建立控制系统的数学模型,包括传递函数、状态 空间表示和频率响应等。它支持控制系统的时域和频域分析。
稳定性分析
Maple提供了多种稳定性分析方法,如劳斯判据、奈奎斯特图和根轨 迹等。它可用于评估控制系统的稳定性,并指导控制器的设计。
控制器设计
Maple支持多种控制器设计方法,如PID控制、最优控制和鲁棒控制等。 它可以帮助工程师设计高效且稳定的控制系统,以满足不同的工程需求。
控制结构
Maple提供条件语句(如if-else)、 循环语句(如for、while)等控制结 构,用于实现复杂的逻辑功能。
函数定义与调用
用户可以自定义函数,并在程序中调 用这些函数。函数可以接受参数,并 返回计算结果。
03
Maple在数学计算中的应用
符号计算
代数运算
Maple可以进行各种代数运算,如多项式运算、因式分解、求根 等。
方面更具优势。此外,Maple的编程语言相对更简单易用。
03
与Python的比较
Python是一种通用编程语言,通过安装额外的库(如NumPy、SciPy
等)可以实现数学计算功能。然而,与Maple相比,Python在符号计
算和图形可视化方面功能相对较弱。
02
Maple基础知识
Maple的界面Maple与MATLAB之间的数据交换和算 法调用。
与其他科学计算软件的接口
如与Mathematica、SageMath等软件的互 操作性。
Maple在科研与教学中的应用案例
数学研究
用于解决复杂数学问题,如微分方程求解、符号积分等。
物理工程
在物理模拟、工程设计等领域进行数学建模和仿真。
非线性微分方程教学中的Maple辅助
> r ts be e eaa o e r ri l o e ; ; pi (t l d gn rt n d ic d' f n'a e o c t a n )i
> f > n > n ^ — = e iq 0a dp Oa dp2 4 q Ot n h
>wt(E ol D h gvr i D t s ca ea) h o, n :
( 3 )
>ai (= (, ytrr )h t te () l s xty (,= tte = t t: a x ) = )=(, a h a ) >e s dfxt x ( 2 y — )( 2 )2 9一 x y 4, q : i(,= x + 1 x +r— )y ( = ) 2 ^ + — ) dfyf y ( +, — )( 2 y2 9+ x + 2 4; i(,= ) ) 1 x + ^— )x (2 T — ) ) ^ ^ 2  ̄
中 图分 类 号 :0 7 .4 151 文 献标 识 码 : A 文章 编号 :17 — 5 22 1 )2 0 8 — 4 6 4 8 2 (0 10 — 0 3 0
O 引 言
常微分 方 程是 数 学专 业 的基 础课 程 , 常安 排 在数 学 分析 、 通 高等 代数 、 解析 几 何 等课 程 之后 , 而 为 从 学 习微 分几 何 、 函分析 等后 继 课程 打 下基 础 。 同时 , 微 分方 程作 为 理论 联 系 实 际 的重 要数 学 分支 之 泛 常
江 苏 技 术 师 范 学 院 学 报
x 2% —z x e , =— +y +
.
第 1 卷 7
maple解多元方程
maple解多元方程
Maple是一种数学建模软件,它可以用来解决各种数学问题,包括解多元方程。
多元方程是指包含多个未知量的方程,这些未知量之间存在复杂的关系。
在实际问题中,多元方程往往用来描述多个变量之间的相互作用或制约关系,例如经济学、物理学、生物学等领域中的模型。
Maple可以通过命令行或图形界面来输入多元方程,并利用其内置的求解算法来求解方程组的解。
Maple支持的特征包括符号计算、数值计算、矩阵计算、绘图等,这些特征使得Maple成为理论和实践中广泛使用的数学工具。
对于初学者来说,Maple的语法可能较为复杂,但是通过学习Maple的基础语法和常用命令,就可以掌握其解决多元方程的能力。
在实际应用中,Maple可以用来解决各种多元方程,例如线性方程组、非线性方程组、差分方程等。
总之,Maple是一种强大的数学建模软件,它可以用来解决各种多元方程,帮助研究者更好地理解和解决实际问题。
- 1 -。
