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

合集下载

数学软件Maple使用教程

数学软件Maple使用教程

数学软件Maple使⽤教程数学实验数学软件Maple使⽤教程序⾔⼀.什么是数学实验?我们都熟悉物理实验和化学实验,就是利⽤仪器设备,通过实验来了解物理现象、化学物质等的特性。

同样,数学实验也是要通过实验来了解数学问题的特性并解决对应的数学问题。

过去,因为实验设备和实验⼿段的问题,⽆法解决数学上的实验问题,所以,⼀直没有听说过数学实验这个词。

随着计算机的飞速发展,计算速度越来越快,软件功能也越来越强,许多数学问题都可以由计算机代替完成,也为我们⽤实验解决数学问题提供了可能。

数学实验就是以计算机为仪器,以软件为载体,通过实验解决实际中的数学问题。

⼆.常⽤的数学软件⽬前较流⾏的数学软件主要有四种:1.MathACD其优点是许多数学符号键盘化,通过键盘可以直接输⼊数学符号,在教学⽅⾯使⽤起来⾮常⽅便。

缺点是⽬前仅能作数值运算,符号运算功能较弱,输出界⾯不好。

2.Matlab优点是⼤型矩阵运算功能⾮常强,构造个⼈适⽤函数⽅便很⽅便,因此,⾮常适合⼤型⼯程技术中使⽤。

缺点是输出界⾯稍差,符号运算功能也显得弱⼀些。

不过,在这个公司购买了Maple公司的内核以后,符号运算功能已经得到了⼤⼤的加强。

再⼀个缺点就是这个软件太⼤,按现在流⾏的版本5.2,⾃⾝有400多兆,占硬盘空间近1个G,⼀般稍早些的计算机都安装部下。

我们这次没⽤它主要就是这个原因。

3.Mathematica其优点是结构严谨,输出界⾯好,计算功能强,是专业科学技术⼈员所喜爱的数学软件。

缺点是软件本⾝较⼤,⽬前流⾏的3.0版本有200兆;另⼀个缺点就是命令太长,每⼀个命令都要输⼊英⽂全名,因此,需要英语⽔平较⾼。

4.Maple优点是输出界⾯很好,与我们平常书写⼏乎⼀致;还有⼀个最⼤的优点就是它的符号运算功能特别强,这对于既要作数值运算,⼜要作符号运算时就显得⾮常⽅便了。

除此之外,其软件只有30兆,安装也很⽅便(直接拷贝就可以⽤)。

所以,我们把它放到学校⽹上直接调⽤。

微分方程的maple求解

微分方程的maple求解

微分⽅程的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为标准库函数,可直接使⽤。

如果求解成功,将得到⼏种可能结果:⽅程的通解;拟通解(包含有任意函数,但不⾜以构造通解);⼀些常微分⽅程的集合;2、⽅法1)⼀阶常微分⽅程的解法a 分离变量法 I 直接分离变量法。

如()()dyf xg y dx=,⽅程右端是两个分别只含x 或y 的函数因式乘积,其通解为()()dyf x dx Cg y =+?。

Maple常用计算命令

Maple常用计算命令

常用计算命令《Maple 指令》7.0版本第1章章数1.1 复数Re,Im - 返回复数型表达式的实部/虚部abs - 绝对值函数argument - 复数的幅角函数conjugate - 返回共轭复数csgn - 实数和复数表达式的符号函数signum - 实数和复数表达式的sign 函数51.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, cosconvert/Ei - 转换为指数积分convert/exp - 将trig 函数转换为指数函数convert/ln - 将arctrig 转换为对数函数polar - 转换为极坐标形式convert/radians - 将度转换为弧度convert/sincos - 将trig 函数转换为sin, cos, sinh, cosh convert/tan - 将trig 函数转换为tanconvert/trig - 将指数函数转换为三角函数和双曲函数第3章求值3.1 假设功能3.2 求值Eval - 对一个表达式求值eval - 求值evala - 在代数数(或者函数)域求值evalb - 按照一个布尔表达式求值evalc - 在复数域上符号求值evalf - 使用浮点算法求值evalhf - 用硬件浮点数算法对表达式求值evalm - 对矩阵表达式求值evaln - 求值到一个名称evalr, shake - 用区间算法求表达式的值和计算范围evalrC - 用复数区间算法对表达式求值value - 求值的惰性函数第4章求根,解方程4.1 数值解fsolve - 利用浮点数算法求解solve/floats - 包含浮点数的表达式4.2 最优化extrema - 寻找一个表达式的相对极值minimize, maximize - 计算最小值/最大值maxnorm - 一个多项式无穷大范数4.3 求根allvalues -计算含有RootOfs的表达式的所有可能值isqrt, iroot - 整数的平方根/第n 次根realroot - 一个多项式的实数根的隔离区间root - 一个代数表达式的第n 阶根RootOf - 方程根的表示surd - 非主根函数roots - 一个多项式对一个变量的精确根turm, sturmseq - 多项式在区间上的实数根数和实根序列4.4 解方程eliminate - 消去一个方程组中的某些变量isolve - 求解方程的整数解solvefor - 求解一个方程组的一个或者多个变量isolate - 隔离一个方程左边的一个子表达式singular - 寻找一个表达式的极点solve/identity - 求解包含属性的表达式solve/ineqs - 求解不等式solve/linear - 求解线性方程组solve/radical - 求解含有未知量根式的方程solve/scalar - 标量情况(单变量和方程)solve/series - 求解含有一般级数的方程solve/system - 解方程组或不等式组第5章操作表达式5.1 处理表达式Norm - 代数数 (或者函数) 的标准型Power - 惰性幂函数Powmod -带余数的惰性幂函数Primfield - 代数域的原始元素Trace - 求一个代数数或者函数的迹charfcn - 表达式和集合的特征函数Indets - 找一个表达式的变元invfunc - 函数表的逆powmod - 带余数的幂函数Risidue - 计算一个表达式的代数余combine - 表达式合并(对tan,cot不好用)expand - 表达式展开Expand - 展开表达式的惰性形式expandoff/expandon - 抑制/不抑制函数展开5.2 因式分解Afactor - 绝对因式分解的惰性形式Afactors - 绝对因式分解分解项列表的惰性形式Berlekamp - 因式分解的Berlekamp 显式度factor - 多元的多项式的因式分解factors - 多元多项式的因式分解列表Factor - 函数factor 的惰性形式Factors - 函数factors 的惰性形式polytools[splits] - 多项式的完全因式分解第6章化简6.1 表达式化简118simplify - 给一个表达式实施化简规则simplify/@ - 利用运算符化简表达式simplify/Ei - 利用指数积分化简表达式simplify/GAMMA - 利用GAMMA 函数进行化简simplify/RootOf - 用RootOf 函数化简表达式simplify/wronskian - 化简含wronskian 标识符的表达式simplify/hypergeom - 化简超越函数表达式simplify/ln - 化简含有对数的表达式simplify/piecewise - 化简分段函数表达式simplify/polar - 化简含有极坐标形式的复数型表达式simplify/power - 化简含幂次的表达式simplify/radical - 化简含有根式的表达式simplify/rtable - 化简rtable 表达式simplify/siderels - 使用关系式进行化简simplify/sqrt - 根式化简simplify/trig - 化简trig 函数表达式simplify/zero - 化简含嵌入型实数和虚数的复数表达式6.2 其它化简操作Normal - normal 函数的惰性形式convert - 将一个表达式转换成不同形式radnormal - 标准化一个含有根号数的表达式rationalize - 分母有理化第7章操作多项式7.0 MAPLE 中的多项式简介7.1 提取coeff - 提取一个多项式的系数coeffs - 提取多元的多项式的所有系数coeftayl - 多元表达式的系数lcoeff, tcoeff - 返回多元多项式的首项和末项系数7.2 多项式约数和根gcd, lcm - 多项式的最大公约数/最小公倍数psqrt, proot - 多项式的平方根和第n次根rem,quo - 多项式的余数/商7.3 操纵多项式convert/horner - 将一个多项式转换成Horner形式collect - 象幂次一样合并系数compoly - 确定一个多项式的可能合并的项数convert/polynom - 将级数转换成多项式形式convert/mathorner - 将多项式转换成Horner矩阵形式convert/ratpoly - 将级数转换成有理多项式sort - 将值的列表或者多项式排序sqrfree - 不含平方项的因数分解函数discrim - 多项式的判别式fixdiv - 计算多项式的固定除数norm - 多项式的标准型resultant - 计算两个多项式的终结式bernoulli - Bernoulli 数和多项式bernstein - 用Bernstein多项式近似一个函数content, primpart - 一个多元的多项式的内容和主部degree, ldegree - 一个多项式的最高次方/最低次方divide - 多项式的精确除法euler - Euler 数和多项式icontent - 多项式的整数部分interp - 多项式的插值prem, sprem - 多项式的pseudo 余数和稀疏pseudo 余数randpoly - 随机多项式生成器spline - 计算自然样条函数第8章有理表达式8.0 有理表达式简介8.1 操作有理多项式numer,denom - 返回一个表达式的分子/分母frontend - 将一般的表达式处理成一个有理表达式normal - 标准化一个有理表达式convert/parfrac - 转换为部分分数形式convert/rational - 将浮点数转换为接近的有理数ratrecon - 重建有理函数第9章微积分9.1 取极限Limit, limit - 计算极限limit[dir] - 计算方向极限limit[multi] - 多重方向极限limit[return] - 极限的返回值9.2 连续性测试discont - 寻找一个函数在实数域上的间断点fdiscont - 用数值法寻找函数在实数域上的间断点iscont - 测试在一个区间上的连续性D - 微分算子D, diff - 运算符D 和函数diffdiff, Diff - 微分或者偏微分convert/D - 将含导数表达式转换为D运算符表达式convert/diff - 将D(f)(x)表达式转换为diff(f(x),x)的形式implicitdiff - 由一个方程定义一个函数的微分9.4 积分计算Si, Ci … - 三角和双曲积分Dirac, Heaviside - Dirac 函数/Heaviside阶梯函数Ei - 指数积分Elliptic - 椭圆积分FresnelC, … - Fresnel 正弦,余弦积分和辅助函数int, Int - 定积分和不定积分LegendreP, … - Legendre 函数及其第一和第二类函数Li - 对数积分student[changevar] - 变量代换dawson - Dawson 积分ellipsoid - 椭球体的表面积evalf(int) - 数值积分intat, Intat - 在一个点上积分求值第10章微分方程10.1 微分方程分类odeadvisor - ODE-求解分析器DESol - 表示微分方程解的数据结构pdetest - 测试pdsolve 能找到的偏微分方程(PDEs)解10.2 常微分方程求解dsolve - 求解常微方程 (ODE)dsolve - 用给定的初始条件求解ODE 问题dsolve/inttrans - 用积分变换方法求解常微分方程dsolve/numeric - 常微方程数值解dsolve/piecewise - 带分段系数的常微方程求解dsolve - 寻找ODE 问题的级数解dsolve - 求解ODEs 方程组odetest - 从ODE 求解器中测试结果是显式或者隐式类型10.3 偏微分方程求解pdsolve - 寻找偏微分方程 (PDEs) 的解析解第11章数值计算11.1 MAPLE 中的数值计算环境IEEE 标准和Maple数值计算数据类型特殊值环境变量11.2 算法标准算法复数算法含有0,无穷和未定义数的算法11.3 数据构造器254complex - 复数和复数构造器Float, … - 浮点数及其构造器Fraction - 分数及其的构造器integer - 整数和整数构造器11.4 MATLAB 软件包简介11.5 “”区间类型表达式第12章级数12.1 幂级数的阶数Order - 阶数项函数order - 确定级数的截断阶数12.2 常见级数展开series - 一般的级数展开taylor - Taylor 级数展开mtaylor - 多元Taylor级数展开poisson - Poisson级数展开.26812.3 其它级数eulermac - Euler-Maclaurin求和piecewise - 分段连续函数asympt - 渐进展开第13章特殊函数AiryAi, AiryBi - Airy 波动函数AiryAiZeros, AiryBiZeros - Airy函数的实数零点AngerJ, WeberE - Anger函数和Weber函数BesselI, HankelH1, … - Bessel函数和Hankel函数BesselJZeros, … - Bessel函数实数零点Beta - Beta函数EllipticModulus - 模数函数k(q)GAMMA, lnGAMMA - 完全和不完全Gamma函数GaussAGM - Gauss 算术的几何平均数JacobiAM, ., - Jacobi 振幅函数和椭圆函数JacobiTheta1, JacobiTheta4 - Jacobi theta函数JacobiZeta - Jacobi 的Zeta函数KelvinBer, KelvinBei - Kelvin函数KummerM, - Kummer M函数和U函数LambertW - LambertW函数LerchPhi - 一般的Lerch Phi函数LommelS1, LommelS2 - Lommel函数MeijerG - 一个修正的Meijer G函数Psi - Digamma 和Polygamma函数StruveH, StruveL - Struve函数WeierstrassP - Weierstrass P函数及其导数WhittakerM - Whittaker 函数Zeta - Zeta 函数erf, … - 误差函数,补充的误差函数和虚数误差函数harmonic - 调和函数hypergeom - 广义的超越函数pochhammer - 一般的pochhammer函数polylog - 一般的polylogarithm函数第14章线性代数14.1 ALGEBRA(代数)中矩阵,矢量和数组14.2 LINALG 软件包简介14.3 数据结构矩阵matrices(小写)矢量vectors(矢量)convert/matrix - 将数组,列表,Matrix 转换成matrixconvert/vector - 将列表,数组或Vector 转换成矢量vector linalg[matrix] - 生成矩阵matrix(小写)linalg[vector] - 生成矢量vector(小写)14.4 惰性函数Det - 惰性行列式运算符Eigenvals - 数值型矩阵的特征值和特征向量Hermite, Smith - 矩阵的Hermite 和Smith 标准型14.5 LinearAlgebra函数Matrix 定义矩阵Add 加/减矩阵Adjoint 伴随矩阵BackwardSubstitute 求解 A . X = B,其中 A 为上三角型行阶梯矩阵BandMatrix 带状矩阵Basis 返回向量空间的一组基SumBasis 返回向量空间直和的一组基IntersectionBasis 返回向量空间交的一组基BezoutMatrix 构造两个多项式的 Bezout 矩阵BidiagonalForm 将矩阵约化为双对角型CharacteristicMatrix 构造特征矩阵CharacteristicPolynomial 构造矩阵的特征多项式CompanionMatrix 构造一个首一(或非首一)多项式或矩阵多项式的友矩阵(束)ConditionNumber 计算矩阵关于某范数的条件数ConstantMatrix 构造常数矩阵ConstantVector 构造常数向量Copy 构造矩阵或向量的一份复制CreatePermutation 将一个 NAG 主元向量转换为一个置换向量或矩阵CrossProduct 向量的叉积`&x` 向量的叉积DeleteRow 删除矩阵的行DeleteColumn 删除矩阵的列Determinant 行列式Diagonal 返回从矩阵中得到的向量序列DiagonalMatrix 构造(分块)对角矩阵Dimension 行数和列数DotProduct 点积BilinearForm 向量的双线性形式EigenConditionNumbers 计算数值特征值制约问题的特征值或特征向量的条件数Eigenvalues 计算矩阵的特征值Eigenvectors 计算矩阵的特征向量Equal 比较两个向量或矩阵是否相等ForwardSubstitute 求解 A . X = B,其中 A 为下三角型行阶梯矩阵FrobeniusForm 将一个方阵约化为 Frobenius 型(有理标准型)GaussianElimination 对矩阵作高斯消元ReducedRowEchelonForm 对矩阵作高斯-约当消元GetResultDataType 返回矩阵或向量运算的结果数据类型GetResultShape 返回矩阵或向量运算的结果形状GivensRotationMatrix 构造 Givens 旋转的矩阵GramSchmidt 计算一个正交向量集HankelMatrix 构造一个 Hankel 矩阵HermiteForm 计算一个矩阵的 Hermite 正规型HessenbergForm 将一个方阵约化为上 Hessenberg 型HilbertMatrix 构造广义 Hilbert 矩阵HouseholderMatrix 构造 Householder 反射矩阵IdentityMatrix 构造一个单位矩阵IsDefinite 检验矩阵的正定性,负定性或不定性IsOrthogonal 检验矩阵是否正交IsUnitary 检验矩阵是否为酉矩阵IsSimilar 确定两个矩阵是否相似JordanBlockMatrix 构造约当块矩阵JordanForm 将矩阵约化为约当型KroneckerProduct 构造两个矩阵的 Kronecker 张量积LeastSquares 方程的最小二乘解LinearSolve 求解线性方程组 A . x = bLUDecomposition 计算矩阵的 Cholesky,PLU 或 PLU1R 分解Map 将一个程序映射到一个表达式上,对矩阵和向量在原位置上进行处理MatrixAdd 计算两个矩阵的线性组合VectorAdd 计算两个向量的线性组合MatrixExponential 确定一个矩阵 A 的矩阵指数 exp(A)MatrixFunction 确定方阵 A 的函数 F(A)MatrixInverse 计算方阵的逆或矩阵的 Moore-Penrose 伪逆MatrixMatrixMultiply 计算两个矩阵的乘积MatrixVectorMultiply 计算一个矩阵和一个列向量的乘积VectorMatrixMultiply 计算一个行向量和一个矩阵的乘积MatrixPower 矩阵的幂MinimalPolynomial 构造矩阵的最小多项式Minor 计算矩阵的子式Multiply 矩阵相乘Norm 计算矩阵或向量的p-范数MatrixNorm 计算矩阵的p-范数VectorNorm 计算向量的p-范数Normalize 向量正规化NullSpace 计算矩阵的零度零空间OuterProductMatrix 两个向量的外积Permanent 方阵的不变量Pivot 矩阵元素的主元消去法PopovForm Popov 正规型QRDecomposition QR 分解RandomMatrix 构造随机矩阵RandomVector 构造随机向量Rank 计算矩阵的秩Row 返回矩阵的一个行向量序列Column 返回矩阵的一个列向量序列RowOperation 对矩阵作初等行变换ColumnOperation 对矩阵作出等列变换RowSpace 返回矩阵行空间的一组基ColumnSpace 返回矩阵列空间的一组基ScalarMatrix 构造一个单位矩阵的数量倍数ScalarVector 构造一个单位向量的数量倍数ScalarMultiply 矩阵与数的乘积MatrixScalarMultiply 计算矩阵与数的乘积VectorScalarMultiply 计算向量与数的乘积SchurForm 将方阵约化为 Schur 型SingularValues 计算矩阵的奇异值SmithForm 将矩阵约化为 Smith 正规型StronglyConnectedBlocks 计算方阵的强连通块SubMatrix 构造矩阵的子矩阵SubVector 构造向量的子向量SylvesterMatrix 构造两个多项式的 Sylvester 矩阵ToeplitzMatrix 构造 Toeplitz 矩阵Trace 计算方阵的迹Transpose 转置矩阵HermitianTranspose 共轭转置矩阵TridiagonalForm 将方阵约化为三对角型UnitVector 构造单位向量VandermondeMatrix 构造一个 Vandermonde 矩阵VectorAngle 计算两个向量的夹角ZeroMatrix 构造一个零矩阵ZeroVector 构造一个零向量Zip 将一个具有两个参数的程序作用到一对矩阵或向量上LinearAlgebra[Generic] 子函数包 [Generic] 子函数包提供作用在场,欧几里得域,积分域和环上的线性代数算法。

Maple常用计算命令

Maple常用计算命令

Maple常用计算命令常用计算命令《Maple 指令》7.0版本第1章章数1.1 复数Re,Im - 返回复数型表达式的实部/虚部abs - 绝对值函数argument - 复数的幅角函数conjugate - 返回共轭复数csgn - 实数和复数表达式的符号函数signum - 实数和复数表达式的sign 函数51.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, cosconvert/Ei - 转换为指数积分convert/exp - 将trig 函数转换为指数函数convert/ln - 将arctrig 转换为对数函数polar - 转换为极坐标形式convert/radians - 将度转换为弧度convert/sincos - 将trig 函数转换为sin, cos, sinh, cosh convert/tan - 将trig 函数转换为tanconvert/trig - 将指数函数转换为三角函数和双曲函数第3章求值3.1 假设功能3.2 求值Eval - 对一个表达式求值eval - 求值evala - 在代数数(或者函数)域求值evalb - 按照一个布尔表达式求值evalc - 在复数域上符号求值evalf - 使用浮点算法求值evalhf - 用硬件浮点数算法对表达式求值evalm - 对矩阵表达式求值evaln - 求值到一个名称evalr, shake - 用区间算法求表达式的值和计算范围evalrC - 用复数区间算法对表达式求值value - 求值的惰性函数第4章求根,解方程4.1 数值解fsolve - 利用浮点数算法求解solve/floats - 包含浮点数的表达式4.2 最优化extrema - 寻找一个表达式的相对极值minimize, maximize - 计算最小值/最大值maxnorm - 一个多项式无穷大范数4.3 求根allvalues -计算含有RootOfs的表达式的所有可能值isqrt, iroot - 整数的平方根/第n 次根realroot - 一个多项式的实数根的隔离区间root - 一个代数表达式的第n 阶根RootOf - 方程根的表示surd - 非主根函数roots - 一个多项式对一个变量的精确根turm, sturmseq - 多项式在区间上的实数根数和实根序列4.4 解方程eliminate - 消去一个方程组中的某些变量isolve - 求解方程的整数解solvefor - 求解一个方程组的一个或者多个变量isolate - 隔离一个方程左边的一个子表达式singular - 寻找一个表达式的极点solve/identity - 求解包含属性的表达式solve/ineqs - 求解不等式solve/linear - 求解线性方程组solve/radical - 求解含有未知量根式的方程solve/scalar - 标量情况(单变量和方程)solve/series - 求解含有一般级数的方程solve/system - 解方程组或不等式组第5章操作表达式5.1 处理表达式Norm - 代数数 (或者函数) 的标准型Power - 惰性幂函数Powmod -带余数的惰性幂函数Primfield - 代数域的原始元素Trace - 求一个代数数或者函数的迹charfcn - 表达式和集合的特征函数Indets - 找一个表达式的变元invfunc - 函数表的逆powmod - 带余数的幂函数Risidue - 计算一个表达式的代数余combine - 表达式合并(对tan,cot不好用)expand - 表达式展开Expand - 展开表达式的惰性形式expandoff/expandon - 抑制/不抑制函数展开5.2 因式分解Afactor - 绝对因式分解的惰性形式Afactors - 绝对因式分解分解项列表的惰性形式Berlekamp - 因式分解的Berlekamp 显式度factor - 多元的多项式的因式分解factors - 多元多项式的因式分解列表Factor - 函数factor 的惰性形式Factors - 函数factors 的惰性形式polytools[splits] - 多项式的完全因式分解第6章化简6.1 表达式化简118simplify - 给一个表达式实施化简规则simplify/@ - 利用运算符化简表达式simplify/Ei - 利用指数积分化简表达式simplify/GAMMA - 利用GAMMA 函数进行化简simplify/RootOf - 用RootOf 函数化简表达式simplify/wronskian - 化简含wronskian 标识符的表达式simplify/hypergeom - 化简超越函数表达式simplify/ln - 化简含有对数的表达式simplify/piecewise - 化简分段函数表达式simplify/polar - 化简含有极坐标形式的复数型表达式simplify/power - 化简含幂次的表达式simplify/radical - 化简含有根式的表达式simplify/rtable - 化简rtable 表达式simplify/siderels - 使用关系式进行化简simplify/sqrt - 根式化简simplify/trig - 化简trig 函数表达式simplify/zero - 化简含嵌入型实数和虚数的复数表达式6.2 其它化简操作Normal - normal 函数的惰性形式convert - 将一个表达式转换成不同形式radnormal - 标准化一个含有根号数的表达式rationalize - 分母有理化第7章操作多项式7.0 MAPLE 中的多项式简介7.1 提取coeff - 提取一个多项式的系数coeffs - 提取多元的多项式的所有系数coeftayl - 多元表达式的系数lcoeff, tcoeff - 返回多元多项式的首项和末项系数7.2 多项式约数和根gcd, lcm - 多项式的最大公约数/最小公倍数psqrt, proot - 多项式的平方根和第n次根rem,quo - 多项式的余数/商7.3 操纵多项式convert/horner - 将一个多项式转换成Horner形式collect - 象幂次一样合并系数compoly - 确定一个多项式的可能合并的项数convert/polynom - 将级数转换成多项式形式convert/mathorner - 将多项式转换成Horner矩阵形式convert/ratpoly - 将级数转换成有理多项式sort - 将值的列表或者多项式排序sqrfree - 不含平方项的因数分解函数discrim - 多项式的判别式fixdiv - 计算多项式的固定除数norm - 多项式的标准型resultant - 计算两个多项式的终结式bernoulli - Bernoulli 数和多项式bernstein - 用Bernstein多项式近似一个函数content, primpart - 一个多元的多项式的内容和主部degree, ldegree - 一个多项式的最高次方/最低次方divide - 多项式的精确除法euler - Euler 数和多项式icontent - 多项式的整数部分interp - 多项式的插值prem, sprem - 多项式的pseudo 余数和稀疏pseudo 余数randpoly - 随机多项式生成器spline - 计算自然样条函数第8章有理表达式8.0 有理表达式简介8.1 操作有理多项式numer,denom - 返回一个表达式的分子/分母frontend - 将一般的表达式处理成一个有理表达式normal - 标准化一个有理表达式convert/parfrac - 转换为部分分数形式convert/rational - 将浮点数转换为接近的有理数ratrecon - 重建有理函数第9章微积分9.1 取极限Limit, limit - 计算极限limit[dir] - 计算方向极限limit[multi] - 多重方向极限limit[return] - 极限的返回值9.2 连续性测试discont - 寻找一个函数在实数域上的间断点fdiscont - 用数值法寻找函数在实数域上的间断点iscont - 测试在一个区间上的连续性D - 微分算子D, diff - 运算符D 和函数diffdiff, Diff - 微分或者偏微分convert/D - 将含导数表达式转换为D运算符表达式convert/diff - 将D(f)(x)表达式转换为diff(f(x),x)的形式implicitdiff - 由一个方程定义一个函数的微分9.4 积分计算Si, Ci … - 三角和双曲积分Dirac, Heaviside - Dirac 函数/Heaviside阶梯函数Ei - 指数积分Elliptic - 椭圆积分FresnelC, … - Fresnel 正弦,余弦积分和辅助函数int, Int - 定积分和不定积分LegendreP, … - Legendre 函数及其第一和第二类函数Li - 对数积分student[changevar] - 变量代换dawson - Dawson 积分ellipsoid - 椭球体的表面积evalf(int) - 数值积分intat, Intat - 在一个点上积分求值第10章微分方程10.1 微分方程分类odeadvisor - ODE-求解分析器DESol - 表示微分方程解的数据结构pdetest - 测试pdsolve 能找到的偏微分方程(PDEs)解10.2 常微分方程求解dsolve - 求解常微方程 (ODE)dsolve - 用给定的初始条件求解ODE 问题dsolve/inttrans - 用积分变换方法求解常微分方程dsolve/numeric - 常微方程数值解dsolve/piecewise - 带分段系数的常微方程求解dsolve - 寻找ODE 问题的级数解dsolve - 求解ODEs 方程组odetest - 从ODE 求解器中测试结果是显式或者隐式类型10.3 偏微分方程求解pdsolve - 寻找偏微分方程 (PDEs) 的解析解第11章数值计算11.1 MAPLE 中的数值计算环境IEEE 标准和Maple数值计算数据类型特殊值环境变量11.2 算法标准算法复数算法含有0,无穷和未定义数的算法11.3 数据构造器254complex - 复数和复数构造器Float, … - 浮点数及其构造器Fraction - 分数及其的构造器integer - 整数和整数构造器11.4 MATLAB 软件包简介11.5 “”区间类型表达式第12章级数12.1 幂级数的阶数Order - 阶数项函数order - 确定级数的截断阶数12.2 常见级数展开series - 一般的级数展开taylor - Taylor 级数展开mtaylor - 多元Taylor级数展开poisson - Poisson级数展开.26812.3 其它级数eulermac - Euler-Maclaurin求和piecewise - 分段连续函数asympt - 渐进展开第13章特殊函数AiryAi, AiryBi - Airy 波动函数AiryAiZeros, AiryBiZeros - Airy函数的实数零点AngerJ, WeberE - Anger函数和Weber函数BesselI, HankelH1, … - Bessel函数和Hankel函数BesselJZeros, … - Bessel函数实数零点Beta - Beta函数EllipticModulus - 模数函数k(q)GAMMA, lnGAMMA - 完全和不完全Gamma函数GaussAGM - Gauss 算术的几何平均数JacobiAM, ., - Jacobi 振幅函数和椭圆函数JacobiTheta1, JacobiTheta4 - Jacobi theta函数JacobiZeta - Jacobi 的Zeta函数KelvinBer, KelvinBei - Kelvin函数KummerM, - Kummer M函数和U函数LambertW - LambertW函数LerchPhi - 一般的Lerch Phi函数LommelS1, LommelS2 - Lommel函数MeijerG - 一个修正的Meijer G函数Psi - Digamma 和Polygamma函数StruveH, StruveL - Struve函数WeierstrassP - Weierstrass P函数及其导数WhittakerM - Whittaker 函数Zeta - Zeta 函数erf, … - 误差函数,补充的误差函数和虚数误差函数harmonic - 调和函数hypergeom - 广义的超越函数pochhammer - 一般的pochhammer函数polylog - 一般的polylogarithm函数第14章线性代数14.1 ALGEBRA(代数)中矩阵,矢量和数组14.2 LINALG 软件包简介14.3 数据结构矩阵matrices(小写)矢量vectors(矢量)convert/matrix - 将数组,列表,Matrix 转换成matrixconvert/vector - 将列表,数组或Vector 转换成矢量vector linalg[matrix] - 生成矩阵matrix(小写)linalg[vector] - 生成矢量vector(小写)14.4 惰性函数Det - 惰性行列式运算符Eigenvals - 数值型矩阵的特征值和特征向量Hermite, Smith - 矩阵的Hermite 和Smith 标准型14.5 LinearAlgebra函数Matrix 定义矩阵Add 加/减矩阵Adjoint 伴随矩阵BackwardSubstitute 求解 A . X = B,其中 A 为上三角型行阶梯矩阵BandMatrix 带状矩阵Basis 返回向量空间的一组基SumBasis 返回向量空间直和的一组基IntersectionBasis 返回向量空间交的一组基BezoutMatrix 构造两个多项式的 Bezout 矩阵BidiagonalForm 将矩阵约化为双对角型CharacteristicMatrix 构造特征矩阵CharacteristicPolynomial 构造矩阵的特征多项式CompanionMatrix 构造一个首一(或非首一)多项式或矩阵多项式的友矩阵(束)ConditionNumber 计算矩阵关于某范数的条件数ConstantMatrix 构造常数矩阵ConstantVector 构造常数向量Copy 构造矩阵或向量的一份复制CreatePermutation 将一个NAG 主元向量转换为一个置换向量或矩阵CrossProduct 向量的叉积`&x` 向量的叉积DeleteRow 删除矩阵的行DeleteColumn 删除矩阵的列Determinant 行列式Diagonal 返回从矩阵中得到的向量序列DiagonalMatrix 构造(分块)对角矩阵Dimension 行数和列数DotProduct 点积BilinearForm 向量的双线性形式EigenConditionNumbers 计算数值特征值制约问题的特征值或特征向量的条件数Eigenvalues 计算矩阵的特征值Eigenvectors 计算矩阵的特征向量。

Maple-ch-常微分方程

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解方程组命令

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。

怎样利用Maple对方程进行求解

怎样利用Maple对方程进行求解

怎样利用Maple对方程进行求解
Maple的运算功能非常强大,在运算时能够解决各种各样的数学问题,对于一般的函数而言能够解决,同样的,也能够对方程进行求解。

下面介绍Maple求解方程的一些命令。

Maple解方程时经常用到下面几个命令:
solve(方程,未知数);fsolve(方程,未知数,选项);解数值解
选项:plex复数域上求根,2.fulldigits保持精度,3.maxsols=n求n个解,4.范围。

一.一元方程(省略“=”号为=0)
二.方程组
三.数值解
四.多项式分解因式、函数展开、合并、化简、转换:
factor(多项式,k),expand(函数),combine(函数),simplify(表达式),convert(表达式,形式,选项),取分子numer(分式),取分母denom(分式)
以上内容向大家介绍了Maple求解方程的常见命令格式,Maple对于一般的函数和方程都能够进行求解,甚至是复杂的方程也能进行求解,Maple符号计算尤其突出,这方面是所有的计算软件都无法比拟的。

Maple中的微分代数方程求解

Maple中的微分代数方程求解

Part10:Maple中的微分代数方程求解西希安工程模拟软件(上海)有限公司,200810.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 参数项指定。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第四章 方程求解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);, + 54a 14 + 25a 28 − 54a 14 + 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 − + 11I 2 = y − − 11I 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 12x > 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 方程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)); + 13()-1n 232n 当然, 并不是所有的递归形式的函数方程的解可以写成解析形式, 如果不能, 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 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可以看出, 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(%);trueevalb 函数的目的是对一个包含关系型运算符的表达式使用三值逻辑系统求值, 返回的值是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 = ∂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 = + ⎛⎝⎜⎜⎞⎠⎟⎟∂∂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⎛⎝⎜⎜⎞⎠⎟⎟∂()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 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 − + − + 14()sin 2t 212t 12t 216t 3124t 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 0t 1g v 0l 2t 31g v 0() + v 02g l l4t 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 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 ⎛⎝⎜⎜⎞⎠⎟⎟∂∂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 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 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 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 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 浮点数向量(一维数组) 指定需要输出函数值的自变量数值点如果给定, 结果是一个22×的矩阵. 元素[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 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;−+ + 11ε217ε435ε6> y(t):> y:=unapply(simplify(y(t),{e^e_order=0}),t): > e:=1:y(t);1037927 552960()sinτ1519540()sinτ()cosτ68132()sinτ()cosτ46180()sinτ()cosτ813256()sinτ()cosτ252579573317760()cosτ355337200()cosτ11912187129600()cosτ77999911105920()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]);:= 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 = ∂∂t ()u ,x t ∂∂2x2()u ,x t> pdsolve(heatPDE,u(x,t));() = ()u ,x t ()_F1x ()_F2t &where ⎡⎣⎢⎢⎤⎦⎥⎥{}, = ∂∂2x2()_F1x _c 1()_F1x = ∂()_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(%);。

相关文档
最新文档