第4章-方程求解(Maple 中文教程)

第4章-方程求解(Maple 中文教程)
第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? ? 1212

I 7 当然, solve 也可以求解含有未知参数的方程:

> eqn:=2*x^2-5*a*x=1;

:= eqn = ? 2x 25a x 1 > solve(eqn,x);

, + 54a 14 + 25a 28 ? 54a 14 + 25a 28 solve 函数的第一个参数是有待求解的方程或方程的集合, 当然也可以是单个表达式或者表达式的集合, 如下例:

> solve(a+ln(x-3)-ln(x),x);

3e a

? + 1e

a 对于第二个参数, 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 72

x 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 ?=+=+,12

2

> 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 ? + 11I 2 = y ? ? 11I 2 > simplify(subs(sols2,eqns));

{}, = I 2I 2 = 11

1.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 12

x > 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);

??????

??,,????????,1195299????????,33131657????????,-633-1265 求解方程或方程组的整数解时使用函数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 方程

283

7?=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 4

1.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)); + 13()-1n 23

2n 当然, 并不是所有的递归形式的函数方程的解可以写成解析形式, 如果不能, 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);

+ + + 21n + _C 23()ln n n 2 ? + ? + 1913_C 12_C 2????????? + 23_C 29()ln n 29()ln n 2n 3????????O 1n 4

1.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

可以看出, 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 _C1x

函数dsolve 给出的是微分方程的通解, 其中的任意常数是用下划线起始的内部变量表示的.

在Maple 中, 微分方程的解是很容易验证的, 只需要将解代入到原方程并化简就可以了.

> subs(%,ODE);

= x ????????

??????x e ????????x _C1x ? e ????????x _C1????????ln e ????????x _C1x e ????????x

_C1x > assume(x,real): assume(_C1,real):

> simplify(%); = ?

e ????????x~_C1~()? + x~_C1~x~_C1~?e ????????x~_C1~()? + 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 = ??x

y + 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 = ?y ?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 = + ??????

????2

t 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)、欠阻尼(01)的情况. 下面加以区分求解:

> 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?????????()u t 2()u t e ()?t > dsolve(%,u(t),method=fourier);

= ()u t + + ? 23e ()?2t ()Heaviside t 16e t ()Heaviside ?t e ()?t t ()Heaviside t 12e ()?t ()Heaviside t

2.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??????

????2

t 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 ? + ? + 14()sin 2t 212t 12t 216t 3124

t 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 ??????

????2

t 2()θt ?g ()sin ()θt > initvals:=theta(0)=0,D(theta)(0)=v[0]/l; := initvals , = ()θ00 = ()()D θ0v 0

l

> 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 5()O t 6 > Order:=11:

> sol:=dsolve({ODE,initvals},theta(t),type=series); := sol = ()θt ? + ? + + v 0

t 1g v 0l 2t 31g v 0() + v 02g l l 4t 51g v 0() + + 11g l v 02g 2l 2v 04l 6t 71g v 0() + + + 57g v 04l 102g 2v 02l 2g 3l 3v 06l 8t 9()O t 11

2) 幂级数解法

对于一个符号代数系统来说, 幂级数是必不可少的微分方程求解工具. 幂级数求解函数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 ??????????x ()y x 4x 2()y x 0 > dsolve(ODE,y(x));

= ()y x + _C1????????BesselJ ,043x ()/32_C2??????

??BesselY ,043x ()/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 121613286025

y0x 15()O x 16 也可以用powsolve 给出的函数直接获得用递归形式定义的幂级数系数, 不过参数必须用_k , 这是powsolve 使用的临时变量.

> sol(_k);

?4()a ? _k 3_k

2 例:求解一维谐振子的解:

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 12εC0x 216εC1x 3???????? + 124ε2C0112C0x 4??????

?? + 1120ε2C1120C1x 5????????? ? 130ε???????? + 124ε2C0112C0160εC0 + ? ? + + + x 6????????? ? 1ε???????? + 1ε2C11C11εC1x 7()O x 8 + +

> H(_k);

? ? ε()a ? _k 2(a ) ? _k 4_k ()

? _k 1 2.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 2()y t () ? 1()y t 2??????????t ()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. = ??t ()y t -.1 > F(1);

????????,, = t 1. = ()y t -.144768589749425608 = ??t ()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方法(预测法)

下面给出微分方程数值方法的参数表:

参数名参数类型参数用途参数用法

initial 浮点数的一维数组指定初值向量

number 正整数指定向量个数

output 'procedurelist'(默认)

或'listprocedure'指定生成单个函数

或多个函数的有序

Procedurelis:单个函数, 返回有序表

Listprocedure:函数的有序表

procedure 子程序名用子程序形式指定

第一尖常微分方程

组的右边部分参数1:未知函数的个数参数2:自变量

参数3:函数向量

参数4:导函数向量

start 浮点数自变量起始值

startinit 布尔量(默认FALSE) 指定数值积分是否

总是从起始值开始

对dverk78不适用

value 浮点数向量(一维数

组) 指定需要输出函数

值的自变量数值点

如果给定, 结果是一个2

2×的矩阵. 元素[1,1]

是一个向量, 含自变量名和函数名称; 元素

[2,1]是一个数值矩阵, 其中第一列value的输入

相同, 其他列中是相应的函数值

另外, 还有一些特殊的附加参数:

maxfun :整数类型, 用于最大的函数值数量, 默认值50000, 为负数时表示无限制 corrections :正整数类型, 指定每步修正值数量, 在abmoulton 中使用, 建议值≤4 stepsize :浮点数值, 指定步长

下面看一个简单的例子:

> ODE:=diff(y(x),x)=y(x)-2*x/y(x);

:=

ODE = ?()y x ? ()y x 2x > 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. 于是可把原系统的解展成ε的幂级数, 若这个级数当L +++=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 i i εωω对于)(τ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?????????()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 120 > 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 11C 13()cos τ??????

????2τ2y 1y 11C 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 + ? ????????? + + 18C 1() ? C 12() + C 12τw 1C 1C 2()sin τ??????

?? ? 132C 13C 1τw 1()cos τ132C 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 ? + 14()cos 3τ14

()cos τC 2()sin τ > eta[1]:=unapply(rhs(%),tau);

:= η1 → τ ? + 14()cos 3τ14

()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 = + + ? + ? + ???????? + 144w 2()sin τ54()sin 5τ??????

????2τ2y 232()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-116

> 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 → τ? + + 316()sin 3τ??????

?? + 2996C 3()sin τ596()sin 5τ > for i from 0 to e_order do

map(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;

? + + 11ε217ε435ε6

> y(t):

> y:=unapply(simplify(y(t),{e^e_order=0}),t): > e:=1:y(t);

1037927 552960

()

sinτ

1519

540

()

sinτ()

cosτ6

81

32

()

sinτ()

cosτ4

61

80

()

sinτ()

cosτ8

13

256

()

sinτ()

cosτ2

5257957

3317760

()

cosτ3

5533

7200

()

cosτ11

912187

129600

()

cosτ7

799991

1105920

()

cosτ

? + ? ? + + + + ?

1212373

()

cosτ5114941

()

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]);

第5章 微分方程(Maple)

第5章 微分方程 5.1 常微分方程 5.1.1 常微分方程的求解和作图命令 z 求解微分方程命令dsolve 在微分方程中,我们称只有一个自变量的微分方程为常微分方程,具有两个或两个以上自变量的微分方程为偏微分方程。例如:描述物体冷却过程的数学模型 )(0u u k dt du ??= 含有自变量t 、未知函数u 以及一阶导数du dt ,是一个常微分方程。Maple 中求解常微分方程的命令为dsolve 函数,其用法有 dsolve (常微方程) dsolve (常微方程,待解函数,选项) dsolve ({常微方程,初值},待解函数,选项) dsolve ({常微方程组,初值},{待解函数},选项) z 方程数值解作图命令odeplot 要做出常微分方程数值解的图象,请使用odeplot 函数。odeplot 在程序包plots 中,可通过with(plots)或plots[odeplot]调出。 odeplot (数值解,被绘函数,参数范围,选项) 5.1.2 一阶常微分方程 z 可分离变量方程 若一阶微分方程有形式 )()(y g x f dx dy =,则称为可分离变量方程。一般可以通过对方程dx x f y g dy )() (=两边分别积分,得到方程的隐式解。

例:求解微分方程sin() '()sin() x y x y = 。 > eq:=diff(y(x),x)=sin(x)/sin(y(x)); 显然,这是可分离变量的常微分方程。用Detools 程序包中的odeadvisor 函数检测方程的类型,输出结果_separable 说明方程类型是可分离变量的。 > DEtools[odeadvisor](eq); [_separable] 用dsolve 函数求解方程,得到方程的通解。 > dsolve(eq); 设定选项implicit ,得到方程的隐式解。 > dsolve(eq,implicit); 附加初始值y(0)=1,得到方程的准确解。 > dsolve({eq,y(0)=1}); odeplot 命令作出方程解的图形。 > dsolve({eq,y(0)=1},numeric,range=-2..2); > plots[odeplot](%); z 齐次方程 若常微分方程具有形式 ??? ???=x y f dx dy ,则称为齐次方程。通常用变量代换x y u =将齐次方程转换为可分离变量方程 x u u f dx du ?=)(。

Maple入门教程Part3_命令和程序包

Part 3:命令和程序包 西希安工程模拟软件(上海)有限公司,2008 3.0 介绍 第三部分:命令和程序包,学习如何使用Maple的顶层命令和程序包中的命令,以及学习如何使用帮助系统。 为了获得更好的学习效果,请打开一个空白Maple文件。按照表格左侧中的操作步骤描述,在表格右侧空白处完成操作。 3.1 使用命令和程序包 Maple内置5,000多个计算命令,深度覆盖广泛的数学和编程主题。在前面的两节教程中,你已经体验了一些Maple命令,包括 sin, taylor, int, exp, dsolve, solve, fsolve, rhs, 和 eval,并且你已经通过关联菜单使用了更多的命令。 Maple中的命令分为两类:主函数库(main library)和程序包(packages)。 主函数库包含最常用的Maple命令,也称为顶层(top-level)命令。 其他的命令,按照学科组成程序包,如微积分教育包,统计,微分几何,等。例 如,Optimization 程序包收集了数值求解优化问题的命令。 Maple命令 一些常用的命令归类为顶层命令,如前面介绍的 sin, taylor, int, exp, dsolve, solve, fsolve, rhs, eval, factor, expand, simplfiy 等。你可以随时使用顶层命令,更多信息,请参阅Maple的顶层命令列表 Index of Functions。 使用顶层命令: 如果你希望交互式使用Maple命令,仅需要使用2-D数学输入命令。注意,这些命令和变量名显示为斜体。Maple命令的结构类似于 command(arguments),具体的命令名和调用格式取决于你使用的命令。

第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? ? 1212 I 7 当然, solve 也可以求解含有未知参数的方程: > eqn:=2*x^2-5*a*x=1; := eqn = ? 2x 25a x 1 > solve(eqn,x); , + 54a 14 + 25a 28 ? 54a 14 + 25a 28 solve 函数的第一个参数是有待求解的方程或方程的集合, 当然也可以是单个表达式或者表达式的集合, 如下例: > solve(a+ln(x-3)-ln(x),x); 3e a ? + 1e a 对于第二个参数, 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 72 x 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

如何利用Maple求解偏微分方程

如何利用Maple求解偏微分方程 微分方程分有常微分和偏微分方程两种,利用Maple对微分方程求解是Maple的一个核心优势,下面介绍利用Maple求偏微分方程的命令。 求偏微分方程或偏微分方程系统的命令是“Pdsolve”。 调用格式是: pdsolve(PDE, f, HINT = hint, INTEGRATE, build) pdsolve(PDE_system, funcs, HINT, other_options) pdsolve(PDE_or_PDE_system, conds, type=numeric, other_options) 其中: PDE:偏微分方程。 f:不定函数或名称;当有很多导函数时需要指定此项。 hint:(可选项)HINT = hint中的右边,其中hint 为“+,“*”之一,关键词strip 或TWS之一,结构TWS(math_function_name),或关于不定函数的任意代数表达式。 INTEGRATE:(可选项)当使用变量分离法求解PDE时发现ODE集合,此选项表明进行自动积分。 Build:(可选项)尝试建立不定函数的显式表达式,不管所得解的一般性。 PDE_system:偏微分方程系统;可包含不等式。 Funcs:(可选项)由不定函数或名称构成的集合或列表。 other_options:当精确求解PDE系统时,casesplit命令接受的所有选项也被pdsolve 接受。 PDE_or_PDE_system:偏微分方程或偏微分方程系统;可包含不等式。 Conds:初始或边界条件。

type=numeric:等式;表明寻找数值解;可使用关键词numeric替代整个等式。 示例:求解热传导方程的数值解、解析解和图形解。 初始条件: 为了得到数值解,我们需要定义a和h的值,以及提供第二个边界条件: 这个命令创建了一个模块(module,使用方法类似于Maple的函数包),可以看到模块的输出函数是plot,plot3d,animate和value。 解的表面图:

Maple入门教程A7- 数据处理

Part 7:数据处理
西希安工程模拟软件(上海)有限公司,2008
7.0 介绍
本节内容:数据处理,学习如何输入和输出数据,以及使用Maple的统计、可视化、和数据分 析工具。
7.1 输入和输出数据
使用交互式工具或命令输入和输出数据。使用Maple,您可以输入许多格式的数据,以及输出 数据到文件中。
输入数据
操作步骤 使用输入数据助手 输入数据文件,支持的格式包括 Excel, MATLAB, 图片,声音,矩 阵,分隔符文件。 例子:从【工具 -> 分析助手】菜 单,选择 输入数据... 读入数据文件 ExcelData.xls(这个 文件位于Maple安装目录下 data/portal 子文件夹)。 选择Excel格式。 依次点击【下一步】,【下一步 】,【下一步】。您可以添加一个 名称指向该数据,最后点击【完成 】。 输入的数据是数组格式。 现在,使用图形生成器绘制数据对 结果

2
1
应的图形。 鼠标右键点击输入的数据,从弹出 的关联菜单中选择【 Plots>Plot Builder】。 点击【 Plot】。
0
1
2
使用 ExcelTools 程序包 您也可以使用 ExcelTools 程序包中 的命令输入和输出Excel格式的数 据。 例子: 输入Excel文件 ExcelData.xls. 如果文件没有位于当前的文件夹 下,您需要输入数据文件的完整路 径。 在这里,数据文件位于Maple安装 目录下面的 data/portal 子文件夹 中。命令 kernelopts(datadir) 返回 数据文件夹的路径,然后用 cat 命 令将两个字符串串联组成数据文件 的完整路径。 60 返回和检查第一行数据。 返回数组中元素的个数。 "C:\Program Files\Maple 13\data/portal/ExcelData.xls" (2.1.1)
(2.1.2)
(2.1.3) (2.1.4)

Maple常用计算命令..

常用计算命令 《Maple 指令》7.0版本 第1章章数 1.1 复数 Re,Im - 返回复数型表达式的实部/虚部 abs - 绝对值函数 argument - 复数的幅角函数 conjugate - 返回共轭复数 csgn - 实数和复数表达式的符号函数 signum - 实数和复数表达式的sign 函数5 1.2 MAPLE 常数 已知的变量名称 指数常数(以自然对数为底) I - x^2 = -1 的根 infinity 无穷大 1.3 整数函数 ! - 阶乘函数 irem, iquo - 整数的余数/商 isprime - 素数测试 isqrfree - 无整数平方的因数分解 max, min - 数的最大值/最小值 mod, modp, mods - 计算对 m 的整数模 rand - 随机数生成器 randomize - 重置随机数生成器 1.4 素数 Randpoly, Randprime - 有限域的随机多项式/首一素数多项式ithprime - 确定第 i 个素数 nextprime, prevprime - 确定下一个最大/最小素数 1.5 数的进制转换 convert/base - 基数之间的转换 convert/binary - 转换为二进制形式 convert/decimal - 转换为 10 进制 convert/double - 将双精度浮点数由一种形式转换为另一种形式convert/float - 转换为浮点数 convert/hex - 转换为十六进制形式 convert/metric - 转换为公制单位

convert/octal - 转换为八进制形式 1.6 数的类型检查 type - 数的类型检查函数 第2章初等数学 2.1 初等函数 product - 确定乘积求和不确定乘积 exp - 指数函数 sum - 确定求和不确定求和 sqrt - 计算平方根 算术运算符+, -, *, /, ^ add, mul - 值序列的加法/乘法 2.2 三角函数 arcsin, arcsinh, . - 反三角函数/反双曲函数 sin, sinh, . - 三角函数/双曲函数 2.3 LOGARITHMS 函数 dilog - Dilogarithm 函数 ln, log, log10 - 自然对数/一般对数,常用对数 2.4 类型转换 convert/`+`,convert/`*` - 转换为求和/乘积 convert/hypergeom - 将求和转换为超越函数 convert/degrees - 将弧度转换为度 convert/expsincos - 将trig 函数转换为exp, sin, cos convert/Ei - 转换为指数积分 convert/exp - 将trig 函数转换为指数函数 convert/ln - 将arctrig 转换为对数函数 polar - 转换为极坐标形式 convert/radians - 将度转换为弧度 convert/sincos - 将trig 函数转换为sin, cos, sinh, cosh convert/tan - 将trig 函数转换为tan convert/trig - 将指数函数转换为三角函数和双曲函数 第3章求值 3.1 假设功能 3.2 求值 Eval - 对一个表达式求值 eval - 求值

Maple-ch-常微分方程

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”表示第一个任意常数。方程的解是很恐怖的解,这里仅给出了一个解,另

Maple提高教程B3- Maple中的偏微分方程求解

B3: Maple中的偏微分方程求解 西希安工程模拟软件(上海)有限公司,2008 11.0 Maple中的微分方程求解器介绍 Maple中微分方程求解器使用领先的算法求解以下问题: 常微分方程 (ODEs): dsolve 命令用于求解线性和非线性ODEs, 初始值问题 (IVP), 以及边界值问题 (BVP),可以通过参数项选择求符号解 (解析解) 或数值解。ODE Analyzer Assistant 微分方程分析器助手提供一个交互式用户界面方便用户求解 ODE 以及显示结果的图形。了解更多信息,参考帮助系统中的 dsolve, dsolve/numeric, 和 ODE Analyzer. 偏微分方程 (PDEs): pdsolve 命令用于求 PDEs 和含边界值问题的 PDEs 的符号解或数值解。使用Maple的PDE工具可以完成对PDE系统的结构分析和指数降阶处理。了解更多信息,参考帮助系统中的 pdsolve and pdsolve/numeric. 微分-代数方程 (DAEs): dsolve/numeric 命令是符号-数值混合求解器,使用符号预处理和降阶技术,让Maple能够求解高指数的DAE问题。Maple内置三个求解器用于处理DAEs:1)修正的 Runge-Kutta Fehlberg 方法,2)Rosenbrock 方法,以及 3)修正的拓展后向差分隐式方法。 11.1 求解偏微分方程PDE问题(BVP和IVP) Maple 求解经典力学难题的能力是非常著名的,它的数值和符号偏微分方程求解器是其中的重要工具。 例子:在不同的边界条件下,求波动方程的数值解、解析解、和图形解。 11.1.1 初始化 下面的Maple代码定义了一个名为P X的程序,生成函数的周期展开。 PX := proc(h::{algebraic,procedure},g::{range,name=range}) local L, D, var; if type(g,'range') then L := lhs(g); D := rhs(g) - L;

Maple 常用计算命令

Maple 常用计算命令 《Maple 指令》7.0版本 第1章章数 1.1 复数 Re,Im - 返回复数型表达式的实部/虚部 abs - 绝对值函数 argument - 复数的幅角函数 conjugate - 返回共轭复数 csgn - 实数和复数表达式的符号函数 signum - 实数和复数表达式的sign 函数5 1.2 MAPLE 常数 已知的变量名称 指数常数(以自然对数为底) I - x^2 = -1 的根 infinity 无穷大 1.3 整数函数 ! - 阶乘函数 irem, iquo - 整数的余数/商 isprime - 素数测试 isqrfree - 无整数平方的因数分解 max, min - 数的最大值/最小值 mod, modp, mods - 计算对 m 的整数模 rand - 随机数生成器 randomize - 重置随机数生成器 1.4 素数 Randpoly, Randprime - 有限域的随机多项式/首一素数多项式ithprime - 确定第i个素数 nextprime, prevprime - 确定下一个最大/最小素数 1.5 数的进制转换 convert/base - 基数之间的转换 convert/binary - 转换为二进制形式 convert/decimal - 转换为 10 进制 convert/double - 将双精度浮点数由一种形式转换为另一种形式convert/float - 转换为浮点数 convert/hex - 转换为十六进制形式 convert/metric - 转换为公制单位 convert/octal - 转换为八进制形式 1.6 数的类型检查 type - 数的类型检查函数 第2章初等数学 2.1 初等函数 product - 确定乘积求和不确定乘积 exp - 指数函数

怎样使用Maple帮助系统

怎样使用Maple帮助系统 对于刚接触Maple的新用户来说,对Maple是有很多疑问的,用户们不知道怎么使用这款软件。Maple提供了一个非常好的帮助系统,Maple帮助系统是最重要的资源,用户可以学习和掌握Maple命令的语法和功能。 更多Maple入门的基础操作与介绍请访问Maple中文版网站。 有几种途径可以进入Maple帮助系统: 从Maple顶部的“帮助”菜单,选择帮助文件。 点击工具栏上的图标。 如果已经知道希望阅读的主题词,可以直接从Maple文件访问帮助页,方法是执行命令“?topic”,例如输入“?LinearAlgebra”,回车后弹出“LinearAlgebra”相关的主题列表和帮助页。 Maple帮助系统打开一个独立的窗口,包含两个窗格,如图所示。左侧的窗格包含开始检索和浏览的内容,右侧的窗格显示最后的检索结果,例如一个特定的帮助页。 Maple中的帮助页面列出了命令的调用格式、参数、和使用说明,并在帮助页的后面列举了使用范例。一些帮助页面中还提供了超链接,使用户可以阅读相关的页面和字典定义。链接帮助页的超链接显示为绿色,链接到字典定义的超链接显示为暗红色。

使用帮助导航: 用户可在帮助系统导航中输入要搜索的主题或关键词,选项卡提供了帮助系统所有主题的列表。 某些时候,在解决某个数学问题时不知道应该使用Maple的什么命令,用户可从数学问题本身出发,推测在这些命令的帮助页面应当包含某些特定单词,此时就要用到全文查找的方法(选择搜索文本)。例如想要解一个微分方程,但是不知道应该用什么命令,我们可以推测,在这个命令的帮助中应该包含solve,differential和equation等关键词,此时可以在帮助菜单中选择搜索文本,在搜索区域输入要查找的关键词,例如solve differential equation 等,然后单击搜索按钮,让Maple开始检索。 搜索帮助系统: 在左侧窗格的搜索区域输入字符。 默认情况下,完成主题检索。为了完成文字检索,选择文字按钮。输入关键字,回车后开始检索。 Maple 将列出匹配的主题,并附带数值,表明匹配的程度,用户可从列表中选择最感兴趣的主题。 检索将列出匹配的主题,基于主题中关键词的使用频率。 通过选择资源下拉菜单,用户可以检索所有的帮助系统或指定的资源,例如帮助页、任务、向导、和手册。 检索结果排列在左侧窗格的检索结果选项卡内,点击内容表选项卡,查看帮助系统中的所有主题。 以上内容向大家介绍了进入Maple帮助系统的方法以及帮助文件的使用。这对Maple入门学习来说非常有帮助。如果需要了解更多Maple基本操作,可以参考Maple中文版网站的教程:介绍Maple入门的一些常见操作。

数学软件Maple使用教程

数学软件Maple使用教程 序言 一.什么是数学实验? 我们都熟悉物理实验和化学实验,就是利用仪器设备,通过实验来了解物理现象、化学物质等的特性。 同样,数学实验也是要通过实验来了解数学问题的特性并解决对应的数学问题。过去,因为实验设备和实验手段的问题,无法解决数学上的实验问题,所以,一直没有听说过数学实验这个词。随着计算机的飞速发展,计算速度越来越快,软件功能也越来越强,许多数学问题都可以由计算机代替完成,也为我们用实验解决数学问题提供了可能。 数学实验就是以计算机为仪器,以软件为载体,通过实验解决实际中的数学问题。 二.常用的数学软件 目前较流行的数学软件主要有四种: 1.MathACD 其优点是许多数学符号键盘化,通过键盘可以直接输入数学符号,在教学方面使用起来非常方便。缺点是目前仅能作数值运算,符号运算功能较弱,输出界面不好。 2.Matlab 优点是大型矩阵运算功能非常强,构造个人适用函数方便很方便,因此,非常适合大型工程技术中使用。缺点是输出界面稍差,符号运算功能也显得弱一些。不过,在这个公司购买了Maple公司的内核以后,符号运算功能已经得到了大大的加强。再一个缺点就是这个软件太大,按现在流行的版本5.2,自身有400多兆,占硬盘空间近1个G,一般稍早些的计算机都安装部下。我们这次没用它主要就是这个原因。 3.Mathematica 其优点是结构严谨,输出界面好,计算功能强,是专业科学技术人员所喜爱的数学软件。缺点是软件本身较大,目前流行的3.0版本有200兆;另一个缺点就是命令太长,每一个命令都要输入英文全名,因此,需要英语水平较高。 4.Maple 优点是输出界面很好,与我们平常书写几乎一致;还有一个最大的优点就是它的符号运算功能特别强,这对于既要作数值运算,又要作符号运算时就显得

Maple微分方程的求解

题目:微分方程的求解 ——基于Maple工具 姓名: 学号: 专业: 学科: 老师:

目录 一、简介 (3) 概况: (3) Maple 主要技术特征: (3) 1. 强大的求解器:数学和分析软件的领导者 (3) 2. 技术文件环境:重新定义数学的使用性 (4) 3. 知识捕捉:不仅是工具,更是知识 (4) 4. 外部程序连接:无缝集成到您现有的工具链中 (4) 二、Maple在微分方程中的应用 (5) 1、常用函数 (5) 1)求解常微分方程的命令dsolve. (5) 2)求解一阶线性常微分方程的命令linearsol. (5) 3)偏微分方程求解命令pdsolve. (6) 2、方法 (6) 1)一阶常微分方程的解法 (6) 2)二阶线性常微分方程的解法 (7) 3、作图 (8) 1)常微分方程数值解作图命令odeplot (8) 2)偏微分方程作图命令PDEplot (8) 三、各种方程的求解 (8) 第一部分:一阶常微分方程 (8) 1、可分离变量方程 (8) 2、齐次方程 (9) 3、线性方程 (10) 4、Bernoulli方程 (10) 第二部分:二阶线性常微分方程 (11) 1、二阶常系数线性齐次方程 (11) 2、二阶常系数线性非齐次方程 (12) 3、Euler方程(变系数) (12) 第三部分:偏微分方程 (13) 1、波动方程 (13) 2、热传导方程 (14) 3、作图 (14) 四、总结 (15)

一、简介 概况: Maple是目前世界上最为通用的数学和工程计算软件之一,在数学和科学领域享有盛誉,有“数学家的软件”之称。Maple 在全球拥有数百万用户,被广泛地应用于科学、工程和教育等领域,用户渗透超过96%的世界主要高校和研究所,超过81%的世界财富五百强企业。 Maple系统内置高级技术解决建模和仿真中的数学问题,包括世界上最强大的的符号计算、无限精度数值计算、创新的互联网连接、强大的4GL语言等,内置超过5000个计算命令,数学和分析功能覆盖几乎所有的数学分支,如微积分、微分方程、特殊函数、线性代数、图像声音处理、统计、动力系统等。 Maple不仅仅提供编程工具,更重要的是提供数学知识。Maple是教授、研究员、科学家、工程师、学生们必备的科学计算工具,从简单的数字计算到高度复杂的非线性问题,Maple都可以帮助您快速、高效地解决问题。用户通过Maple产品可以在单一的环境中完成多领域物理系统建模和仿真、符号计算、数值计算、程序设计、技术文件、报告演示、算法开发、外部程序连接等功能,满足各个层次用户的需要,从高中学生到高级研究人员。 Maple 主要技术特征: 1. 强大的求解器:数学和分析软件的领导者 ★内置超过5000个符号和数值计算命令,覆盖几乎所有的数学领域,如微积分,线性代数,方程求解,积分和离散变换,概率论和数理统计,物理,图论,张量分析,微分和解析几何,金融数学,矩阵计算,线性规划,组合数学,矢量分析,抽象代数,泛函分析,数论,复分析和实分析,抽象代数,级数和积分变换,特殊函数,编码和密码理论,优化等。 ★各种工程计算:优化,统计过程控制,灵敏度分析,动力系统设计,小波分析,信号处理,控制器设计,集总参数分析和建模,各种工程图形等。 ★提供世界上最强大的符号计算和高性能数值计算引擎,包括世界上最强大的微分方程求解器(ODEs,PDEs,高指数DAEs)。 ★智能自动算法选择。 ★强大、灵活、容易使用的编程语言,让您能够开发更复杂的模型或算法。

Maple中的微分代数方程求解

Part10:Maple中的微分代数方程求解 西希安工程模拟软件(上海)有限公司,2008 10.0 Maple中的微分方程求解器介绍 Maple中微分方程求解器使用领先的算法求解以下问题: 常微分方程 (ODEs): dsolve 命令用于求解线性和非线性ODEs, 初始值问题 (IVP), 以及边界值问题 (BVP),可以通过参数项选择求符号解 (解析解) 或数值解。ODE Analyzer Assistant 微分方程分析器助手提供一个交互式用户界面方便用户求解 ODE 以及显示结果的图形。了解更多信息,参考帮助系统中的 dsolve, dsolve/numeric, 和 ODE Analyzer. 偏微分方程 (PDEs): pdsolve 命令用于求 PDEs 和含边界值问题的 PDEs 的符号解或数值解。使用Maple的PDE工具可以完成对PDE系统的结构分析和指数降阶处理。了解更多信息,参考帮助系统中的 pdsolve and pdsolve/numeric. 微分-代数方程 (DAEs): dsolve/numeric 命令是符号-数值混合求解器,使用符号预处理和降阶技术,让Maple能够求解高指数的DAE问题。Maple内置三个求解器用于处理DAEs:1)修正的 Runge-Kutta Fehlberg 方法,2)Rosenbrock 方法,以及 3)修正的拓展后向差分隐式方法。 10.1 Maple中的微分代数方程(DAEs) 更多亮点: 大部分情况下,通过识别是否存在因变量的纯代数方程,dsolve命令可以判断给定的问题是否是微分代数方程,而不是常微分方程。如果输入是一个不含有纯代数方程的微分代数方程,使用solve求解时需要用method参数指定对象是一个微分代数方程。 dsolve 有三种数值方法求解DAEs。默认的 DAE IVP 方法是 modified Runge-Kutta Fehlberg method (rkf45_dae),另两个方法是 rosenbrock_dae 和 Modified Extended Backward-Differentiation Implicit method (mebdfi),可以通过 method 参数项指定。 Maple 的ODE数值求解器和DAE IVP(初值问题)求解器可以处理用户自定义事件。 关于求解DAEs的更多信息,请参考帮助 dsolve/numeric 和 dsolve/numeric/DAE.

Maple使用之要素习得

Maple使用之要素习得 . 教程简介 第一 数值计算 节: 第二 代数运算 节: 第三 图像 节: 第四 解方程 节: 第五 函数:定义、求值、作图节: 第六 更多关于图像 节: 实践问题

Maple 快速参考卡 工作表界面注释 教程目录 本教程由Mike Pepe设计,他对有效使用Maple所必需的基本命令给出了精辟的介绍。以下的六节内容将带领你进入Maple的世界,你不妨亲自动手实践体验Maple的滋味。 说明:本教程针对初等数学水平,不需用户据有微积分基础,但不失为接触微积分的好帮手。 本教程的每节都有如下部分: ?例 : 一组短小、完整解决的例子,用以说明新命令。 ?练习:基于本节内容的短小练习,后面附有答案用以检查结果。 1-6节之后是实践问题。这些问题将提供一个使用本教程中全部命令的机会。完成这部分问题后,你已经为在数学课中高效使用Maple做好了准备。 在本教程结尾你将发现一个名为“快速参考卡”的部分,它列出了本教程中你学到的Maple命令及使用格式以便参考。

本教程着眼于基本的Maple命令,工作表界面的细节问题请参阅本教程最后一节:工作表界面说 第一节:数值计算 o精确算术运算 o用evalf()函数做数值近似 ?练习 1.1 ?答案 1.1 ?练习 1.2 ?答案 1.2 ?练习 1.3 ?答案 1.3 ?练习 1.4 ?答案 1.4 o清除变量 第一节:数值计算 本节将用Maple做一些标准的数值计算。我们将看到Maple提供精确结果和数值近似的能力为我们解决问题带来更大灵活性。 精确算术运算 使用Maple进行数值运算是一件直截了当的事,只需输入数值表达式并以英文分号;为结尾,再按回车经计算结果在下行居中显示. 例 1: > 2+4;

微分方程的maple求解

1、常用函数 1)求解常微分方程的命令dsolve. dsolve(常微分方程) dsolve(常微分方程,待解函数,选项) dsolve({常微分方程,初值},待解函数,选项) dsolve({常微分方程组,初值},{待解函数},选项) 其中选项设置解得求解方法和解的表示方式。求解方法有type=formal_series(形式幂级数解)、type=formal_solution(形式解)、type=numeric(数值解)、type=series(级数解)、method=fourier(通过Fourier变换求解)、method=laplace(通过Laplace变换求解)等。解的表示方式有explicit(显式)、implicit(隐式)、parametric(参数式)。当方程比较复杂时,要想得到显式解通常十分困难,结果也会相当复杂。这时,方程的隐式解更为有用,一般也要简单得多。dsolve为标准库函数。 2)求解一阶线性常微分方程的命令linearsol. 在Maple中求解一阶线性方程既可以用dsolve函数求解,也可以用Detools函数包中的linearsol函数求解。linearsol是专门求解线性微分方程的命令,使用格式为: linearsol(线性方程,待解函数) linearsol的返回值为集合形式的解。 3)偏微分方程求解命令pdsolve. pdsolve(偏微分方程,待解变量,选项) pdsolve(偏微分方程,初值或边界条件,选项) pdsolve为标准库函数,可直接使用。 如果求解成功,将得到几种可能结果: 方程的通解; 拟通解(包含有任意函数,但不足以构造通解); 一些常微分方程的集合;

Maple解方程组有哪些算法

Maple解方程组有哪些算法 勿庸质疑Maple符号计算功能是非常强大的,因此Maple能够进行大量的复杂运算。这些复杂运算中会用到不同的算法,那么Maple是怎么解方程组的呢? 更多Maple常见命令和基本操作介绍请访问Maple中文版网站。 Maple可以解决很多方程和方程组的问题,在这个过程中Maple会使用很多不同的技术: 1.在封闭解时使用符号方法 2.在近似解时使用数值方法 3.混合符号和数值算法共同运用事业解决那些单独使用其中一种无法解决的问题。 Maple启动界面示例 在需要精确的、封闭解的情况下使用符号运算 Maple的符号求解器使用状态算法来解决代数方程问题,包括运用F4算法来计算Gr?bner 和三角集合来分解算法。 在Maple中你可以: 解方程和方程组; 解不等式和不等式组; 对多种类型的参数方程和不等式找到约束解。 使用普通变量或者函数作为未知量。当未知量是一个函数时,Maple返回出一个可以解方程的函数。 求解恒等式、参数方程、非线性系统和级数。 控制解的形式。 近似解时使用数值方法: 在寻找方程的近似解时,Maple的数值求解器使用工业标准技术,包括集成数值算法组(NAG)中的求解器。 使用Maple你可以: 解方程和方程组; 设置在运算过程上使用数值的位数;

指定初始值; 指定一个解的区间; 指定你正在寻找的真正的根或者复杂的根; 对有一个变量的多项式方程返回出来有限个数的解。 混合方法: 除了单独使用标准的数值技术之外,Maple还可以通过使用混合符号-数值的方法来拓展数值求解器的能力和速度。 如果一个问题在某种形式下无法使用标准数值或符号方法来求解,Maple就会象征性地尝试将问题转换成一个可以用数值方法求解的等价形式。 混合技术也可以用来对数值求解器中选择近似初始值,这样可以使它们更快得出答案。 这种混合运算的方法已经被完全集成到数值求解器的算法中了,在需要时会自动应用。 其他求解器 除了对代数方程的常规求解方法外,对于微分方程、代数微分方程、整数方程、整数取余方程、递推方程、级数解和q差分方程等,Maple还有很多包括常规解法在内的专业门的求解方法。 以上内容是对Maple解方程时所用到的算法的介绍,Maple在计算时使用的符号计算系统能够解决很多复杂的数学计算精确且迅速。欢迎访问Maple中文版网站获取最新版Maple 2015下载地址。

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 的余数, 并将商赋给q iquo(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); true 3) 确定第i 个素数(ithprime)

微分方程求解

微分方程的求解 ----基于Maple工具一、Maple工具简介 Maple是加拿大滑铁卢大学(Waterloo University)研制的一种计算机代数系统。经过近20年的不断发展,数学软件Maple已成为当今世界上最优秀的几个数学软件之一,它以良好的使用环境、强有力的符号计算能力、高精度的数字计算、灵活的图形显示和高效的可编程功能,为越来越多的教师、学生和科研人员所喜爱,并成为他们进行数学处理的工具。可以容易的运用Maple软件解决微积分、解析几何、线性代数、微分方程、计算方法、概率统计等数学分支中的常见的计算问题。1980 年9月,加拿大Waterloo大学的符号计算研究小组成立,开始了符号计算在计算机上实现的研究项目。数学软件Maple是这个项目的产品。目前,这仍是一个正在研究的项目。Maple的第一个商业版本Maple3.3是1985年出版的。随着几经更新,Maple被广泛的使用,得到越来越多的用户。 Maple 软件主要由三部分组成:用户界面(Iris),代数运算器(kernel),外部函数库(External library)。用户界面和代数运算器是用C语言写的,只占整个软件的一小部分,当系统启动时,即被装入。Iris负责输入命令和算式的初步处理、显示结果、函数图像的显示等。Kernel负责输入的编译、基本的代数运算,如有理数运算、初等代数运算,还负责内存管理。Maple的大部分数学函数

和过程是用Maple自身的语言写成的,存于外部函数库中。当一个函数调用时,在多数情况下,Maple会自动将该函数的过程调入内存,一些不常用的函数才需要用户自己将它们调入。另外有一些特别的函数包也需要用户自己调入,如线性代数包、统计包,这使得Maple 在资源的利用上具有很大的优势,只有最有用的东西才留住内存,这是Maple可以在较小内存的计算机上正常运行的原因。 Maple不仅仅提供编程工具,更重要的是提供数学知识。用户在直观的文档计算环境中完成各种数学问题,无限精度的计算消除了计算误差。Maple是教授、研究员、科学家、工程师、学生们必备的科学计算工具,从简单的数字计算到高度复杂的非线性问题,Maple 都可以帮助您快速、高效地解决问题。用户可在单一的环境中完成多领域建模和模拟,符号计算、数值计算、程序设计、技术文件、报告演示、算法开发、与外部程序连接等功能,满足各个层次用户的需要,从高中学生到高级研究人员。 Maple 有三大关键特征:数学引擎、操作简单、外部连接性。 数学引擎:Mathematics=Maplesoft !解决数学问题时,世界上没有任何其他软件比Maple更完整、更好。 操作简单:Maple人性化的界面让用户只需要按几个键就可以解决大量复杂的计算问题,Maple的文件模式界面可以创建多样化的、专业级的技术文件,并可以自由转换为其他格式的文件,如Latex/html/word等。 外部连接性:Maple 的程序可以自动转换为其他语言代码,如

相关文档
最新文档