第4章-方程求解(Maple 中文教程)
数学软件Maple使用教程
数学软件Maple使⽤教程数学实验数学软件Maple使⽤教程序⾔⼀.什么是数学实验?我们都熟悉物理实验和化学实验,就是利⽤仪器设备,通过实验来了解物理现象、化学物质等的特性。
同样,数学实验也是要通过实验来了解数学问题的特性并解决对应的数学问题。
过去,因为实验设备和实验⼿段的问题,⽆法解决数学上的实验问题,所以,⼀直没有听说过数学实验这个词。
随着计算机的飞速发展,计算速度越来越快,软件功能也越来越强,许多数学问题都可以由计算机代替完成,也为我们⽤实验解决数学问题提供了可能。
数学实验就是以计算机为仪器,以软件为载体,通过实验解决实际中的数学问题。
⼆.常⽤的数学软件⽬前较流⾏的数学软件主要有四种:1.MathACD其优点是许多数学符号键盘化,通过键盘可以直接输⼊数学符号,在教学⽅⾯使⽤起来⾮常⽅便。
缺点是⽬前仅能作数值运算,符号运算功能较弱,输出界⾯不好。
2.Matlab优点是⼤型矩阵运算功能⾮常强,构造个⼈适⽤函数⽅便很⽅便,因此,⾮常适合⼤型⼯程技术中使⽤。
缺点是输出界⾯稍差,符号运算功能也显得弱⼀些。
不过,在这个公司购买了Maple公司的内核以后,符号运算功能已经得到了⼤⼤的加强。
再⼀个缺点就是这个软件太⼤,按现在流⾏的版本5.2,⾃⾝有400多兆,占硬盘空间近1个G,⼀般稍早些的计算机都安装部下。
我们这次没⽤它主要就是这个原因。
3.Mathematica其优点是结构严谨,输出界⾯好,计算功能强,是专业科学技术⼈员所喜爱的数学软件。
缺点是软件本⾝较⼤,⽬前流⾏的3.0版本有200兆;另⼀个缺点就是命令太长,每⼀个命令都要输⼊英⽂全名,因此,需要英语⽔平较⾼。
4.Maple优点是输出界⾯很好,与我们平常书写⼏乎⼀致;还有⼀个最⼤的优点就是它的符号运算功能特别强,这对于既要作数值运算,⼜要作符号运算时就显得⾮常⽅便了。
除此之外,其软件只有30兆,安装也很⽅便(直接拷贝就可以⽤)。
所以,我们把它放到学校⽹上直接调⽤。
微分方程的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 指令》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 指令》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-常微分方程
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中,解方程组的命令是`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解方程时经常用到下面几个命令:
solve(方程,未知数);fsolve(方程,未知数,选项);解数值解
选项:plex复数域上求根,2.fulldigits保持精度,3.maxsols=n求n个解,4.范围。
一.一元方程(省略“=”号为=0)
二.方程组
三.数值解
四.多项式分解因式、函数展开、合并、化简、转换:
factor(多项式,k),expand(函数),combine(函数),simplify(表达式),convert(表达式,形式,选项),取分子numer(分式),取分母denom(分式)
以上内容向大家介绍了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 参数项指定。
四章节Maple简介
3. 定义函数
• 定义函数的基本方式是: “函数名 := 变量 - > 变量的表达式”
2. Maple的自定义函数
• sqrt(x) 平方根函数 • exp(x), ln(x) 指数函数和自然对数函数 • log[b](x) 以b为底的对数函数 • Abs(x) 绝对值函数 • round(x) 最接近x的整数rand ()12位的随机数 • Max(a,b,c, ),min(a,b,c, ) a, b, c, 中的最
• evalf(expr,n) expr的计算结果含n位数字
• Digits
查看数值的默认位数
• Digits:=n 将数值的默认位数设定为n
2. 整数运算
• ifactor(n)
将整数n分解为素数的乘积
• igcd(m,n,k,…) 求m,n,k, 的最大公约数
• ilcm(m,n,k,…) 求m,n,k, 的最小公倍数
3. 积分运算
• int(expr, x) 求expr对于x的不定积分 • int(expr, x=a..b, ...) 求expr对于x由a到b的
定积分, …为选项 • changevar(s, f, u) 对积分f作变量替换s, u为
新的积分变量 • intparts(f, u) 对积分f作分部积分, u为在udv
• Limit(f(x), x=a, dir ) 求表达式f(x)当x沿方向dir趋于a时的极限
• Limit(f(x,y,…),{x=a,y=b}) 求表达式f(x, y,…)
Maple常用计算命令
常用计算命令《Maple指令》7.0版本第1章章数1.1复数Re,lm -返回复数型表达式的实部/虚部abs - 绝对值函数argume nt - 复数的幅角函数conjugate - 返回共轭复数csgn -实数和复数表达式的符号函数sig num - 实数和复数表达式的sig n函数51.2 MAPLE 常数已知的变量名称指数常数(以自然对数为底)I - x A2 = -1 的根infinity 无穷大1.3整数函数阶乘函数irem, iquo - isprime - isqrfree- max, min -整数的余数/商素数测试无整数平方的因数分解数的最大值/最小值mod, modp, mods - 计算对m 的整数模rand - 随机数生成器ran domize -1.4素数重置随机数生成器Randpoly, Randprime - 有限域的随机多项式/首一素数多项式ithprime - 确定第i个素数n extprime, prevprime - 确定下一个最大/最小素数1.5数的进制转换conv ert/base - conv ert/b inary - conv ert/decimal - conv ert/double - conv ert/float - conv ert/hex - conv ert/metric - 基数之间的转换转换为一进制形式- 转换为10进制将双精度浮点数由一种形式转换为另一种形式转换为浮点数转换为十六进制形式转换为公制单位conv ert/octal - 转换为八进制形式1.6数的类型检查type - 数的类型检查函数第2章初等数学2.1初等函数product - 确定乘积求和不确定乘积exp - 指数函数sum -确定求和不确定求和sqrt - 计算平方根算术运算符+, -, *, /, Aadd, mul - 值序列的加法/乘法2.2三角函数arcs in, arcs in h,.- 反三角函数/反双曲函数sin, sinh,.- 三角函数/双曲函数2.3 LOGARITHMS 函数dilog - Dilogarithm 函数ln, log, log10 - 自然对数/ 一般对数,常用对数2.4类型转换convert/'+',convert/'*' - 转换为求和/ 乘积conv ert/hypergeom - 将求和转换为超越函数con vert/degrees - 将弧度转换为度conv ert/exps in cos - 将trig 函数转换为exp, si n, cos conv ert/Ei - 转换为指数积分convert/exp - 将trig 函数转换为指数函数convert/ln - 将arctrig 转换为对数函数polar - 转换为极坐标形式conv ert/radia ns - 将度转换为弧度conv ert/s in cos - 将trig 函数转换为sin, cos, sinh, cosh convert/tan - 将trig 函数转换为tancon vert/trig - 将指数函数转换为三角函数和双曲函数第3章求值3.1假设功能3.2求值Eval - 对一个表达式求值eval - 求值evala - 在代数数(或者函数)域求值evalb - 按照一个布尔表达式求值evalc - 在复数域上符号求值evalf - 使用浮点算法求值evalhf - 用硬件浮点数算法对表达式求值evalm - 对矩阵表达式求值eva In - 求值到一个名称evalr, shake - 用区间算法求表达式的值和计算范围evalrC - 用复数区间算法对表达式求值value - 求值的惰性函数第4章求根,解方程4.1数值解fsolve - 利用浮点数算法求解solve/floats - 包含浮点数的表达式4.2最优化extrema - 寻找一个表达式的相对极值minimize, maximize - 计算最小值/最大值max norm - 一个多项式无穷大范数4.3求根allvalues - 计算含有RootOfs的表达式的所有可能值isqrt, iroot - 整数的平方根/第n次根realroot - 一个多项式的实数根的隔离区间root - 一个代数表达式的第n阶根RootOf - 方程根的表示surd - 非主根函数roots - 一个多项式对一个变量的精确根turm, sturmseq - 多项式在区间上的实数根数和实根序列4.4解方程elimi nate - 消去一个方程组中的某些变量isolve - 求解方程的整数解solvefor - 求解一个方程组的一个或者多个变量isolate - 隔离一个方程左边的一个子表达式sin gular - 寻找一个表达式的极点solve/ide ntity - 求解包含属性的表达式solve/i neqs - 求解不等式solve/li near - 求解线性方程组solve/radical - 求解含有未知量根式的方程solve/scalar - 标量情况(单变量和方程)solve/series - 求解含有一般级数的方程solve/system - 解方程组或不等式组第5章操作表达式5.1处理表达式Norm -代数数(或者函数)的标准型Power - 惰性幕函数Powmod -带余数的惰性幕函数Primfield - 代数域的原始元素Trace - 求一个代数数或者函数的迹charfcn - 表达式和集合的特征函数In dets - 找一个表达式的变元invfunc - 函数表的逆powmod -带余数的幕函数Risidue - 计算一个表达式的代数余combine - 表达式合并(对tan,cot 不好用) expa nd - 表达式展开Expa nd -展开表达式的惰性形式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 -simplify/siderels -simplify/sqrt -simplify/trig -simplify/zero -6.2其它化简操作 Normal - no rmal convert - radno rmal- rati on alize -第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 - 确定一个多项式的可能合并的项数con vert/poly nom - 将级数转换成多项式形式convert/mathorner -将多项式转换成 Horner 矩阵形式 化简分段函数表达式 化简含有极坐标形式的复数型表达式 化简含幕次的表达式 化简含有根式的表达式 化简rtable 表达式 使用关系式进行化简 根式化简 化简trig 函数表达式 化简含嵌入型实数和虚数的复数表达式 函数的惰性形式将一个表达式转换成不同形式标准化一个含有根号数的表达式分母有理化con vert/ratpoly - 将级数转换成有理多项式sort - 将值的列表或者多项式排序7.4多项式运算discrim - 多项式的判别式fixdiv - 计算多项式的固定除数n orm -多项式的标准型resulta nt - 计算两个多项式的终结式bernoulli - Bernoulli 数和多项式bernstein - 用Bernstein 多项式近似一个函数con te nt, primpart - 一个多元的多项式的内容和主部degree, ldegree - 一个多项式的最高次方/最低次方divide - 多项式的精确除法euler - Euler 数和多项式ico nte nt - 多项式的整数部分in terp - 多项式的插值prem, sprem - 多项式的pseudo 余数和稀疏pseudo 余数ran dpoly - 随机多项式生成器spli ne - 计算自然样条函数第8章有理表达式8.0有理表达式简介8.1操作有理多项式numer,denom - 返回一个表达式的分子/分母fron te nd - 将一般的表达式处理成一个有理表达式n ormal - 标准化一个有理表达式con vert/parfrac - 转换为部分分数形式conv ert/ratio nal - 将浮点数转换为接近的有理数ratrec on - 重建有理函数第9章微积分9.1取极限Limit, limit - 计算极限limit[dir]- 计算方向极限limit[multi]- 多重方向极限limit[return]- 极限的返回值9.2连续性测试disco nt - 寻找一个函数在实数域上的间断点fdisco nt - 用数值法寻找函数在实数域上的间断点isco nt - 测试在一个区间上的连续性9.3微分计算D -微分算子D, diff - 运算符D和函数diffdiff, Diff - 微分或者偏微分con vert/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, I nt - 定积分和不定积分Legendr eP,…-Legendre 函数及其第一和第二类函数Li - 对数积分stude nt[cha ngevar]- 变量代换daws on - Daws on 积分ellipsoid - 椭球体的表面积evalf(i nt)- 数值积分in tat, I ntat - 在一个点上积分求值第10章微分方程10.1微分方程分类odeadvisor - ODE- 求解分析器DESol -表示微分方程解的数据结构pdetest - 测试pdsolve 能找到的偏微分方程(PDEs)解10.2常微分方程求解dsolve - 求解常微方程(ODE)dsolve - 用给定的初始条件求解ODE问题dsolve/i nttra ns - 用积分变换方法求解常微分方程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数据构造器254 complex - 复数和复数构造器Float,…-浮点数及其构造器Fraction - 分数及其的构造器in teger - 整数和整数构造器11.4 MATLAB 软件包简介11.5 “”区间类型表达式第12章级数12.1幕级数的阶数Order - 阶数项函数order - 确定级数的截断阶数12.2常见级数展开series - 一般的级数展开taylor - Taylor 级数展开mtaylor - 多元Taylor级数展开poisson - Poisson 级数展开.268 12.3其它级数eulermac - Euler-Maclauri n 求和piecewise - 分段连续函数asympt - 渐进展开第13章特殊函数AiryAi, AiryBi - Airy 波动函数函数的实数零点AiryAiZeros, AiryBiZeros - AiryAn gerJ, WeberE - An ger 函数和Weber 函数Bessell, HankelHI, …-Bessel 函数和 Hankel 函数 BesselJZeros,… -Bessel函数实数零点 Beta - Beta 函数EllipticModulus -模数函数 k(q) GAMMA, I nGAMMA -完全和不完全 Gammag 数 GaussAGM - Gauss 算术的几何平均数JacobiAM, ., - Jacobi 振幅函数和 椭圆函数JacobiTheta1, JacobiTheta4 - Jacobi theta函数 JacobiZeta - Jacobi 的 Zeta 函数Kelvi nBer, Kelvi nBei - Kelvi n函数 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,…-误差函数,补充的误差函数和虚数误差函数harm onic - 调和函数hypergeom - 广义的超越函数pochhammer - 一般的 pochhammer 函数polylog - 一般的 polylogarithm 函数第14章线性代数14.1 ALGEBRA (代数)中矩阵,矢量和 数组14.2 LINALG 软件包简介14.3数据结构矩阵 matrices (小写) 矢量 vectors (矢量)将数组,列表, Matrix 转换成 matrix 将列表,数组或 Vector 转换成矢量vector 生成矩阵matrix (小写) 生成矢量 vector (小写) Det - conv ert/matrix - convert/vector -linalg[matrix]-lin alg[vector]-14.4惰性函数Eige nvals - 数值型矩阵的特征值和特征向量Hermite, Smith - 14.5 Lin earAlgebraMatrix 定义矩阵Add 加/减矩阵Adjoi nt 伴随矩阵BackwardSubstitute阵 Ban dMatrix 带状矩阵Basis 返回向量空间的一组基SumBasis 返回向量空间直和的一组基In tersectio nBasis 返回向量空间交的一组基BezoutMatrix 构造两个多项式的Bezout 矩阵 Bidiago nalForm 将矩阵约化为双对角型 CharacteristicMatrixCharacteristicPolyno mialCompa nion Matrix友矩阵(束)Con diti onNumberCo nsta ntMatrixCon sta ntVector Copy 构造矩阵或向量的一份复制CreatePermutation 将一个NAG 主元向量转换为一个置换向量或矩阵CrossProduct 向量的叉积'&x'向量的叉积DeleteRow 删除矩阵的行DeleteColum n 删除矩阵的列Determ inant 行歹U 式Diago nal 返回从矩阵中得到的向量序列Diago nalMatrix 构造(分块)对角矩阵Dime nsio n 行数和列数DotProduct 点积Bili nearForm 向量的双线性形式Eige nCon ditio nNumbers 计算数值特征值制约问题的特征值或特征向 量的条件数矩阵的Hermite 和Smith 标准型函数 求解A . X = B ,其中A 为上三角型行阶梯矩构造特征矩阵 构造矩阵的特征多项式 构造一个首一(或非首一)多项式或矩阵多项式的计算矩阵关于某范数的条件数 构造常数矩阵 构造常数向量Eige nvalues 计算矩阵的特征值Eige nvectors 计算矩阵的特征向量Equal比较两个向量或矩阵是否相等ForwardSubstitute 求解A . X = B ,其中A 为下三角型行阶梯矩阵Frobe niusForm 将一个方阵约化为Frobe nius 型(有理标准型)GaussianElimination 对矩阵作高斯消元ReducedRowEchelonForm对矩阵作高斯—约当消元GetResultDataType 返回矩阵或向量运算的结果数据类型GetResultSh ape 返回矩阵或向量运算的结果形状Give nsRotatio nM atrix 构造Give ns 旋转的矩阵GramSchmidt计算一个正交向量集HankelMatrix 构造一个Hankel 矩阵HermiteForm 计算一个矩阵的Hermite 正规型HessenbergForm将一个方阵约化为上Hessenberg 型HilbertMatrix 构造广义Hilbert 矩阵HouseholderMatrix 构造Householder 反射矩阵Ide ntityMatrix 构造一个单位矩阵IsDefi nite 检验矩阵的正定性,负定性或不定性IsOrthogo nal 检验矩阵是否正交IsUni tary 检验矩阵是否为酉矩阵IsSimilar 确定两个矩阵是否相似Jorda nBlockMatrix 构造约当块矩阵JordanForm将矩阵约化为约当型Kron eckerProduct 构造两个矩阵的Kron ecker 张量积LeastSquares 方程的最小二乘解Lin earSolve 求解线性方程组A . x = bLUDecomposition 计算矩阵的Cholesky , PLU 或PLU1R 分解Map将一个程序映射到一个表达式上,对矩阵和向量在原位置上进行处理MatrixAdd 计算两个矩阵的线性组合VectorAdd 计算两个向量的线性组合MatrixExponential 确定一个矩阵A 的矩阵指数exp(A)MatrixFunction 确定方阵A 的函数F(A)MatrixI nverse 计算方阵的逆或矩阵的Moore-Pe nrose 伪逆MatrixMatrixMultiply 计算两个矩阵的乘积MatrixVectorMultiply 计算一个矩阵和一个列向量的乘积VectorMatrixMultiply 计算一个行向量和一个矩阵的乘积MatrixPower 矩阵的幕Mi nimalPoly nomial 构造矩阵的最小多项式Min or计算矩阵的子式Multiply 矩阵相乘Norm计算矩阵或向量的p-范数MatrixNorm 计算矩阵的p-范数VectorNorm 计算向量的p-范数Normalize 向量正规化NullSpace 计算矩阵的零度零空间OuterProductMatrix 两个向量的外积Permanent方阵的不变量Pivot矩阵元素的主元消去法PopovForm Popov 正规型QRDecompositio n QR 分解RandomMatrix构造随机矩阵RandomVector构造随机向量Rank计算矩阵的秩Row返回矩阵的一个行向量序列Column返回矩阵的一个列向量序列RowOperati on 对矩阵作初等行变换Colu mn Operati on 对矩阵作出等列变换RowSpace返回矩阵行空间的一组基ColumnSpace返回矩阵列空间的一组基ScalarMatrix 构造一个单位矩阵的数量倍数ScalarVector 构造一个单位向量的数量倍数ScalarMultiply 矩阵与数的乘积MatrixScalarMultiply 计算矩阵与数的乘积VectorScalarMultiply 计算向量与数的乘积SchurForm将方阵约化为Schur 型Sin gularValues 计算矩阵的奇异值SmithForm将矩阵约化为Smith 正规型Stro nglyCo nn ectedBlocks 计算方阵的强连通块SubMatrix 构造矩阵的子矩阵SubVector 构造向量的子向量SylvesterMatrix 构造两个多项式的Sylvester矩阵ToeplitzMatrix 构造Toeplitz 矩阵Trace计算方阵的迹Tran spose 转置矩阵Hermitia nTran spose 共轭转置矩阵Tridiago nalForm 将方阵约化为三对角型Uni tVector 构造单位向量Van derm on deMatrix 构造一个Van derm onde 矩阵VectorA ngle 计算两个向量的夹角ZeroMatrix 构造一个零矩阵ZeroVector 构造一个零向量Zip将一个具有两个参数的程序作用到一对矩阵或向量上LinearAlgebra[Generic] 子函数包[Generic] 子函数包提供作用在场,欧几里得域,积分域和环上的线性代数算法。
Maple6-ch41-常微分方程
1第四章 微分方程§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 = + ⎛⎝ ⎫⎭⎪⎪∂∂x ()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教程1 初识计算机代数系统Maple1.1 Maple简说1980年9⽉, 加拿⼤Waterloo⼤学的符号计算机研究⼩组成⽴, 开始了符号计算在计算机上实现的研究项⽬, 数学软件Maple是这个项⽬的产品. ⽬前, 这仍是⼀个正在研究的项⽬.Maple的第⼀个商业版本是1985年出版的. 随后⼏经更新, 到1992年, Windows系统下的Maple 2⾯世后, Maple被⼴泛地使⽤, 得到越来越多的⽤户. 特别是1994年, Maple 3出版后, 兴起了Maple热. 1996年初, Maple 4问世, 1998年初, Maple 5正式发⾏. ⽬前⼴泛流⾏的是Maple 7以及2002年5⽉⾯市的Maple 8.Maple是⼀个具有强⼤符号运算能⼒、数值计算能⼒、图形处理能⼒的交互式计算机代数系统(Computer Algebra System). 它可以借助键盘和显⽰器代替原来的笔和纸进⾏各种科学计算、数学推理、猜想的证明以及智能化⽂字处理.Maple这个超强数学⼯具不仅适合数学家、物理学家、⼯程师, 还适合化学家、⽣物学家和社会学家, 总之, 它适合于所有需要科学计算的⼈.1.2 Maple结构Maple软件主要由三个部分组成: ⽤户界⾯(Iris)、代数运算器(Kernel)、外部函数库(External library). ⽤户界⾯和代数运算器是⽤C语⾔写成的, 只占整个软件的⼀⼩部分, 当系统启动时, 即被装⼊, 主要负责输⼊命令和算式的初步处理、显⽰结果、函数图象的显⽰等. 代数运算器负责输⼊的编译、基本的代数运算(如有理数运算、初等代数运算等)以及内存的管理. Maple的⼤部分数学函数和过程是⽤Maple⾃⾝的语⾔写成的, 存于外部函数库中. 当⼀个函数被调⽤时, 在多数情况下, Maple会⾃动将该函数的过程调⼊内存, ⼀些不常⽤的函数才需要⽤户⾃⼰调⼊, 如线性代数包、统计包等, 这使得Maple在资源的利⽤上具有很⼤的优势, 只有最有⽤的东西才留驻内存, 这保证了Maple可以在较⼩内存的计算机上正常运⾏. ⽤户可以查看Maple的⾮内存函数的源程序, 也可以将⾃⼰编的函数、过程加到Maple的程序库中, 或建⽴⾃⼰的函数库.1.3 Maple输⼊输出⽅式Maple 7有2种输⼊⽅式: Maple语⾔(Maple Notation)和标准数学记法(Standard Math Notation). Maple语⾔是⼀种结构良好、⽅便实⽤的内建⾼级语⾔, 它的语法和Pascal或C有⼀定程度的相似, 但有很⼤差别. 它⽀持多种数据操作命令, 如函数、序列、集合、列表、数组、表, 还包含许多数据操作命令, 如类型检验、选择、组合等. 标准数学记法就是我们常⽤的数学语⾔.启动Maple, 会出现新建⽂档中的“[>”提⽰符, 这是Maple中可执⾏块的标志, 在“>”后即可输⼊命令, 结束⽤“;”(显⽰输出结果)或者“:”(不 显⽰输出结果). 但是, 值得注意的是, 并不是说Maple的每⼀⾏只能执⾏⼀句命令, ⽽是在⼀个完整的可执⾏块中健⼊回车之后, Maple会执⾏当前执⾏块中所有命令(可以是若⼲条命令或者是⼀段程序). 如果要输⼊的命令很长, 不能在⼀⾏输完, 可以换⾏输⼊, 此时换⾏命令⽤“shift+Enter”组合键, ⽽在最后⼀⾏加⼊结束标志“;”或“:”, 也可在⾮末⾏尾加符号“\”完成.Maple 7有4种输出⽅式: Maple语⾔、格式化⽂本(Character Notation)、固定格式记法(Typeset Notation)、标准数学记法(Standard Math Notation). 通常采⽤标准数学记法.Maple会认识⼀些输⼊的变量名称, 如希腊字母等. 为了使⽤⽅便, 现将希腊字母表罗列如下,输⼊时只需录⼊相应的英⽂,要输⼊⼤写希腊字母, 只需把英⽂⾸字母⼤写:alpha beta gamma delta epsilon zeta eta theta iota kappa lambda munu xi omicron pi rho sigma tau upsilon phi chi psi omega有时候为了美观或特殊需要,可以采⽤Maple中的函数或程序设计⽅式控制其输出⽅式,如下例:> for i to 10 doprintf("i=%+2d and i^(1/2)=%+6.3f", i, eval(sqrt(i)));od;i=+1 and i^(1/2)=+1.000i=+2 and i^(1/2)=+1.414i=+3 and i^(1/2)=+1.732i=+4 and i^(1/2)=+2.000i=+5 andi^(1/2)=+2.236i=+6 and i^(1/2)=+2.449i=+7 and i^(1/2)=+2.646i=+8 and i^(1/2)=+2.828i=+9 and i^(1/2)=+3.000i=+10 and i^(1/2)=+3.162+2d的含义是带符号的⼗进位整数,域宽为2. 显然,这种输出⽅式不是我们想要的,为了得到更美观的输出效果,在语句中加⼊换⾏控制符“\n”即可:> for i to 10 doprintf("i=%+2d and i^(1/2)=%+6.3f\n", i, eval(sqrt(i)));od;i=+1 and i^(1/2)=+1.000i=+2 and i^(1/2)=+1.414i=+3 and i^(1/2)=+1.732i=+4 and i^(1/2)=+2.000i=+5 and i^(1/2)=+2.236i=+6 and i^(1/2)=+2.449i=+7 and i^(1/2)=+2.646i=+8 and i^(1/2)=+2.828i=+9 and i^(1/2)=+3.000i=+10 and i^(1/2)=+3.162再看下例:将输⼊的两个数字⽤特殊形式打印:> niceP:=proc(x,y)printf("value of x=%6.4f, value of y=%6.4f",x,y);end proc;> niceP(2.4,2002.204);value of x=2.4000, value of y=2002.20401.4 Maple联机帮助学会寻求联机帮助是掌握⼀个软件的钥匙. Maple有⼀个⾮常好的联机帮助系统, 它包含了90%以上命令的使⽤说明. 要了解Maple的功能可就会出现(也可以⽤Tab键和up, down选定). 可以从底栏中看到函数命令全称, 例如, 我们选graphics…, 出现该条的⼦⽬录, 从中选2D…, 再选plot就可得到作函数图象的命令plot的完整帮助信息. ⼀般帮助信息都有实例, 我们可以将实例中的命令部分拷贝到作业⾯进⾏计算、演⽰,由此可了解该命令的作⽤.在使⽤过程中, 如果对⼀个命令把握不准, 可⽤键盘命令对某个命令进⾏查询. 例如, 在命令区输⼊命令“?plot”(或help(plot);), 然后回车将2 Maple的基本运算2.1 数值计算问题算术是数学中最古⽼、最基础和最初等的⼀个分⽀, 它研究数的性质及其运算, 主要包括⾃然数、分数、⼩数的性质以及他们的加、减、乘、除四则运算. 在应⽤Maple做算术运算时, 只需将Maple当作⼀个“计算器”使⽤, 所不同的是命令结束时需加“;”或“:”.在Maple中, 主要的算术运算符有“+”(加)、“–”(减)、“*”(乘)、“/”(除)以及“^”(乘⽅或幂,或记为**), 算术运算符与数字或字母⼀起组成任意表达式, 但其中“+”、“*”是最基本的运算, 其余运算均可归诸于求和或乘积形式. 算述表达式运算的次序为: 从左到右, 圆括号最先, 幂运算优先, 其次是乘除,最后是加减. 值得注意的是, “^”的表达式只能有两个操作数, 换⾔之, 是错误的, ⽽“+”或“*”的任意表达式可以有两个或者两个以上的操作数.Maple有能⼒精确计算任意位的整数、有理数或者实数、复数的四则运算, 以及模算术、硬件浮点数和任意精度的浮点数甚⾄于矩阵的计算等等. 总之, Maple可以进⾏任意数值计算.但是, 任何软件或程序毕竟只是⼈们进⾏科学研究的⼀种必要的辅助, 即便它有很多优点, 但也有它的局限性, 为了客观地认识数学软件、认识Maple, 下⾯通过两个简单例⼦予以说明.第⼀个简单的数值计算实例想说明Maple数值计算的答案的正确性:> 3!!!;上述运算结果在IBM PC机(1G, 128M)上计算只需要0.01秒, 得到如此复杂的结果(1747位), ⼀个⾃然的问题是: 答案正确吗?为了回答这个问题, 我们借助于数值分析⽅法, 由Stiring公式可得: , 前三位数字与Maple输出结果相同, 且两者结果均为1747位. 另外, 在720!的计算中, 5的因⼦的个数为:这些5与⾜够多的2相乘将得到178个0, ⽽Maple的输出结果中最后178位数为零. 由此, 可以相信Maple结果的正确性.另⼀个例⼦则想说明Maple计算的局限性:Maple在处理问题时, 为了避免失根, 从不求算术式的近似值, 分数则化简为既约分数. 因此, 在Maple中很容易得到:显然这是错误的. 这⼀点可以从代数的⾓度予以分析.不妨设, 则, 即, 显然有3个结果, -2是其实数结果.另⼀⽅⾯, 设, 则, 即:显然有6个结果, -2、2是其实数结果.这个简单的例⼦说明了Maple在数值计算⽅⾯绝对不是万能的, 其计算结果也不是完全正确的, 但是, 通过更多的实验可以发现: Maple只可能丢失部分结果, ⽽不会增加或很少给出完全错误的结果(如上例中Maple的浮点数结果皆为). 这⼀点提醒我们, 在利⽤Maple或其他任何数学软件或应⽤程序进⾏科学计算时, 必须运⽤相关数学基础知识校验结果的正确性.尽管Maple存在缺陷(实际上, 任何⼀个数学软件或程序都存在缺陷), 但⽆数的事实说明Maple仍然不失为⼀个具有强⼤科学计算功能的计算机代数系统. 事实上, Maple同其他数学软件或程序⼀样只是科学计算的⼀个辅助⼯具, 数学基础才是数学科学中最重要的.2.1.1 有理数运算作为⼀个符号代数系统, Maple可以绝对避免算术运算的舍⼊误差. 与计算器不同, Maple从来不⾃作主张把算术式近似成浮点数, ⽽只是把两个有公因数的整数的商作化简处理. 如果要求出两个整数运算的近似值时, 只需在任意⼀个整数后加“.”(或“.0”), 或者利⽤“evalf”命令把表达式转换成浮点形式, 默认浮点数位是10 (即: Digits:=10, 据此可任意改变浮点数位, 如Digits:=20).> 12!+(7*8^2)-12345/125;> 123456789/987654321;> evalf(%);> 10!; 100*100+1000+10+1; (100+100)*100-9;> big_number:=3^(3^3);> length(%);上述实验中使⽤了⼀个变量“big_number”并⽤“:=”对其赋值, 与Pascal语⾔⼀样为⼀个变量赋值⽤的是“:=”. ⽽另⼀个函数“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保留为未求值.> irem(2002,101,'q'); # 求2002除以101的余数, 将商赋给q> q; #显⽰q> iquo(2002,101,'r'); # 求2002除以101的商, 将余数赋给r> r; #显⽰r> irem(x,3);2)素数判别(isprime)素数判别⼀直是初等数论的⼀个难点, 也是整数分解问题的基础. Maple提供的isprime命令可以判定⼀个整数n是否为素数. 命令格式: isprime(n);如果判定n可分解, 则返回false, 如果返回true, 则n“很可能”是素数.> isprime(2^(2^4)+1);> isprime(2^(2^5)+1);上述两个例⼦是⼀个有趣的数论难题。
《Maple》使用手册
O O O O (1.7)(1.3)(1.2)O (1.13)(1.9)(1.14)(1.15)(1.1)O O O (1.8)(1.5)(1.12)(1.10)O O O O O O (1.6)(1.11)(1.4)O 第1章 Maple的基本量1.1数值类型whattype 0integerwhattype12fractionwhattype 0.floatconstants;false ,γ,N ,true ,Catalan ,FAIL ,πwhattype falsesymbolwhattype infinityextended_numericwhattype πsymbolwhattype undefinedextended_numericwhattype arcsin 1`*`whattype sqrt 2`^`whattype ln 2functionwhattype Icomplex extended_numericwhattype "ustc"stringwhattype 'ustc 'symbolwhattype ustcsymbolO (2.1)O (1.16)O (2.3)O (1.19)O O (2.2)O O O (1.21)O (1.20)O O (1.18)O O O (1.22)(1.17)类型转化convert 65535,hexFFFFconvert FFFF ,decimal ,1665535convert FFFF ,decimal ,88775Why?evalf π3.141592654evalf 20π3.1415926535897932385floor π,round π,ceil π3,3,4convert evalf π,string"3.141592654"1.2赋值x d 1x :=1y ,z d 2,3y ,z :=2,3z3y ,z d 2,3Error, illegal use of an object as a namey ,z d 2,3清除unassign xError, (in unassign) cannot unassign `1' (argument must be assignable)unassign "x"Error, (in unassign) cannot unassign `x' (argument must be assignable)unassign 'x 'x d 1; x d 'x ';x(2.8)(2.11)O O(2.9)(2.12)O O O (2.13)O (2.4)(2.7)(2.6)O O (2.10)O O (2.5)x :=1x :=x x替换x ,y d sqrt 2,sqrt 3x ,y :=2,3subs x =a ,y =b ,x y13a b Why?subs x =y ,y =x ,x y1Why?unassign 'x ','y 'subs x =a ,y =b ,x ya bsubs x =y 2,y =x 2,x yx 2subs y =x 2,x =y 2,x y1y2algsubs x C x 2=y ,1C x4x C 14algsubs x C x 2=y ,1C 2 x C x 221C 2 x C x 22algsubs x C x 2=y ,1C 4 x C 6 x 2C 4 x 3C x 41C 3 y C y 2C 1C 2 y x1.3定义O OO O O (3.5)(4.2)O O (4.3)(3.2)O O (3.1)(3.4)(4.4)O (3.7)(4.1)(3.3)O O (4.5)(3.6)O (3.8)a ,b ,cd 1,2,3a ,b ,c :=1,2,3f d x /a x 2C b x C c f :=x /a x 2C b x C cg d x ,y /x yg :=x ,y /x y注意:此处(x,y)的括号不可省。
Maple入门教程Part4_图形和动画
Part 4:图形和动画西希安工程模拟软件(上海)有限公司,20084.0 介绍第四部分:图形和动画,你将创建 2-D 和 3-D 图形。
你将学习如何使用关联菜单、命令、或图形生成器创建不同类型的图形和动画,这些图形和动画对于探索数学非常有用,包括隐式图形、参数图形、向量场图形、和几何对象的图形等。
最后,通过两个应用程序,你将学习如何创建复合的动画,用于物理系统的设计和模拟。
4.1 二维和三维图形Maple 可以生成方程和表达式的 2-D 和 3-D 图形。
显示两条曲线。
x5101520251233-D 图形创建 3-D 图形。
例子:输入关于 x 和 y 的表达式(例如)。
鼠标右击表达式,选择 Plots >3-D Plots > x,y.例子:按住鼠标左键并移动鼠标,旋转图形。
例子:选择关联菜单中的操作器移动和缩放图形。
提示:你也可以从窗口上侧的工具栏中选择不同的操作方式。
图形属性你可以通过不同的方式修改图形的属性。
图形的关联菜单中包含多种对应的属性,你可以通过鼠标选取改变图形选项。
你也可以发现2-D 和 3-D图形对应的关联菜单是不一样的。
例子:右击图形弹出关联菜单,选取透明度 ,改变图形的透明度。
图形选项也可以通过选择窗口上方的工具条图标改变。
例子:点击图形,选择菜单图形 > 坐标轴> 立方体框。
绘图向导Plotting Guide 方便你快速发现需要的图形类型。
进入绘图向导的方式是从帮助菜单>Manuals, Resources, and more>PlottingGuide4.2 使用图形生成器操作步骤结果图形生成器使用Maple中内置的图形生成器能够快速创建图形。
例子:输入你想要绘图的表达式。
从关联菜单中选取 Plots > Plot Builder,弹出图形生成器窗口,选择你需要的图形类型,添加标题,设置选项,等等,快速完成所有的操作。
右边的例子显示如何使用图形标题,坐标轴,和带有等高线的面图。
maple教程
maple教程1. 介绍Maple:Maple是一款广泛应用于数学、科学和工程领域的计算软件。
它可以进行数值计算、符号计算、可视化和建模等功能,被广泛用于教育、研究和工程设计等领域。
2. 安装Maple:首先,下载Maple的安装文件并运行。
按照安装向导的指示完成安装过程。
安装完成后,可以打开Maple并开始使用。
3. Maple基础:Maple中的基本对象是表达式(expression)。
可以输入表达式并进行计算,也可以定义变量、函数和方程等。
Maple的语法与一般数学符号相似,所以非常易于学习和使用。
4. 数值计算:Maple可以进行各种数值计算,例如求解方程、数值积分、数值微分等。
可以使用内置的函数或编写自定义的函数来实现不同的数值计算任务。
使用数值计算可以快速得到数学问题的近似解。
5. 符号计算:Maple的强大之处在于符号计算。
可以进行代数运算、求解方程、化简表达式等。
Maple能够处理复杂的代数表达式,并给出精确的结果。
对于数学研究、理论推导和数学建模等领域非常有用。
6. 绘图功能:Maple提供了丰富的绘图功能,可以创建二维和三维图形来可视化数学和科学问题。
可以绘制函数图像、数据图表、散点图、曲线图等。
通过调整参数,可以自定义图形的外观和样式。
7. 建模与仿真:Maple还提供了建模和仿真功能,可以通过输入方程或条件来建立模型,并进行仿真和分析。
可以用于工程设计、物理模拟、控制系统设计等领域。
Maple可以帮助用户更好地理解和解决实际问题。
8. 扩展功能:Maple具有丰富的扩展功能,可以使用包(package)来扩展Maple的功能。
可以通过安装和加载包来添加新的函数、命令和工具。
这些包可以提供额外的数学、统计、优化、图论等功能。
9. Maple应用领域:Maple广泛应用于数学教育、科学研究和工程设计等领域。
在教育方面,它可以帮助学生理解和掌握数学概念,同时也是教师教学和练习的重要工具。
符号计算系统maple教程
符号计算系统maple 教程第1章 maple 简介*.mw 格式的maple 文档可以将文本数字、数学公式、声音、图像等内容组合在一起,生成具有多媒体效果的专业科技文档。
Maple 可以打开maple 12进入文件模式窗口;打开 class worksheets maple 12,打开传统的工作模式窗口;打开command-line maple12,进入命令行模式窗口。
在command-line maple12窗口中,按enter 键执行表达式计算,若命令很长,在输入过程中按shift+enter 键将命令分成若干行,在class worksheets maple 12模式下,表达式必须以冒号”:”或分号”;”结尾,在maple 12模式下则不需要如此。
#及其所在行后面的部分为注释说明语句。
在maple12模式下进行一下操作:maple 的优点是可以直接修改编辑好的公式等 因式分解:> ,而且可以直接在出现结果后继续在factor 公式中进行修改。
多项式展开>公约数:>公倍数:>计算111121k k =-∑:>计算和式31n k k =∑:>求解线性方程组:215x y x y +=-=:>计算44sin()d x dx x ⎛⎫= ⎪⎝⎭:>计算41x dx x -⎰:>计算22()bd a c x y dxdy +⎰⎰:>计算矩阵123213123A ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦的特征值和特征向量。
>计算上面A 矩阵的1-范数: >画出f(x)=x 2sin(x)-1在区间[-7,7]上的图像:画长幅内次摆线:3cos 24cos3{,[0,2]3sin 24sin 3x t t t y t tπ=+∈=-画出22()(,)x y f x y xye -+=在[2,2],[2,2]x y ∈-∈-上的图像。
获取帮助:➢ 文件模式下:maple12:按F1会出现快速帮助菜单。
Maple常用计算命令
常用计算命令版本7.0指令》Maple 《章数章1第复数1.1 虚部/返回复数型表达式的实部Re,Im - 函数绝对值abs - 复数的幅角函数argument - 返回共轭复数conjugate - 实数和复数表达式的符号函数csgn - 5 函数sign 实数和复数表达式的signum - 常数1.2 MAPLE 已知的变量名称指数常数(以自然对数为底)的根I - x^2= -1 无穷大infinity 整数函数1.3 阶乘函数!- 商/整数的余数irem, iquo - 素数测试isprime - 无整数平方的因数分解isqrfree - 最小值/数的最大值max, min - 的整数模 m 计算对mod, modp, mods - 随机数生成器rand - 重置随机数生成器randomize - 素数1.4 首一素数多项式/有限域的随机多项式Randpoly, Randprime - 个素数 i 确定第ithprime - 最小素数/确定下一个最大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 - exp, sin, cos 函数转换为trig 将convert/expsincos - 转换为指数积分convert/Ei - 函数转换为指数函数trig 将convert/exp - 转换为对数函数arctrig 将convert/ln - 转换为极坐标形式polar - 将度转换为弧度convert/radians - sin, cos, sinh, cosh 函数转换为trig 将convert/sincos - tan 函数转换为trig 将convert/tan - 将指数函数转换为三角函数和双曲函数convert/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 的表达式的所有可能值RootOfs计算含有allvalues - 次根n 第/整数的平方根isqrt, iroot - 一个多项式的实数根的隔离区间realroot - 阶根n一个代数表达式的第root - 方程根的表示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 - ) 不好用tan,cot对(表达式合并combine - 表达式展开expand - 展开表达式的惰性形式Expand - 不抑制函数展开/抑制expandoff/expandon - 因式分解5.2 绝对因式分解的惰性形式Afactor - 绝对因式分解分解项列表的惰性形式Afactors - 显式度Berlekamp 因式分解的Berlekamp - 多元的多项式的因式分解factor - 多元多项式的因式分解列表factors - 的惰性形式factor 函数Factor - 的惰性形式factors 函数Factors - 多项式的完全因式分解polytools[splits] - 化简章6第 118 表达式化简6.1 给一个表达式实施化简规则simplify - 利用运算符化简表达式simplify/@ - 利用指数积分化简表达式simplify/Ei - 函数进行化简GAMMA利用simplify/GAMMA - 函数化简表达式RootOf用simplify/RootOf -的表达式标识符wronskian 化简含simplify/wronskian - 化简超越函数表达式simplify/hypergeom - 化简含有对数的表达式simplify/ln - 化简分段函数表达式simplify/piecewise - 化简含有极坐标形式的复数型表达式simplify/polar - 化简含幂次的表达式simplify/power - 化简含有根式的表达式simplify/radical - 表达式rtable 化简simplify/rtable - 使用关系式进行化简simplify/siderels - 根式化简simplify/sqrt - 函数表达式trig 化简simplify/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 - 次根n多项式的平方根和第psqrt, proot - 商/多项式的余数rem,quo - 操纵多项式7.3 形式Horner将一个多项式转换成convert/horner - collect - 象幂次一样合并系数确定一个多项式的可能合并的项数compoly - 将级数转换成多项式形式convert/polynom - 矩阵形式Horner将多项式转换成convert/mathorner - 将级数转换成有理多项式convert/ratpoly - 将值的列表或者多项式排序sort- 不含平方项的因数分解函数sqrfree -多项式运算7.4 多项式的判别式discrim - 计算多项式的固定除数fixdiv - 多项式的标准型norm - 计算两个多项式的终结式resultant - 数和多项式bernoulli - Bernoulli 多项式近似一个函数Bernstein用bernstein - 一个多元的多项式的内容和主部content, primpart - 最低次方/一个多项式的最高次方degree, ldegree - 多项式的精确除法divide - 数和多项式euler - Euler 多项式的整数部分icontent - 多项式的插值interp - 余数pseudo 余数和稀疏pseudo 多项式的prem, sprem - 随机多项式生成器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 -微分计算9.3 微分算子D - diff 和函数D 运算符D, diff - 微分或者偏微分diff, Diff - 运算符表达式D将含导数表达式转换为convert/D - 的形式diff(f(x),x)表达式转换为D(f)(x)将convert/diff - 由一个方程定义一个函数的微分implicitdiff - 积分计算9.4 三角和双曲积分- Si, C i … 阶梯函数/Heaviside函数Dirac, Heaviside - Dirac 指数积分Ei - 椭圆积分Elliptic - 余弦积分和辅助函数,正弦- Fresnel FresnelC, … 定积分和不定积分int, Int - 函数及其第一和第二类函数- Legendre eP, … Legendr 对数积分Li - 变量代换student[changevar] - 积分dawson - Dawson 椭球体的表面积ellipsoid - 数值积分evalf(int) - 在一个点上积分求值intat, Intat - 微分方程章10第微分方程分类10.1 求解分析器odeadvisor - ODE- 数据结构表示微分方程解的DESol - 解(PDEs)能找到的偏微分方程pdsolve 测试pdetest - 常微分方程求解10.2 (ODE) 求解常微方程dsolve - 问题ODE 求解初始条件用给定的dsolve - 用积分变换方法求解常微分方程dsolve/inttrans - 常微方程数值解dsolve/numeric - 带分段系数的常微方程求解dsolve/piecewise - 问题的级数解ODE 寻找dsolve - 方程组ODEs 求解dsolve - 求解器中测试结果是显式或者隐式类型ODE 从odetest - 偏微分方程求解10.3 的解析解 (PDEs) 寻找偏微分方程pdsolve -数值计算章11第中的数值计算环境11.1 MAPLE 数值计算Maple标准和IEEE 数据类型特殊值环境变量算法11.2 标准算法复数算法,无穷和未定义数的算法0含有数据构造器11.3 254 复数和复数构造器complex - 浮点数及其构造器- Float, … 分数及其的构造器Fraction- 整数和整数构造器integer - 简介软件包11.4 MATLAB 11.5 “”区间类型表达式12第章级数幂级数的阶数12.1 阶数项函数Order - 确定级数的截断阶数order - 常见级数展开12.2 一般的级数展开series - 级数展开taylor - Taylor 级数展开Taylor多元mtaylor - .268 级数展开poisson- Poisson 其它级数12.3 求和eulermac - Euler-Maclaurin 分段连续函数piecewise - 渐进展开asympt - 13第特殊函数章波动函数AiryAi, AiryBi- Airy 函数的实数零点AiryAiZeros, AiryBiZeros - Airy 函数Weber函数和AngerJ, WeberE - Anger 函数Hankel函数和- BesselBesselI, HankelH1, … 函数实数零点- BesselBesselJZeros, … 函数Beta - Beta k(q) 模数函数EllipticModulus - 函数Gamma完全和不完全GAMMA, lnGAMMA - 算术的几何平均数GaussAGM - Gauss 椭圆函数振幅函数和JacobiAM, ., - Jacobi 函数JacobiTheta1, JacobiTheta4 - Jacobi theta 函数Zeta的JacobiZeta- Jacobi 函数KelvinBer, KelvinBei - Kelvin 函数U函数和KummerM, - Kummer M 函数LambertW - LambertW 函数Lerch Phi一般的LerchPhi - 函数LommelS1, LommelS2 - Lommel 函数Meijer G一个修正的MeijerG - 函数Polygamma和Psi - Digamma 函数StruveH, StruveL - Struve 函数及其导数WeierstrassP - Weierstrass P 函数WhittakerM - Whittaker 函数Zeta - Zeta 误差函数,补充的误差函数和虚数误差函数- erf, … 调和函数harmonic - 广义的超越函数hypergeom -一般的pochhammer - 函数pochhammer 函数polylogarithm一般的polylog - 线性代数章14第数组(代数)中矩阵,矢量和14.1 ALGEBRA 软件包简介14.2 LINALG 14.3 数据结构(小写)matrices矩阵(矢量)vectors矢量 matrix 转换成Matrix 将数组,列表,convert/matrix - vector转换成矢量Vector 将列表,数组或convert/vector - (小写)matrix生成矩阵linalg[matrix] - (小写)vector生成矢量linalg[vector] - 惰性函数14.4 惰性行列式运算符Det -数值型矩阵的特征值和特征向量Eigenvals - 标准型Smith 和Hermite 矩阵的Hermite, Smith - 函数14.5 LinearAlgebra 定义矩阵Matrix 减矩阵/加Add 伴随矩阵Adjoint 为上三角型行阶梯矩 A ,其中 A . X = B求解BackwardSubstitute 阵带状矩阵BandMatrix 返回向量空间的一组基Basis 返回向量空间直和的一组基SumBasis 返回向量空间交的一组基IntersectionBasis Bezout 构造两个多项式的BezoutMatrix 矩阵将矩阵约化为双对角型BidiagonalForm 构造特征矩阵CharacteristicMatrix 构造矩阵的特征多项式CharacteristicPolynomial 构造一个首一(或非首一)多项式或矩阵多项式的CompanionMatrix 友矩阵(束)计算矩阵关于某范数的条件数ConditionNumber 构造常数矩阵ConstantMatrix 构造常数向量ConstantVector 构造矩阵或向量的一份复制Copy NAG 将一个CreatePermutation 主元向量转换为一个置换向量或矩阵向量的叉积CrossProduct 向量的叉积`&x` 删除矩阵的行DeleteRow 删除矩阵的列DeleteColumn 行列式Determinant 返回从矩阵中得到的向量序列Diagonal 对角矩阵构造(分块)DiagonalMatrix 行数和列数Dimension 点积DotProduct 向量的双线性形式BilinearForm 计算数值特征值制约问题的特征值或特征向EigenConditionNumbers 量的条件数计算矩阵的特征值Eigenvalues 计算矩阵的特征向量Eigenvectors比较两个向量或矩阵是否相等Equal 为下三角型行阶梯矩阵 A ,其中 A . X = B求解ForwardSubstitute 型(有理标准型) Frobenius 将一个方阵约化为FrobeniusForm 消元高斯对矩阵作GaussianElimination 对矩阵作高斯-约当消元ReducedRowEchelonForm 返回矩阵或向量运算的结果数据类型GetResultDataType 返回矩阵或向量运算的结果形状GetResultShape 旋转的矩阵Givens 构造GivensRotationMatrix 计算一个正交向量集GramSchmidt 矩阵Hankel 构造一个HankelMatrix HermiteForm 正规型 Hermite 计算一个矩阵的型Hessenberg 将一个方阵约化为上HessenbergForm 矩阵Hilbert 构造广义HilbertMatrix 反射矩阵Householder 构造HouseholderMatrix 构造一个单位矩阵IdentityMatrix 检验矩阵的正定性,负定性或不定性IsDefinite 检验矩阵是否正交IsOrthogonal 检验矩阵是否为酉矩阵IsUnitary 确定两个矩阵是否相似IsSimilar 构造约当块矩阵JordanBlockMatrix 将矩阵约化为约当型JordanForm 张量积Kronecker 构造两个矩阵的KroneckerProduct 方程的最小二乘解LeastSquares A . x = b 求解线性方程组LinearSolve 分解PLU1R 或PLU ,Cholesky计算矩阵的LUDecomposition 将一个程序映射到一个表达式上,对矩阵和向量在原位置上进行Map 处理计算两个矩阵的线性组合MatrixAdd VectorAdd 计算两个向量的线性组合 exp(A) 的矩阵指数 A 确定一个矩阵MatrixExponential F(A) 的函数A 确定方阵MatrixFunction 伪逆Moore-Penrose 计算方阵的逆或矩阵的MatrixInverse 计算两个矩阵的乘积MatrixMatrixMultiply 计算一个矩阵和一个列向量的乘积MatrixVectorMultiply 计算一个行向量和一个矩阵的乘积VectorMatrixMultiply 矩阵的幂MatrixPower 构造矩阵的最小多项式MinimalPolynomial 计算矩阵的子式Minor矩阵相乘Multiply 范数p-计算矩阵或向量的Norm 范数p-计算矩阵的MatrixNorm 范数p-计算向量的VectorNorm 向量正规化Normalize 计算矩阵的零度零空间NullSpace 两个向量的外积OuterProductMatrix 方阵的不变量Permanent 矩阵元素的主元消去法Pivot 正规型PopovFormPopov 分解QRDecomposition QR 随机矩阵构造RandomMatrix 构造随机向量RandomVector 矩阵的秩计算Rank 返回矩阵的一个行向量序列Row 返回矩阵的一个列向量序列Column 对矩阵作初等行变换RowOperation 对矩阵作出等列变换ColumnOperation 返回矩阵行空间的一组基RowSpace 返回矩阵列空间的一组基ColumnSpace 构造一个单位矩阵的数量倍数ScalarMatrix 构造一个单位向量的数量倍数ScalarVector 矩阵与数的乘积ScalarMultiply 计算矩阵与数的乘积MatrixScalarMultiply VectorScalarMultiply 计算向量与数的乘积型Schur 将方阵约化为SchurForm 计算矩阵的奇异值SingularValues 正规型 Smith 将矩阵约化为SmithForm 计算方阵的强连通块StronglyConnectedBlocks 构造矩阵的子矩阵SubMatrix 构造向量的子向量SubVector 构造两个多项式的SylvesterMatrix 矩阵Sylvester 矩阵Toeplitz 构造ToeplitzMatrix 计算方阵的迹Trace 转置矩阵Transpose 共轭转置矩阵HermitianTranspose 将方阵约化为三对角型TridiagonalForm 构造单位向量UnitVector矩阵Vandermonde 构造一个VandermondeMatrix计算两个向量的夹角VectorAngle 构造一个零矩阵ZeroMatrix 构造一个零向量ZeroVector Zip 将一个具有两个参数的程序作用到一对矩阵或向量上子函数包提供作用在[Generic] 子函数包LinearAlgebra[Generic] 域,积分域和环上的线性代数算法。
Maple教程第四章线性代数
72第四章 线性代数。
73.线性代数是讨论有限维空间线性理论的基础数学分支。
由于线性问题广泛地存在于自然科学和计数科学的各个领域,而且某些非线性问题在一定条件下也可以转化为线性问题来处理,线性代数中的概念和方法,已经被广泛地运用到各个学科领域中。
在计算机技术高度发展的今天,线性代数更是如虎添翼,成为了从事自然科学和工程计数工作不可缺少的数学工具之一。
正因为此,Maple 也对线性代数工具有专门的实现,它对于解决小规模线性代数问题,尤其是符号线性代数问题,是极为实用的。
不过,如果要处理较大规模的数值线性代数问题,还是推荐您使用专门的线性代数工具——Matlab ,它在数值矩阵运算方面是首屈一指的。
在上一章中的数组部分中,我们曾经简要地介绍过矩阵和向量,我们还提到了Maple 的线性代数工具包。
这一章将为您更为详尽地介绍Maple 中矩阵和向量的使用和运算,以及Maple 线性代数工具包中的主要函数和它们的用法,我们将通过例子介绍Maple 解决实际线性代数问题的方法。
我们还会顺带介绍Maple 中矩阵求值的一些内部机制,使您能更好的理解Maple 的复合数据类型,为利用Maple 自己编制计算程序打下基础。
4.1 矩阵的基本运算在开始用Maple 进行矩阵运算之前,需要载入Maple 的线性代数工具包——linalg ,Maple 中大部分矩阵运算以及和矩阵相关的函数都是在这个工具包中定义的。
在载入这个工具包时产生了两个警告,不用为此担心,这是因为Maple 系统中已有的两个函数——norm 和trace 被linalg 中的同名函数所覆盖了。
原来系统中这两个函数分别是用于计算多项式的范数(norm )和程序调试跟踪的,一般情况下,在解决线性代数问题时用不到。
如果确实要用系统中的库函数,可以再用readlib 将其重新载入进来。
linalg 中的主要函数的详细介绍我们将留到本章第三节中完成,在这一节中,我们主要着眼于矩阵的基本运算,比如加法、乘法和乘幂等。
第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);, + 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(%);。
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 - 表达式合并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 - 不含平方项的因数分解函数7.4 多项式运算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 - 测试在一个区间上的连续性9.3 微分计算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函数Bessel I, 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 转换成matrix convert/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] 子函数包提供作用在场,欧几里得域,积分域和环上的线性代数算法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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(%);。