logo资料库

Maple中文使用教程.pdf

第1页 / 共176页
第2页 / 共176页
第3页 / 共176页
第4页 / 共176页
第5页 / 共176页
第6页 / 共176页
第7页 / 共176页
第8页 / 共176页
资料共176页,剩余部分请下载后查看
contents.pdf
Maple教程.pdf
计算机代数系统第一章 Maple基础(修订稿).pdf
1 初识计算机代数系统Maple
1.1 Maple简说
1.2 Maple结构
1.3 Maple输入输出方式
1.4 Maple联机帮助
2 Maple的基本运算
2.1 数值计算问题
2.1.1 有理数运算
2.1.2 复数运算
2.1.3 数的进制转换
2.2 初等数学
2.2.1 常用函数
2.2.2 函数的定义
2.2.3 Maple中的常量与变量名
2.2.4 函数类型转换
2.2.5 函数的映射—map指令
3 求 值
3.1 赋值
3.2 变量代换
3.3 假设机制
3.4 求值规则
4 数据结构
4.1 数据类型查询
4.2 序列, 列表和集合
4.2.1 序列
4.2.2 列表
4.2.3 集合
4.3 数组和表
4.4 其他数据结构
4.5 数据类型转换和合并
5 Maple高级输入与输出操作
5.1 写入文件
5.1.1 将数值数据写入到一个文件
5.1.2 将Maple语句写入一个文件
5.2 读取文件
5.2.1 读取数值数据
5.2.2 读取Maple的指令
5.3 与其它程序语言的连接
5.3.1 转换成FORTRAN或C语言
5.3.2 生成LATEX
计算机代数系统第二章 Maple微积分运算(修订稿).pdf
1 函数的极限和连续
1.1 函数和表达式的极限
1.2 函数的连续性
1.2.1 连续
1.2.2 间断
2 导数和微分
2.1 符号表达式求导
2.2 隐函数求导
2.3 函数的极值
2.3.1 函数的极值
2.3.2 条件极值
3 积分运算
3.1 不定积分
3.2 定积分
3.3 其它积分方法
3.3.1 三角和双曲积分
3.3.2 Dirac函数和Heaviside阶梯函数
3.3.3 指数积分
3.3.4 对数积分
3.3.5 椭圆积分
3.3.5 换元积分法和分部积分法
3.3 重积分和线积分
3.4 利用辅助手段积分
4 级 数
4.1 数值级数和函数项级数求和以及审敛法
4.2 幂级数
4.3 泰勒级数和劳朗级数
5 积分变换
5.1 拉普拉斯变换
5.2 傅里叶变换
5.4 其他积分变换
计算机代数系统第三章 线性代数.pdf
1多项式
1.1 多项式生成及类型测试
1.2 提取多项式系数
1.3 多项式的约数和根
1.3.1多项式的最大公约因式(gcd)/最小公倍因式(lcm)
1.3.2多项式的平方根(psqrt)和第n次方根(proot)
1.3.3 多项式相除的余式(rem)/商式(quo)
1.4 多项式转换及整理
1.4.1 将多项式转换成Horner形式
1.4.2 将级数转换成多项式形式
1.4.3 将级数转换成有理多项式(有理函数)
1.4.4合并多项式系数(合并同类项)
1.4.5 将多项式(或者值的列表)排序
1.4.6 多项式的因式分解
1.5 多项式运算
1.5.1 多项式的判别式
1.5.2 多项式的范数
1.5.3 bernoulli数及多项式
1.5.4 用Bernstein多项式近似一个函数
1.5.5 获取多项式的最高/最低次方
1.5.6 Euler数及多项式
1.5.7 多项式插值
1.5.8 计算自然样条函数
1.6 有理式
1.6.1获取表达式的分子/分母
1.6.2 有理表达式的标准化
1.6.3 将有理式转换为多项式与真分式和的形式
1.6.4 将浮点数转换为接近的有理数
2 矩阵基本运算
2.1 数组和向量
2.2 矩阵的建立
2.3 矩阵的基本运算
2.4 矩阵的求值
2.5 矩阵分解
2.5.1 LU分解
2.5.2 QR分解
3 矩阵的初等变换和线性方程组求解
3.1 矩阵的初等变换
3.2 线性方程组的解
3.3 最小二乘法求解线性方程解
3.4 正定矩阵
4 特征值、特征向量和矩阵的相似
4.1 矩阵的相似
4.2 特征值和特征向量
5 线性空间基本理论
5.1 基本子空间
5.2 正交基和Schmidt正交化
计算机代数系统第4章-方程求解.pdf
1 代数方程(组)求解
1.1 常用求解工具—solve
1.2 其他求解工具
1.2.1 数值求解
1.2.2 整数环中的方程(组)求解
1.2.3 递归方程的求解
1.2.4 不等式(组)求解
2 常微分方程求解
2.1 常微分方程的解析解
2.2 利用积分变换求解微分方程
2.3 常微分方程组的求解
2.4 常微分方程的级数解法
2.5 常微分方程的数值解法
2.5.1变步长龙格库塔法
2.5.2吉尔法求解刚性方程
2.5.3 经典数值方法
2.6摄动法求解常微分方程
3 偏微分方程求解初步
计算机代数系统第5章-图形制作.pdf
1 二维图形制作
1.1 基本二维绘图指令
1.2 二维参数绘图
1.3 数据点绘图
1.4 其它坐标系作图
2 三维绘图
2.1 基本三维绘图指令
2.2 三维参数绘图
3 特殊作图
3.1 图形的显示与合并
3.2 不等式作图
3.3 空间曲线绘图
3.4 隐函数作图
3.5 等高线与密度图
3.6 对数作图
3.7 高级作图指令
3.7.1在图形上加上文字
3.7.2根轨迹作图
3.7.3向量场与梯度向量场的作图
4 动 画
计算机代数系统第6章-程序设计.pdf
1编程基础
1.1算子
1.2 编程初体验
1.3 局部变量和全局变量
1.4 变量nargs, args与procname
2 基本程序结构
2.1 for 循环
2.2分支结构(条件语句)
2.3 while 循环
2.4递归子程序
3 子程序求值
3.1 参数
3.2 局部变量和全局变量
3.3 环境变量
4 嵌套子程序和记忆表
4.1 嵌套子程序
4.2 记忆表
5 返回子程序的子程序
5.1 牛顿迭代法
5.2 函数的平移
6 局部变量的进一步探讨
7 扩展Maple命令
8 程序调试
MAPLE 教程 第一章 Maple 基础———————————————————————————1 第二章 微积分运算——————————————————————————34 第三章 线性代数———————————————————————————67 第四章 方程求解———————————————————————————100 第五章 Maple 图形绘制————————————————————————122 第六章 Maple 程序设计————————————————————————137
第一章 Maple 基础 1 初识计算机代数系统 Maple 1.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可以更换输入输出格式: 从菜单“Options | Input Display和 Out Display下可以选择所需的输入输出格式. Maple 7 有 2 种输入方式: Maple 语言(Maple Notation)和标准数学记法(Standard Math - 1 -
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 theta ρ σ τ υ eta kappa iota lambda mu φ χ ψ ω nu xi pi omicron omega 有时候为了美观或特殊需要,可以采用 Maple 中的函数或程序设计方式控制其输出方式, upsilon sigma rho psi phi chi tau 如下例: > for i to 10 do printf("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 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 +2d 的含义是带符号的十进位整数,域宽为 2. 显然,这种输出方式不是我们想要的,为了 得到更美观的输出效果,在语句中加入换行控制符“\n”即可: > for i to 10 do printf("i=%+2d and i^(1/2)=%+6.3f\n", i, eval(sqrt(i))); od; i=+1 and i^(1/2)=+1.000 i=+2 and i^(1/2)=+1.414 i=+3 and i^(1/2)=+1.732 - 2 -
i=+4 and i^(1/2)=+2.000 i=+5 and i^(1/2)=+2.236 i=+6 and i^(1/2)=+2.449 i=+7 and i^(1/2)=+2.646 i=+8 and i^(1/2)=+2.828 i=+9 and i^(1/2)=+3.000 i=+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 proc ( := ( ) printf ,x y > niceP(2.4,2002.204); value of x=2.4000, value of y=2002.2040 1.4 Maple 联机帮助 "value of x=%6.4f, value of y=%6.4f" , x y , ) end proc 学会寻求联机帮助是掌握一个软件的钥匙. Maple有一个非常好的联机帮助系统, 它包含了 90%以上命令的使用说明. 要了解Maple的功能可用菜单帮助“Help”, 它给出Maple内容的浏览 表, 这是一种树结构的目录表, 跟有…的词条说明其后还有子目录, 点击这样的词条后子目录就 会出现( 也可以用Tab 键和up, down选定). 可以从底栏中看到函数命令全称, 例如, 我们选 graphics…, 出现该条的子目录, 从中选 2D…, 再选plot就可得到作函数图象的命令plot的完整帮 助信息. 一般的帮助信息都有实例, 我们可以将实例中的命令部分拷贝到作业面进行计算、演示, 由此可了解该命令的作用. 在使用过程中, 如果对一个命令把握不准, 可用键盘命令对某个命令进行查询. 例如, 在命 令区输入命令“?plot”(或help(plot);), 然后回车将给出plot命令的帮助信息, 或者将鼠标放在选 定的要查询的命令的任何位置再点击菜单中的“Help”即可. 2 Maple 的基本运算 2.1 数值计算问题 算术是数学中最古老、最基础和最初等的一个分支, 它研究数的性质及其运算, 主要包括自 然数、分数、小数的性质以及他们的加、减、乘、除四则运算. 在应用 Maple 做算术运算时, 只 需将 Maple 当作一个“计算器”使用, 所不同的是命令结束时需加“;”或“:”. 在 Maple 中, 主要的算术运算符有“+”(加)、“–”(减)、“*”(乘)、“/”(除)以及“^”(乘方 或幂,或记为**), 算术运算符与数字或字母一起组成任意表达式, 但其中“+”、“*”是最基本 的运算, 其余运算均可归诸于求和或乘积形式. 算术表达式运算的次序为: 从左到右, 圆括号最 先, 幂运算优先, 其次是乘除,最后是加减. 值得注意的是, “^”的表达式只能有两个操作数, 换 言之, 是错误的, 而“+”或“*”的任意表达式可以有两个或者两个以上的操作数. cba ^^ Maple 有能力精确计算任意位的整数、有理数或者实数、复数的四则运算, 以及模算术、硬 - 3 -
件浮点数和任意精度的浮点数甚至于矩阵的计算等等. 总之, Maple 可以进行任意数值计算. 但是, 任何软件或程序毕竟只是人们进行科学研究的一种必要的辅助, 即便它有很多优点, 但也有它的局限性, 为了客观地认识数学软件、认识 Maple, 下面通过两个简单例子予以说明. > 3!!!; 第一个简单的数值计算实例想说明 Maple 数值计算的答案的正确性: 2601218943565795100204903227081043611191521875016945785727541837850835631156947382240678577958130457082619920575892 2472595366415651620520158737919845877408325291052446903888118841237643411919510455053466586162432719401971139098455 3672727853709934562985558671936977407000370043078375899742067678401696720784628062922903210716166986726054898844551 4257193985499448939594496064045132362140265986193073249369770477606067680670176491669403034819961881455625195592566 9188308255149429475965372748456246288242345265977897377408964665539924359287862125159674832209760295056966999272846 7056374713753301924831358707612541268341586012944756601145542074958995256354306828863463108496565068277155299625679 0845235702552186222358130016700834523443236821935793184701956510729781804354173890560727428048583995919729021726612 2912984205160675790362323376994539641914751755675576953922338030568253085999774416757843528159134613403946049012695 4202883834710136373382448450666009334848444071193129253769465735433737572477223018153403264717753198453734147867432 7048457983786618703257405938924215709695994630557521063203263493209220738320923356309923267504401701760572026010829 2880423356066430898887102973807975780130560495763428386830571906622052911748225105366977566030295740433879834715185 5260280533386635713910104633641976909739743228599421983704697910995630338960467588986579571117656667003915674815311 5943980043625399399731203066490601325311304719028898491856203766669164468791125249193754425845895000311561682974304 6411425380748972817233759553806617198014046779356147936352662656833395097600000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000 上述运算结果在 IBM PC 机(1G, 128M)上计算只需要 0.01 秒, 得到如此复杂的结果(1747 位), 一个自然的问题是: 答案正确吗? 为了回答这个问题, 我们借助于数值分析方法, 由 Stiring 公式 n ! ≈ π 2 nn ⋅ n ⋅ exp( − n ) 可得: .2!720 ≈ 60091 × 1746 10 , 前三位数字与 Maple 输出结果相同, 且两者结果均为 1747 位. 另外, 在 720!的计算中, 5 的因子的个数为: 720 5 ⎡ ⎢⎣ ⎤ ⎡+⎥⎦ ⎢⎣ 720 5 2 ⎤ ⎡+⎥⎦ ⎢⎣ 720 5 3 ⎤ ⎡+⎥⎦ ⎢⎣ 720 5 4 ⎤ =⎥⎦ 178 这些 5 与足够多的 2 相乘将得到 178 个 0, 而 Maple 的输出结果中最后 178 位数为零. 由此, 可 以相信 Maple 结果的正确性. 另一个例子则想说明 Maple 计算的局限性: ( − 8 3/1 ) ( ? − 8 = 6/2 ) = ? Maple 在处理问题时, 为了避免失根, 从不求算术式的近似值, 分数则化简为既约分数. 因 此, 在 Maple 中很容易得到: ( − 8 3/1 ) ( 8 −= ) 6/2 显然这是错误的. 这一点可以从代数的角度予以分析. ( − 不妨设 ) 3/18 -2 是其实数结果. x= , 则 =+x 3 8 0 , 即 ( x + )(2 x 2 − 2 x + )4 = 0 , 显然 ( ) 3/18− 有 3 个结果, - 4 -
另一方面, 设 ( − ) 6/28 x= , 则 −+x 6 )8( 2 = 0 , 即: 3 ( x + )(8 x 3 − )8 = ( x + )(2 x − )(2 x 2 − 2 x + )(4 x 2 + 2 x + )4 = 0 显然( 6/28− ) 有 6 个结果, -2、2 是其实数结果. 这个简单的例子说明了Maple在数值计算方面绝对不是万能的, 其计算结果也不是完全正 确的, 但是, 通过更多的实验可以发现: Maple只可能丢失部分结果, 而不会增加或很少给出完 1.000000000 1.732050807I ). 这一点提醒 全错误的结果(如上例中Maple的浮点数结果皆为 我们, 在利用Maple或其他任何数学软件或应用程序进行科学计算时, 必须运用相关数学基础知 识校验结果的正确性. + 尽管Maple存在缺陷(实际上, 任何一个数学软件或程序都存在缺陷), 但无数的事实说明 Maple仍然不失为一个具有强大科学计算功能的计算机代数系统. 事实上, Maple同其他数学软 件或程序一样只是科学计算的一个辅助工具, 数学基础才是数学科学中最重要的. 2.1.1 有理数运算 作为一个符号代数系统, Maple 可以绝对避免算术运算的舍入误差. 与计算器不同, Maple 从 来不自作主张把算术式近似成浮点数, 而只是把两个有公因数的整数的商作化简处理. 如果要 求出两个整数运算的近似值时, 只需在任意一个整数后加“.”(或“.0”), 或者利用“evalf”命 令把表达式转换成浮点形式, 默认浮点数位是 10 (即: Digits:=10, 据此可任意改变浮点数位, 如 Digits:=20). > 12!+(7*8^2)-12345/125; > 10!; 100*100+1000+10+1; (100+100)*100-9; > big_number:=3^(3^3); > length(%); big_number := 7625597484987 13 上述实验中使用了一个变量“big_number”并用“:=”对其赋值, 与 Pascal 语言一样为一个 变量赋值用的是“:=”. 而另一个函数“length”作用在整数上时是整数的十进制位数即数字的 长度. “%”是一个非常有用的简写形式, 表示最后一次执行结果, 在本例中是上一行输出结果. 再看下面数值计算例子: - 5 - > 123456789/987654321; > evalf(%); 13717421 109739369 .1249999989 11975048731 25 3628800 11011 19991
1)整数的余(irem)/商(iquo) 命令格式: irem(m,n); #求 m 除以 n 的余数 irem(m,n,'q'); #求m除以n的余数, 并将商赋给q iquo(m,n); #求 m 除以 n 的商数 iquo(m,n,'r'); #求m除以n的商数, 并将余数赋给r 其中, m, n 是整数或整数函数, 也可以是代数值, 此时, irem 保留为未求值. > irem(2002,101,'q'); # 求 2002 除以 101 的余数, 将商赋给q > iquo(2002,101,'r'); # 求 2002 除以 101 的商, 将余数赋给r > q; #显示q > r; #显示r > irem(x,3); 83 19 19 83 irem ,x 3 ) ( 2)素数判别(isprime) 素数判别一直是初等数论的一个难点, 也是整数分解问题的基础. Maple 提供的isprime 命令 可以判定一个整数 n 是否为素数. 命令格式: isprime(n); 如果判定 n 可分解, 则返回 false, 如果返回 true, 则 n“很可能”是素数. > isprime(2^(2^4)+1); > isprime(2^(2^5)+1); true false 上述两个例子是一个有趣的数论难题。形如 nF = n 22 + 1 的数称为Fermat数, 其中的素数称 为Fermat素数, 显然, F0=3、F1=5、F2=17、F3=257、F4=65537 都是素数. Fermat曾经猜想所有的 Fn都是素数, 但是Euler在 1732 年证明了F5=641•6700417 不是素数. 目前, 这仍是一个未解决的 问题, 人们不知道还有没有Fermat素数, 更不知道这样的素数是否有无穷多. 3) 确定第 i 个素数(ithprime) 若记第 1 个素数为 2,判断第 i 个素数的命令格式: ithprime(i); > ithprime(2002); > ithprime(10000); 17401 104729 4) 确定下一个较大(nextprime)/较小(prevprime)素数 当 n 为整数时,判断比 n 稍大或稍小的素数的命令格式为: nextprime(n); prevprime(n); > nextprime(2002); - 6 -
> prevprime(2002); 2003 1999 5) 一组数的最大值(max)/最小值(min) 命令格式: max(x1,x2,…,xn); #求x1,x2,…,xn中的最大值 min(x1,x2,…,xn); #求x1,x2,…,xn中的最小值 > max(1/5,ln(3),9/17,-infinity); ( > min(x+1,x+2,y); ) ln 3 min ,y ( + x ) 1 6)模运算(mod/modp/mods) 命令格式: e mod m; # 表达式 e 对 m 的整数的模运算 modp(e,m); # e对正数 m 的模运算 mods(e,m); # e对 m 负对称数(即 -m)的模运算 `mod`(e,m); # 表达式e对m的整数的模运算, 与e mod m等价 值得注意的是, 要计算 i^n mod m(其中 i 是一整数), 使用这种“明显的”语法是不必要的, 因 为在计算模 m 之前, 指数要先在整数(可能导致一个非常大的整数)上计算. 更适合的是使用惰性 运算符“&^”即: i &^n mod m, 此时, 指数运算将由 mod 运算符智能地处理. 另一方面, mod 运 算符的左面优先比其他运算符低, 而右面优先高于+和-, 但低于*和/. > 2002 mod 101; > modp(2002,101); > mods(49,100); 83 83 > mods(51,100); 49 > 2^101 mod 2002; # 同 2 &^101 mod 2002; -49 1124 7)随机数生成器(rand) 命令格式: rand( ); #随机返回一个 12 位数字的非负整数 rand(a..b); #调用 rand(a..b)返回一个程序, 它在调用时生成一个在范围[a, b]内的随机数 > rand(); > myproc:=rand(1..2002): > myproc(); > myproc(); 427419669081 1916 - 7 -
分享到:
收藏