Mathematica作为一个优秀的符号计算系统
- 格式:doc
- 大小:140.50 KB
- 文档页数:21
Mathematica 数学与符号运算软件介绍Mathematica 是Wolfram 独创的旗帜产品;旨在为研发和教育工作提供技术计算平台。
基于Wolfram 语言,Mathematica 与其他核心Wolfram 产品可以百分百兼容。
Mathematica 以卓越的技术和简便的使用方法享誉全球,在此基础上,它提供了单个集成并且持续扩展的系统,涵盖了最广最深的技术计算功能。
现在利用Mathematica Online (在线),它还能通过网页浏览器实现云端的完美访问,以及在所有现代桌面系统上的本地访问。
通过30 多年来的精心研发和不断探索,Mathematica 在许多领域独树一帜,在当今技术计算环境和工作流程中表现卓著。
Mathematica 11 是其30 年发展历程中的一座重要里程碑,显著拓展了Mathemtcatica 的应用领域并引入了众多技术革新,为所有Mathematica 用户提供了更高级别的功能和效用。
秉承着将所有领域的计算和知识进行集成和自动化这一长期目标,Mathematica 的每个新版本都让用户可以对所并入的新领域以常规流程进行访问。
如果您想求解PED(偏微分方程)并将其三维打印,Mathematica 11 为此提供了集成工具,再一次极大扩展了任意等级用户都可常规进行的跨域项目范围,从而让任意等级的用户都可常规完成。
Mathematica 11 构建于Wolfram 在神经网络计算、音频集成和语言学计算等众多领域的最新研发突破的基础上。
Mathematica 的现有用户也会发现该版本在界面、语言以及算法深度和效率上进行了大量实用改进。
现代技术计算的唯一选择一个全面集成的大型系统Mathematica 具有涵盖所有技术计算领域的将近5,000 个内置函数——所有这些都经过精心制作,使其完美地整合在Mathematica 系统中。
不仅仅是数字,也不仅仅是数学,而是包罗万象基于30 多年来的持续开发,Mathematica 在所有技术计算领域表现卓著,包括网络、图像、几何、数据科学、可视化、机器学习等等。
Mathematica 5.0使用简介Mathematica是美国Wolfram Research公司研制的一种数学软件, 集文本编辑、符号运算、数值计算、逻辑分析、图形、动画、声音于一体, 与Matlab、Maple一起被称为目前国际上最流行的三大数学软件. 它以符号运算见长, 同时具有强大的图形功能和高精度的数值计算功能. 在Mathematica中可以进行各种符号和数值运算, 包括微积分、线性代数、概率论和数理统计等数学各个分支中公式的推演、数值求解非线性方程、最优化问题等,可以绘制各种复杂的二维图形和三维图形,并能产生动画和声音.Mathematica系统与常见的高级程序设计语言相似, 都是通过大量的函数和命令来实现其功能的. 要灵活使用Mathematica, 就必须尽可能熟悉各种内部函数(包括内置函数和软件包函数). 由于篇幅限制, 本附录以2003年发布的Mathematica 5.0为基础, 简单分类介绍软件系统的基本功能, 及与微积分有关的函数(命令)的使用, 其他功能请读者自行查阅帮助或有关参考文献. 另外, 为节省篇幅, 本附录有时也将键盘输入和系统输出尽可能写在同一行, 并省略某些输出, 读者可上机演示观看结果1 启动与运行Mathematica是一个交互式的计算系统, 计算是在用户和Mathematica互相交互、传递信息数据的过程中完成的. Mathematica系统所接受的命令都被称作表达式, 系统在接受了一个表达式之后就对它进行处理(即表达式求值), 然后再把计算结果返回.1.1 启动假设在Windows环境下已安装好Mathematica 5.0, 那么进入系统的方法是: 在桌面上双击Mathematica图标(图1-1)或从“开始”菜单的“程序”下的“Mathematica 5”联级菜单下单击Mathematica图标(图1-2)均可.图1-1 图1-2启动了Mathematica后, 即进入Mathematica的工作环境----Notebook窗口(图1-3), 它像一张长长的草稿纸, 用户可以在上面输入一行或多行的表达式, 并可像处理其他计算机文件一样, 对它进行创建、打开、保存、修改和打印等操作.第一个打开的Notebook工作窗口, 系统暂时取名Untitled-1, 直到用户保存时重新命名为止, 必要时用户可同时打开多个工作窗口, 系统会依次暂时取名为Untitled-2、Untitled-3 .图1-3 Mathematica的工作窗口在工作窗口中, 你就可键入想计算的东西, 比如键入2+3, 然后同时按下Shift键和Enter键或者只按下数字键盘区(右小键盘区)的Enter键, 这时系统开始计算并输出计算结果5, 同时自动给输入和输出附上次序标识In[1]:=和Out[1]= ;若再输入第二个表达式a=1+Abs[-3]-2*Sin[Pi/2]后, 按Shift+Enter输出结果, 系统也会作类似处理, 窗口变化如图1-4.图1-4 完成运算后的Mathematica的窗口1.2 基本命令Mathematica的基本命令有如下两种形式:(1)表达式/ 执行表达式运算, 显示结果, 并将结果保存在Out[x]中;(2)变量=表达式/ 除(1)的功能外, 还对变量进行赋值.注意:命令行后面如果加上分号“;”, 那么就不显示运算结果.1.3 退出要退出Mathematica, 可单击关闭窗口按钮或从菜单“File”中选择“Exit”(或“Close”)或按Ctrl (或Alt)+F4, 这时如果窗口中还有未保留的内容, 系统会显示一对话框, 询问是否保存. 单击“否(N)”,则关闭窗口;单击“是(Y)”,则调出“SaveNotebook”对话框, 等待你输入文件名, 保存“Notebook”的内容后再退出. 所保存的内容是以“.nb”为扩展名的Mathematica文件, 以后需要时, 可通过菜单“File”中的“Open”调入使用.1.4 使用联机帮助系统在使用Mathematica的过程中, 常常需要了解一个命令的详细用法, 或者想知道系统中是否有完成某一计算的命令, 联机帮助系统是最详细、最方便的资料库. 通常可使用如下两种求助方法:(1) 获取函数和命令的帮助在Notebook界面下, 用? 或?? 可向系统查询运算符、函数和命令的定义和用法. 例如查询函数Abs的用法可用Abs / 系统将给出调用Abs的格式及Abs命令的功能(如果用两个问号“??”, 则信息会更详细些);Abs* / 给出所有以Abs这三个字母开头的命令.(2) 使用Help菜单任何时候都可以通过按F1键或点击菜单项Help, 选择Help Browser调出帮助菜单, 供你选择浏览各种类的命令格式及功能.1.5 说明在输入时要注意如下几个规则:(1) 输入的字母严格区分大小写. 系统预定义变量和函数名第一字母一定要用大写(可参见表1-1和表1-2);(2) 变量名不能以数字开头, 当中也不能出现空格, 否则数字与字母之间或空格之间系统会默认是相乘关系, 例如x2可作变量名, 但2x表示2*x;(3) 严格区分花括号、方括号与圆括号, 函数后面的表达式一定要放在方括号内, 而算术表达式中的括号只允许用圆括号(无论有多少层);(4) 数值计算时, 输出的结果将尽量保持精确值, 即结果中有时会含有分式、根式或函数的原形式. 例如In[1]:=1/2+1/3 Out[1]= 5 6In[2]:=Sqrt[4+8] Out[2]=In[3]:=Sin[1+2] Out[3]= Sin[3]这时, 若要得到小数表示的结果(近似数), 可在命令行后面加上“//N”或引用N函数, 函数格式为N[表达式, 有效数位]. 例如In[1]:=1/2+1/3 //N Out[1]= 0.833333In[2]:=N[Sqrt[4+8],10] Out[2]=3.464101615(5) 特殊字母、符号的输入,可使用热键(见表1-3), 当然也可利用符号输入平台: 先从菜单“File”中的“Palettes”打开基本输入面板“4 BasicInput”窗口(见图1-5), 点击相应的符号即可实现数学运算的输入.符号输入平台(菜单项“File→Palettes”)中含有9种输入面板, 利用它们可大大方便字符、命令、函数的输入, 尤其是“3 BasicCalculation”窗口(“基本计算面板”,可见图1-5), 其中含有常用的7大类函数的输入面板, 需要应用某类函数的栏目时, 只须点击相应栏目的左端折叠标志符号“”, 即变成展开标志符号“∇”, 同时打开它所含下级的函数(类)输入面板, 最后找到所需的命令单击选定. 例如要输入一个2阶方阵, 可点击“File→Palettes→3 BasicCalculation →Lists andMatrices →Creating Lists and Matrices”,再点击选定“⎛⎫⎪⎝⎭”即可.图1-5 Mathematica的符号输入平台(6) 前面旧的命令行In[x], 可通过光标的上、下移动,对它进行编辑、修改再利用;对前面计算好的结果Out[x], 也可使用如下的方式调用:% / 代表上面最后一个输出结果;%% / 代表上面倒数第二个输出结果;%n / 代表上面第n个输出结果, 即Out[n].2 变量与函数变量和函数是Mathematica中广泛应用的重要概念, 对它们的操作命令非常丰富, 这里仅介绍几种基本的操作方法, 其它功能请读者随着学习的深入, 自己逐步去体会.2.1 变量赋值在Mathematica中, 运算符号“=”起赋值作用, 此处的“=”应理解为给它左边的变量赋一个值, 这个值可以是一个数值、一个数组、一个表达式,也可以是一个图形. 赋值有如下的基本形式:(1) 变量名=值/ 给一个变量赋值(2) 变量名1=变量名2=值/ 给二个变量赋相同值(3) {变量名1, 变量名2,…}={值1, 值2,…} / 给多个变量赋不同的值注意:变量一旦赋值后, 那么这个值将一直保留, 此后, 无论变量出现在何处, 都会用该值替代它, 直到你清除或再次定义它为止. 对于已定义的变量, 当你不再使用它的时候, 为防止它影响以后的运算, 最好及时清除它的值.清除变量值命令有如下两种形式:(1)变量名=.(2)Clear[变量名列表] /列表中列出的是要清值的变量名,之间用逗号分开例如In[1]:= x=y=2 Out[1]= 2In[2]:= s=2x+3y Out[2]= 10In[3]:= x=.In[4]:= s=2x+3y Out[4]= 6+2x2.2 变量替换表达式中的变量名(未赋值)就像一个符号, 必要时我们可用新的内容替换它. 变量替换格式如下:(1) 表达式/.变量名->值(2) 表达式/.{变量名1->值1, 变量名2->值2,…}例如In[1]:= 1+2x+3y/.{x->2,y->s+1} Out[1]= 5+3(1+s)注意: 变量替换与变量赋值的差异在于, 变量替换是暂时性的, 而变量赋值是长久性的.2.3 定义函数Mathematica系统提供了大量的内部函数让用户选用(可参见表1-2), 用户若有需要也可以自己定义新函数, 这些自定义的函数会加入到当前的系统中, 如同内部函数一样可被随时调用. 自定义函数的一般形式是:函数名[自变量名_]=表达式或函数名[自变量名_]:=表达式注意:下划线“_”是在自变量名的右边, 它表示左边的自变量是形式参数. 类似地, 可定义不少于两个自变量(多元)函数. 如二元函数定义为函数名[自变量名1_, 自变量名2_]=表达式In[1]:= f[x_]=x+3;{f[x],f[y],f[2]} Out[1]= {3+x,3+y,5} In[2]:= g[x_,y_]=x^2-y^2;In[3]:= g[1,2] Out[3]= 43 表与矩阵表是指形式上由花括号括起来的若干个元素, 元素之间用逗号分隔. 在运算中可对表作整体操作, 也可对表中的单个元素操作. 表可以表示数学中的集合、向量和矩阵, 也可以表示数据库中的一组记录. 表中的元素可以是任何数据类型的数值、表达式,甚至是图形或表格.3.1 表的基本操作(1) 建表: 表中元素较少时, 可在给出表名时又定义表中元素, 格式如下表名(变量名)={元素1,元素2, …}这里, 元素可以是不同类型的数据.经常地, 使用建表函数快速建表:表名=Table[通项公式, {循环变量,循环初值,循环终值,步长}]其中, 当循环初值或步长是1时可以省略, 循环范围还可多重设置.例如In[1]:= A={1,2,3};2+3A Out[1]= {5,8,11}In[2]:= t=Table[i+j,{i,2},{j,3}] Out[2]={{2,3,4},{3,4,5}}(2) 元素处理: 处理表元素常用的格式(函数)有A[[i]] \ 取表A中的第i个元素Part[A{i,j,…}] 或A[[{i,j,…}]] \ 取表A中的第i,j,..元素组成新表Part[A,i]=值或A[[i]]=值\ 给表A的第i个元素重新赋值3.2 矩阵的基本操作矩阵是表的特殊形式(二维表), 所有标准的表操作都可用于矩阵操作, 除此而外, 它具有很多特殊的运算函数, 下面就简单介绍几类常用的函数.(1) 创建特殊矩阵函数(表3-1)(2) 截取矩阵块函数(表3-2)(3) 矩阵的基本运算函数(表3-3)注意:[1] 向量也是表的特殊形式(一维表), 对它的操作命令很多是与矩阵操作相类似的, 这里就不在另列. 且在Mathematica的实际应用中, 是不区分行向量还是列向量的.[2] 矩阵(向量)间的相乘要用点乘符号“.”表3-1 创建特殊矩阵4 符号运算Mathematica是在一个完全集成环境下的符号运算系统, 它具有强大的处理符号表达式的能力, 代数运算、微分、积分和微分方程求解等都是很典型的例子.4.1 代数运算(1) 展开格式: Expand[表达式]注: 对多项式按幂次展开; 对分式展开分子, 各项除以分母.(2) 分解因式格式: Factor[表达式]注: 对多项式进行因式分解; 对分式分子、分母各自因式分解.(3) 化简格式: Simplify[表达式]例如In[1]:= Expand[(1+2x)^2] Out[1]= 1+4x+4x2In[2]:= Factor[%] Out[2]= (1+2x)2In[3]:= Simplify[1/(1+1/(1+x))+1/(2(1-x))] Out[3]=11 222xx x++-+说明:代数运算还有很多操作函数, 读者必要时可从“File→Palettes→2 AlgebraicManipulation ”的窗口面板中选用.4.2 微分(1) 一阶导数格式: D[函数,自变量] / 函数关于指定自变量的导数(2) 高阶导数格式: D[函数,{自变量,n}] / 函数关于指定自变量的n阶导数(3) 混合偏导数格式: D[函数, x , y,…] / 函数关于自变量x , y,…的混合偏导数(4) 全微分格式: Dt[函数] / 函数关于各变量的全微分例如In[1]:= D[Sin[x],x] Out[1]= Cos[x]In[2]:= D[Sin[2x],{x,2}] Out[2]= -4Sin[2x]In[3]:= D[Sin[x*y],x,,y] Out[3]= Cos[xy]-xySin[xy]In[3]:= Dt[Sin[x*y],x,y] Out[3]= Cos[xy](yDt[x]+xDt[y])4.3 积分(1) 不定积分格式: Integrate[函数,自变量](2) 多重不定积分格式: Integrate [函数,自变量1,自变量2]或Integrate [函数,自变量1,自变量2,自变量3](3) 定积分格式: Integrate[函数,{自变量,下限,上限}]或NIntegrate[函数,{自变量,下限,上限}] / 数值积分(4) 多重定积分格式: Integrate[函数,{自变量1,下限1,上限1},…]或NIntegrate[函数,{自变量,下限,上限},…] / 数值积分例如In[1]:= Integrate[Sin[x]+1,x] Out[1]= x-Cos[x]In[2]:= Integrate[4x*y+1,x,y] Out[2]= xy+x2y2In[3]:= Integrate[Sin[x]+1,{x,0,1}] Out[3]= 2-Cos[1]In[4]:= NIntegrate[Sin[x]+1,{x,0,1}] Out[4]= 1.4597In[5]:= Integrate[4x*y+1,{x,0,1},{y,0,1}] Out[2]= 24.4 常微分方程的准确解在Mathematica中, 使用函数DSolve[]可以求解线性和非线性的常微分方程(组). 求特解时, 可将定解的条件作为方程的一部分.格式: DSolve[方程,未知函数,自变量]例如In[1]:= DSolve[y’[x]==2x,y[x],x] Out[1]={{y[x]->x2+C[1]}} In[2]:= DSolve[{y’[x]==2y[x],y[0]==3},y[x],x] Out[2]={{y[x]->3e2x }}In[3]:= DSolve[{y’[x]==z[x],z’[x]== -y[x]},{y[x],z[x]},x]Out[3]={{y[x]->C[1]Cos[x]+C[2]Sin[x], z[x]->C[2]Cos[x] -C[1]Sin[x]}}注: 大多数情况, 微分方程的精确解是不能用初等函数表示出来的, 这时, 只能求其数值解, 并结合作图功能画出解的大致图形, 这些内容后面再作介绍.4.5 幂级数展开格式: Series[函数表达式,{变量,展开点x0,阶数n}]例如In[1]:= Series [Sin[x],{x,0,5}] Out[1]=3560[]6120x xx x -++注:去掉表达式中的误差项O[x]n 可调用Normal[] 函数.5 数值计算Mathematica的优势在于符号运算, 但对于数值问题, 它也提供了丰富的数值计算功能, 例如求和(有限或无限)、求极限值、解代数方程、求非线性方程数值解和求微分方程数值解等。
学会使用Mathematica进行符号计算和科学研究一、介绍MathematicaMathematica是一种强大的数学软件,可以进行符号计算和科学研究。
它是现代科学和工程领域中广泛使用的计算机代数系统之一。
Mathematica具有丰富的库和算法,可进行各种数学计算、数据处理、图形绘制和符号计算。
学会使用Mathematica将有助于提高科学研究的效率和准确性。
二、Mathematica基础知识在开始使用Mathematica之前,我们首先需要了解一些基础知识。
Mathematica所有的表达式都由头部和部分组成,并使用方括号或圆括号进行包围。
头部指定了表达式的类型,例如函数、符号或数值。
部分则是参数或操作数。
Mathematica是一种高级编程语言,支持各种数学和计算操作。
我们可以使用内置函数进行常见的数学运算,如加法、减法、乘法和除法。
此外,还可以进行复杂数学运算,如微分、积分、方程求解等。
三、符号计算符号计算是Mathematica的一个重要功能。
在符号计算中,我们可以处理和操作符号表达式,而不只是数值。
这可以使我们在研究符号和代数结构时更加灵活和精确。
符号计算允许我们定义变量,并进行代数运算。
例如,我们可以定义一个符号变量x,并对其进行算术运算,如加法和乘法。
我们还可以使用符号变量进行函数定义和求导。
除了基本的代数运算,Mathematica还支持符号计算中的其他功能,如方程求解、级数展开、极限计算和泰勒展开。
这些功能在科学研究中非常有用,可以帮助我们解决复杂的数学问题。
四、科学研究应用Mathematica广泛用于各个科学领域的研究。
以下是其中一些常见的应用:1. 数学研究:Mathematica可以进行各种数学研究,如数论、代数学、几何学等。
它提供了各种数学函数和算法,可用于解决数学难题和证明数学命题。
2. 物理学应用:在物理学中,Mathematica可用于建模、仿真和求解物理问题。
Mathematica强大的数值计算和符号运算数学专用软件Mathematica是由美国物理学家Stephen Wolfram领导的Wolfram Research开发的数学系统软件。
它拥有强大的数值计算和符号计算能力,在这一方面与Maple类似,但它的符号计算不是基于Maple上的,而是自己开发的。
Mathematica系统介绍Mathematica的基本系统主要是用C语言开发的,因而可以比较容易地移植到各种平台上,Mathematica是一个交互式的计算系统,计算是在用户和Mathematica互相交换、传递信息数据的过程中完成的。
Mathematica系统所接受的命令都被称作表达式,系统在接受了一个表达式之后就对它进行处理,然后再把计算结果返回。
Mathematica对于输入形式有比较严格的规定,用户必须按照系统规定的数学格式输入,系统才能正确地处理,不过由于3.0版本(及以后版本)引入输入面板,并且可以修改、重组输入面板,因此以前版本输入指令时需要不断切换大小写字符的繁琐方式得到很好的改善。
3.0版本可以用各种格式保存文件和剪贴内容,包括RTF、HTML、BMP等格式。
Mathematica是一个功能强大的数学软件,也是目前国内外最常用的数学软件之一。
该软件不但可以解决数学中的数值计算问题,还可以解决符号演算问题,并且能够方便地绘出各种函数图形。
不管是一个正在学习的学生,还是教师或科研人员,当在学习或科学研究中遇到棘手的数学问题时,Mathematica会提供的各种命令,可以避免做繁琐的数学推导和计算,帮助方便地解决所遇到的很多数学问题,使能省出更多的时间和精力做进一步的学习和探索。
目前,我们在国内外的科研论文、教材等很多地方都能看到Mathematica的身影。
此外,Mathematica 具有简单、易学、界面友好和使用方便等特点,只要你有一定的数学知识并了解计算机的基本操作方法,就能快速掌握Mathematica大部分主要功能,并能用Mathematica解决在学习、教学和科学研究中遇到的数学求解问题。
Mathematica 入门一、引 言Mathematica 是美国Wolfram 公司开发的一个功能强大的数学软件系统,它主要包括:数值计 算、符号计算、图形功能和程序设计。
本指导书力图在不大的篇幅中给读者提供该系统的一个简要的介绍. 指导书是按Mathematica 4.0版本编写的, 但是也适用于Mathematica 的任何其它图形 界面的版本。
Mathematica 在数值计算、符号运算和图形表示等方面都是强有力的工具,并且其命令句法惊 人地一致, 这个特性使得Mathematica 很容易使用。
不必担心你还不太熟悉计算机.本入门将带你 迅速了解Mathematica 的基本使用过程, 但在下面的介绍中,我们假定读者已经知道如何安装及启动Mathematica. 此外,始终要牢记的几点是:● Mathematica 是一个敏感的软件. 所有的Mathematica 函数都以大写字母开头;● 圆括号( ),花括号{ },方括号[ ]都有特殊用途, 应特别注意;● 句号“.”,分号“;”,逗号“,”感叹号“!”等都有特殊用途, 应特别注意;● 用主键盘区的组合键Shfit+Enter 或数字键盘中的Enter 键执行命令.二、一般介绍1。
输入与输出例1 计算 1+1:在打开的命令窗口中输入1+2+3并按组合键Shfit+Enter 执行上述命令,则屏幕上将显示:In [1] : =1+2+3Out [1] =6这里In [1] : = 表示第一个输入,Out [1]= 表示第一个输出,即计算结果。
2. 数学常数Pi 表示圆周率π; E 表示无理数e; I 表示虚数单位i ;Degree 表示π/180; Infinity 表示无穷大。
注:Pi,Degree,Infinity 的第一个字母必须大写,其后面的字母必须小写.3. 算术运算Mathematica 中用“+”、“—”、“*”、“/” 和“^"分别表示算术运算中的加、减、乘、除和 乘方。
Mathematica简介Mathematica是一款强大的数学软件,由Stephen Wolfram和Wolfram Research公司开发。
它可以进行符号计算、数值计算、数据分析和可视化等各种数学任务。
Mathematica提供了一个交互式的界面,使用户能够轻松地输入数学表达式和命令,并得到相应的结果。
Mathematica的功能非常广泛,涵盖了数学、物理、工程、统计学等多个领域,被广泛用于教学、研究和工程应用。
特点强大的符号计算能力Mathematica可以进行符号计算,能够处理各种数学表达式、方程、不等式等。
它能够对表达式进行简化、展开、合并等操作,并能够在数学中进行推导和证明。
Mathematica还提供了大量的预定义函数和符号,可以直接使用,或者通过定义新的函数和符号来进一步扩展功能。
多种数值计算方法除了符号计算,Mathematica还提供了各种数值计算方法。
它可以进行数值积分、数值求解方程、数值逼近等操作。
Mathematica使用高精度算法进行数值计算,可以得到非常精确的结果。
同时,Mathematica还支持并行计算和分布式计算,可以利用多台计算机进行计算,加快计算速度。
数据分析和可视化功能Mathematica拥有强大的数据分析和可视化功能。
它可以导入各种数据格式,包括Excel、CSV、数据库等,进行数据清洗、分析和建模。
Mathematica提供了丰富的数据处理函数和图形函数,可以对数据进行统计分析、机器学习、图像处理等操作。
同时,Mathematica还可以生成各种图表、图形和动画,直观地展示数据和结果。
丰富的拓展包和资源Mathematica拥有丰富的拓展包和资源。
它提供了大量的内置函数和算法,涵盖了数学、物理、工程、统计学等多个领域。
此外,Mathematica还支持第三方拓展包,用户可以下载和安装各种拓展包,扩展Mathematica的功能。
对于数学教育和研究领域的用户,Mathematica还提供了丰富的教程、文档和示例代码,用户可以参考和学习。
第4节Mathematica基础Mathematica作为一个优秀的符号计算系统, 不同于一般的计算软件或简单编程, 它以符号记录计算的精确结果, 能达到任意位的精度(只要你拥有足够的内存). 并且, 它还有教强的作图以及简单的编程功能. 因此, 在科学研究, 在工程应用, 在诸多领域中,Mathematica 将是一个得心应手的工具.希望这些简单的讲述,能让大家对Mathematica软件有个初步的了解. 其实Mathematica本身的帮助是非常强大的, 相信在你上手这个软件之后, 会更轻松地读懂并发现它的帮助中的各项内容的.适用版本:简记Mathematica为math math 1.2 for DOS,math 2.2for Windows, math 3.0 for win95, math 3.0 for UNIX.教程目录:01 简介02 试试你的math 03 基本计算04 代数变换05 微积分运算(2-1) 06 微积分运算(2-2)07 矩阵/表的运算08 表的运算.2 09 二维图形10 三维图形11 基本图元作图12 表达式与纯函数13 转化规则与参数14 过程编程15 程序包4.1简介我们平日用到编程语言时, 大家都知道编程中用到的整型,实型, 甚至双精度数, 都只是一个近似的数, 其精度有限, 有效数字有限, 在很多时候达不到实际需要的要求. 符号计算与数值计算的区别就在于符号计算以准确值记录计算的每一步的结果, 如果需要时, 可以将精确表示按需要计算成任意位数的小数表示出来(只要机器内存足够大). 最常见的符号计算系统有maple, mathematica, redues等,这些软件各有侧重, 比如,maple内存管理及速度比math 好, 但是图形方面不如math; redues没找到, 没用过, 未明; 而用得较多的matlab编程环境特好, 和C语言接口极其简单, 符号计算采用Maple内核, 数值计算功能很强. 所以, 就实用而全面来说,math是一个很好用的软件.math软件不仅能够进行一般的+-*/及科学函数如Sin, Log等计算, 而且能进行因式分解, 求导, 积分, 幂级数展开, 求特征值等符号计算, 并且, math有较强的图元作图, 函数作图, 三维作图及动画功能.4.2试试你的mathmath自发布以来, 目前比较常见的有math 1.2 for DOS,math 2.2 for Windows, math 3.0/4.0 for win95, math 3.0/4.0 for UNIX.DOS下的math的好处就是系统小, 对机器要求低, 在386机器4M内存下就能运行得很好(机器再低点也是可以用的, 比如说286/2M). 在DOS下直接键入math<回车>即可进入math系统, 出现的提示符In[1]:=,这时就可以进行计算了, 键入math函数, 回车即可进行运算. 如果输入的Quit, 则退出math. 这里要注意的是, math区分大小写的, 一般math的函数均以大写字母开始的.windows下的math对机器要求就要高一些了, math3.0更是庞大,安装完毕有100M之多(2.2大约十多兆). 同windows下的其他软件一样,math可以双击图标运行, 在File菜单下有退出这一项. windows下的math有其优越性, 就是可以在windows下随心所欲地拷贝粘贴图形.math3.0更是能输入和显示诸如希腊字母, 积分符号, 指数等数学符号. DOS的math与windows下的一个区别是DOS的以回车结束一句输入,而windows的以Shift+回车结束一句输入. DOS下的提示符显示为In[数字]:=, 而windows下在结束输入后才显示出In[数字]:=及Out[数字]:=字样. (Out为输出提示符)下面试试几个例子:(In[数字]:=为提示符, 不用键入)In[1]:= 2^100 计算2的100次方In[2]:= s={{1,0,1},{0,1,0},{1,0,1}} 定义矩阵sIn[3]:= Eigenvalues[s] 计算s的特征值In[4]:= Plot[Sin[x],{x,0,Pi}] 在0,Pi间画SinIn[5]:= Plot[Cos[x],{x,0,Pi}] CosIn[6]:= Plot3D[Sin[x]Sin[y],{x,0,1},{y,0,2}] 三维作图以In[6]为例说明: math的函数都以大写字母开头的单词为函数名, Plot3D, Plot, Eigenvalues, Sin等, 常数也是如此, 如Pi. 函数名后的参数用[]括起, 逗号隔开. math的输出可以作为函数的输入对象, 你可以再试一个:In[7]:=Show[%%,%%%] 这里一个%代表上一个输出, 两个代表上两个... 也可以直接用Out[n]代表第n个输出.这里需要补充的是!command 执行DOS命令?name 关于name(函数等)的信息(可以使用通配符)??name 关于name的额外信息4.3 基本运算1. 算术运算符+加-减*乘/除^指数(乘也可用空格)N[expr]或expr //N 计算expr的数值(6位有效数字)N[expr, n] n表示小数的位数2. 数学函数Sqrt[x] x开方Exp[x] e的x方Log[x] x的自然对数Log[b,x] 以b为底, x的对数Sin[x], Cos[x], Tan[x], ArcSin[x], ArcCos[x] 三角函数Abs[x] |x|Round[x] 离x最近的整数Floor[x] 不超过x的最大整数Quotient[n,m] n/m的整数部分Mod[n,m] n/m的余数Random[] 0,1间随机数Max[x,y,...] Min[x,y,...] 最大数和最小数3. 常数Pi Pi=3.141592653589793...E e=2.71828...Degree Pi/180I i=Sqrt[-1]Infinity 无穷大Catalan Catalan常数.=0.915966ComplexInfinity 复无穷DirectedInfinity 有向的无穷EulerGamma 欧拉常数gamma=0.5772216GoldenRatio 黄金分割(Sqrt[5]-1)/2Indeterminate 不定值4. 逻辑运算符==, !=, >, >=, <, <=, !, &&, ||Xor 异或Implies 隐含If[条件,式1,式2] 如果条件成立, 值式1; 否则得式25. 变量a) 变量名以字母(一般小写)开头; 字母数字组成.(如x2为变量名; 而2x, 2*x, 2 x, x*2, x 2均是x乘以2).b) 赋值x=value; x=y=value; x=.(清除x值)c) 代换expr /. x->value 将式中x代换为valueexpr /. {x->xval, y->yval}下面就让我们以几个例子来结束本节:(大家还是注意, DOS下的Math, 只要输入In[num]:=后的指令后按回车, 而windows下则是按+回车.) 大家看看都有什么输出.In[1]:= 2.7+5.23In[2]:= 1/3+2/7In[3]:= 1/3+2/7 //NIn[4]:= N[Pi,100] 曾经有人问我, 你是怎么算出Pi的1000位而没有错误的, 其实很简单, 大家只要把上式的100改为1000即可.In[5]:= Sin[Pi/2]+Exp[2]+Round[1.2]In[6]:= 10<7 In[7]:= x=5; 如果在输入之后加上一个";", 则只运算不输出.IN[8]:= y=0 (所以In[7]和8完全可以合成一条x=5;y=0,假如我不需要x=5的输出)In[9]:= x>yIn[10]:= t=1+m^2In[11]:= t /. m->2In[12]:= t /. m->5aIn[13]:= t /. m->Pi //N4.4 代数变换上一节我们已经学习了Math里的基本运算及逻辑运算, 常用数学函数, 几个常见的常数, 以及变量的使用. 这一节, 我们来学学基本代数变换:Apart, Cancel, Coefficient, Collect, Denominator, Expand,ExpandAll,Exponent, Factor, Numerator, Short, Simplify,Together.Expand[expr] 多项式expr按项展开Factor[expr] 因子形式Simplify[expr] 最简形式In[1]:= Expand[(1+x)^2]In[2]:= Factor[%] 我们以前说过的哦, %是上一个输出, %%是上上个,%%%是上上上个, ..., %n是第n个输出(即Out[n])In[3]:= Simplify[%%] In[4]:= Integrate[x^2/(x^4-1),x]这是积分运算, 详情后叙In[5]:= D[%,x] 求导In[6]:= Simplify[%]ExpandAll[expr] 所有项均展开Together[expr] 通分Apart[expr] 分离成具有最简分母的各项Cancel[expr] 约去分子,分母的公因子Collect[expr] 合并In[1]:= e=(x-1)^2 (2+x)/((1+x)(x-3)^2)In[2]:= Expand[e]In[3]:= ExpandAll[e] 天哪, 那么复杂的式子, 其实还不算复杂了In[4]:= Together[e] In[5]:= Apart[%] In[6]:= Factor[%]Coefficient[expr, form] 表达式中form项的系数Exponent[expr, form] form的最高幂次Numerator[expr] 取分子Denominator[expr] 取分母expr //Short 以简短形式输出In[1]:= e=Expand[(1+3x+4y^2)^2]In[2]:= Coefficient[e, x]In[3]:= Exponent[e, y]In[4]:= q=(1+x)/(2(2-y))In[5]:= Denominator[%]In[6]:= Expand[(x+5y+10)^4]In[7]:= %//Short 把上式输出, 中间项省去, 以<<数字>>表示省去的项数.最后, 我们以例子来看看用符号名做客体的标志的好处In[1]:= 12metersIn[2]:= %+5.3metersIn[3]:= %/(25seconds)In[4]:= %/.meters->3.78084feet 哇, 一下子就把米制变为英尺了.4.5 微积分运算(2-1)学到上一节, 大家会发现怎么还停留在中学的计算中呢, 别急别急,慢慢来. 这一节, 大家就会看到微分D, Dt; 积分Integrate,NIntegrage; 和与积Sum, Product, NSum, NProduct. 下一节我们介绍解方程Solve, Eliminate, Reduce, NRoot, FindRoot, FindMinimum; 幂级数Series, Normal; 极限Limit; 特殊函数Fourier, InverseFourier, ...微分D[f, x] f对x求导D[f, x_1, x_2, ...] f对x_1, x_2, ...求导D[f, {x, n}] f对x求n次导Dt[f] 全微分dfDt[f, x] 全微商df/dxIn[1]:= D[x^n,x]In[2]:= D[f[x],x]In[3]:= D[2x f[x^2],x]In[4]:= D[x^n, {x, 3}]In[5]:= D[x^2 y^3, x, y]In[6]:= Dt[x^n]In[7]:= Dt[x y, x]积分Integrate[f,x] f对x积分Integrate[f, {x, xmin, xmax}, {y, ymin, ymax}, ...] 定积分NIntegrate[f, {x, xmin, xmax}, {y, ymin, ymax}, ...]计算积分的数值解In[1]:= Integrate[Sin[Sin[x]],x] 嘻嘻, 无法计算, 原样输出In[2]:= Integrate[Log[x], {x,0,6}] 啊, 广义积分也一样算In[3]:= Integrate[x^2+y^2, {x,0,1}, {y,0,1}]In[4]:= In[3]//N 如果你的上一条输入不是In[3],注意调整这一条的输入哦In[5]:= Integrate[Sin[Sin[x]], {x,0,1}] 呜呜~~~ 怎么还没法计算啊In[6]:= N[%] 或NIntegrate[Sin[Sin[x]], {x,0,1}] 呵呵~~~ 终于可以计算了.和与积Sum[f, {i, imin, imax}, {j, jmin, jmax}, ...]f对i, j, ...分别从imin到imax,jmin到jmax,...求和Sum[f, {i, imin, imax, di}] 求和的步长为diProduct[f, {i, imin, imax}, {j, jmin, jmax}, ...] 求积NSum 数值解NProduct 数值解In[1]:= Sum[x^i/i, {i,1,4}]In[2]:= Sum[x^i/i, {i,1,5,2}]In[3]:= Sum[a/i^3, {i,1,10}]In[4]:= N[%] 或NSum[a/i^3, {i,1,10}]In[5]:= Sum[1/i^3, {i,1,Infinity}] 可能原样输出, 也可能输出Zeta[3](依math的版本不同而异)In[6]:= N[%]In[7]:= Sum[x^i*y^j, {i,1,3}, {j,1,i}]注: 如果想要求带符号上下限的Sum, 在math3.0中, 直接使用Sum函数即可:In[8]:= Sum[1/Sin[i], {i,1,n}]而如果在旧版本的math, 则可能需要调入包(package) "gospersu.m",调入格式一般为In[8]:= <<"盘符:\\math路径\\packages\\algebra\\gospersu.m"(不同安装目录可能出现不一样)然后使用函数GosperSum[]4.6 微积分运算(2-2)上一节, 我们一起学习了微分D, Dt; 积分Integrate, NIntegrage;和与积Sum, Product, NSum, NProduct. 这一节我们将介绍解方程Solve, Eliminate, Reduce, NRoot, FindRoot, FindMinimum; 幂级数Series,Normal; 极限Limit; 特殊函数Fourier, InverseFourier, ...最后, 我们说明一下math的函数的定义, 别名的使用, 以及不同输出格式解方程Solve[{lhs1==rhs1, lhs2==rhs2,...}, {x,y,...}]解关于x,y,...的方程组{lhs1==rhs1, lhs2==rhs2,...}Eliminate[{lhs1==rhs1, lhs2==rhs2,...}, {x,y,...}]在联立方程中消去x,y,...Reduce[{lhs1==rhs1, lhs2==rhs2,...}, {x,y,...}]给出一组化简后的方程, 包括可能的解NRoot[poly==0, x] 给出多项式的根的数值逼近FindRoot[lhs==rhs, {x, x0}] 从x0出发, 求方程的数值解FindMinimum[f, {x,x0}] 在x0附近找f的极小值In[1]:= Solve[x^2+2x-7==0, x]In[2]:= Solve[2-4x+x^5==0, x] 呵呵~~~ 输出结果你会发现和没解一样In[3]:= N[%] 啊, 要数值解啊, 不早说. 这不是么.In[4]:= Solve[{a*x+y==0, 2x+(1-a)y==1},{x,a}]In[5]:= Eliminate[{3x+2y+z==3, 2x-2y-2z==5,x+y-7z==9}, {x,z}]In[6]:= Reduce[a*x+b==0, x] 哇, 好COOL. a==0, 怎么怎么; a!=0, ...In[7]:= FindRoot[Cos[x]==x,{x,1}] In[8]:= FindMinimum[x Sin[x], {x,2Pi}]幂级数Series[expr, {x, x0, n}] 求expr在x0的n阶幂级数Normal[series] 按标准形式In[1]:= Series[(1+x)^n, {x,0,3}] 最后还有近似量级呢(大喔O[x]^4)In[2]:= Normal[%]In[3]:= %^2 (1+%) 把大喔量级不要了, 多项式当然可以这么运算极限Limit[expr, x->x0] expr中x趋于x0In[1]:= t=Sin[x]/xIn[2]:= t/.x->0 错了吧. 0不能当分母的In[3]:= Limit[t,x->0] 求极限总可以了吧特殊函数Fourier[] 傅利叶变换InverseFourier[] 反傅利叶变换In[1]:= {1,1,1,1,-1,-1,-1,-1}In[2]:= Fourier[%] In[3]:= InverseFourier[%]RungeKutta[], ... 等函数定义函数如下In[1]:= f[x_]:=x^2+1 math中定义函数:变量后跟_, 然后用:= In[2]:= f[x_, y_]:=x+y 以上两个定义同时存在并不矛盾,当f仅使用一个参数, 自动用一式; 为两个参数, 则用二式In[3]:= f[3]In[4]:= f[3,2]定义别名In[1]:= para:=ParametricPlot 用:=来定义别名In[2]:= para[{Cos[t],t}, {t,0,Pi}]In[3]:= Alas[para] 查看para是什么的别名4.7 矩阵/表的运算矩阵的定义Table, Array, IdentityMatrix, DiagonalMatrix; 输出输入TalbeForm, ColumnForm, MatrixForm, list(其他输出TeXForm, FortranForm, CForm); 及运算: 数乘, 矩阵乘法, Inverse, Transpose,Det, MatrixPower, Eigenvalues, Eigenvectors, 矩阵定义使用的一点说明.矩阵的定义Table[f, {imax}] 包含imax个f的元素(f是规则)Table[f, {i, imin, imax, istep}, {j, ...}, ...]istep=1可省, imin=1也等于1可再省Array[a, n] 建立向量a[1], a[2], ..., a[n]Array[a, {m, n}] 建mxn矩阵aArray[a, {m1, m2, ..., mn}] n维张量IdentityMatrix[n] 生成n维单位矩阵DiagonalMatrix[list] list元素为对角元In[1]:= Table[x, {4}] In[2]:= Table[i^2, {i, 1, 4}]In[3]:= x^%-1 看看表在运算符作用后的结果In[4]:= D[%, x] 求导也可以In[5]:= % /. x->3代入值看看In[6]:= Array[a, {3, 2}] 看个2维的(3x2)矩阵In[7]:= DiagonalMatrix[{1,2,3}] 生成对角元是1,2,3的方阵矩阵的输出/输入TableForm[list] 以表列格式显示一个表ColumnForm[list] 写成一列MatrixForm[list] 按矩阵形式list[[i]] 第i个元素(一维); 第i行元素(二维)list[[i,j]] list的第i行, 第j列元素.In[1]:= a=Table[i+2*j, {i, 1, 3}, {j, 1, 2}] In[2]:= TableForm[%]看看表格式In[3]:= ColumnForm[%%] 写成一列In[4]:= MatrixForm[%%%}再看看矩阵形式In[5]:= %[[2]] 把上面的矩阵的第二行(是一维的表了哦)去来In[6]:= %%[[2,1]] 取第二行第一列元素(是一个数)注: In[5],In[6]也可用a[[2]]和a[[2,1]]的典型写法.其他输出格式TeXForm, FortranForm, CForm TeX(数学排版)格式, Fortran语言, C语言格式输出In[1]:= (Sqrt[x^3-1]+Exp[y])/Log[x]In[2]:= TeXForm[%] 注意TeX中T和X是大写, e是小写In[3]:= CForm[%]矩阵的数学运算cm 数乘(c标量, m是Table或Array定义的矩阵)a.b 矩阵相乘(注意矩阵乘法的规则)Inverse[m] 逆矩阵(当然要对方阵来说了)Transpose[m] 转置Det[m] m(方阵)的行列式MatrixPower[m,n] m(方阵)的n次幂Eigenvalues[m] m(方阵)的特征值Eigenvectors[m] m(方阵)的特征向量Eigenvalues[N[m]], Eigenvectors[N[m]]数值解In[1]:= a=Table[i+2*j, {i, 1, 3}, {j, 1, 2}]In[2]:= 5a 看看乘积In[3]:= b=Table[3*i-2^j, {i, 1, 3}, {j, 1, 3}]In[4]:= b.a 矩阵乘法(注意,此例a.b没有意义)In[4]:= Transpose[%] 转置In[5]:= Inverse[b] 求一下矩阵的逆(天哪, 是方阵还不行, 还要行列式不为0) In[6]:= Det[b] 果然行列式为0 In[7]:= c=b+{{1,0,0},{0,0,0},{0,0,0}}In[8]:= Inverse[c] 终于可以求逆了In[9]:= MatrixPower[b,3] b的3次方In[10]:= Eigenvalues[b] 特征值In[11]:= Eigenvectors[b] 特征向量一点说明: 矩阵可以先使用, 再定义; 局部定义和整体定义的顺序也自由. 如:In[1]:= d[1,1]=w; d[1,2]=e; d[2,1]=21; d[2,2]=22;In[2]:= Array[d,{3,3}] 你就会发现, 定义过的有值了, 没定义的还没有值. --4.8 表的运算表的结构VertorQ, MatrixQ, MemberQ, FreeQ, Length,TensorRank, Dimensions, Count, Position; 取表元First,Last, list[[]], Take, Rest, Drop, Select; 插入元素Prepend, Append, Insert, Join; 表的集合Union,Intersection, Complement; 表的重排Sort, Union,Reverse, RotateLeft, RotateRight, Transpose,Flatten, Partition, Permutations, Apply计算表的有关结构VectorQ[list] 检验list是否为向量结构MatrixQ[list] 检验list是否为矩阵结构MemberQ[list, form] 检验form是否为list的元素FreeQ[list, form] 检验form是否不是list的元素Length[list] list中元素的数目TensorRank[list] list的深度(看成张量的秩)Dimensions[list] list作为向量或矩阵的维数Count[list, form] form在list中出现的次数Position[list, form] form在list中的位置In[1]:= t={{1,2},3} t是一个表In[2]:= VectorQ[t] 不是向量In[3]:= MemberQ[t,3] 3是它的元素In[4]:= MemberQ[t,2] 2不是它的元素In[5]:= Length[t] t的长度是2In[6]:= TensorRank[t] t的深度是1In[7]:= Dimensions[t] 作为向量,是2维: {1,2}和3In[8]:= Position[t,3] 3在表t中的位置是{{2}}在表中取部分元素First[list] list的首元素Last[list] list的最后一个元素list[[n]] list的第n个元素list[[-n]] list的倒数第n个元素(以后二者合写为n/-n)list[[n1,n2,...,nm]] 相当list[[n1]][[n2]]...[[nm]]list[[{n1,n2,...,nm}]] list第n1,n2,...,nm元组成新表list[[{i1,i2,...},{j1,j2,...}]]list的i1,i2...行,j1,j2,...列Take[list, n/-n] 取list的前/后n个元素Rest[list] 去掉首元的listDrop[list, n/-n] 去掉前/后n个元素的listSelect[list, crit] 从list中选出满足crit的元素In[1]:= t={{2,1},{1}};In[2]:= VectorQ[t] 函数名最后字母为Q,其值为True/FalseIn[3]:= aa={{a,b,c,d},{e,f,g,h},{i,j,k,l}};In[4]:= aa[[1]] 看看以下几个, 体会一下取元素/子表In[5]:= aa[[1]][[2]]In[6]:= aa[[1,2]]In[7]:= aa[[{1,2}]]In[8]:= aa[[{1},{2}]]In[9]:= Select[{a,23,12,0,3.5},EvenQ] 看看Select怎么用这里EvenQ[expr]判断expr是否偶数; OddQ[.]奇数?; NumberQ[.]数?;IntegerQ[.]整数?; PrimeQ[.]素数? AtomQ[.]简单表达式?... 表中插入元素Prepend[list, elem] 表头加elem(PrependTo函数修改list)Append[list, elem] 在表尾加elem(AppendTo修改list)Insert[list, elem, n/-n] 在正/倒数第n个位置插入elemJoin[list1, list2, ...] 连接list1, list2, ...In[1]:= Prepend[{a,b,c},x] 在{a,b,c}前加x元素In[2]:= Insert[{a,b,c},x,2] 在{a,b,c}的第2个位置插入xIn[3]:= Join[{1,2,3},{xy},{m,{2,3},3}] 看看Join 集合函数Union[list1, list2, ...] 去掉重复元并排序后的JoinIntersection[list1, list2, ...] 取各list的公共元Complement[t, list1, list2, ...] 在t中, 不在各list中的元素In[4]:= Union[{1,2,3},{xy},{m,{2,3},3}] 看看UnionIn[5]:= Complement[{a,b,c,d,e},{a,d},{e,f}] 看看Complement表的重排Sort[list] 将list排序Union[list] 去掉重复元Reverse[list] 倒序RotateLeft[list, n/-n] 将list向左/右转n个元素(n=1可省)RotateRight[list, n/-n] 将list向右/左转n个元素(n=1可省)Transpose[list] 交换表的最上面两层Transpose[list, n] 交换表的顶层与第n层Flatten[list] 将list所有层变为一层Flatten[list, n] 将list的最上面n层变为一层Partition[list, n] 将list分成由n元组成的块(多余舍去)Partition[list, n, d] 各块中有偏移dPermutations[list] 给出list一切可能的排列Apply[Plus, list] 求和list[[i]]Apply[Times, list] 求积list[[i]]In[1]:= RotateLeft[{a,b,c,d,e},2] 得到{c,d,e,a,b}In[2]:= Flatten[{{a,b},c,{c,d}}] 得到{a,b,c,c,d}In[3]:= Table[i^2+j^2+k^2,{i,2},{j,2},{k,2}]In[4]:= Flatten[%,1] 展开一层In[5]:= Apply[Plus,%] 求和得到{24,36}In[6]:= Partition[{a,b,c,d,e,f,g},3,1] 看看Partition4.9 二维图形二维函数作图Plot, 选项; 图的重现Show, Options, SetOptions, InputForm, Head; 参数绘图ParametricPlot; 线宽Thickness, 线型Dashing.二维图形函数作图Plot[f[x],{x,xmin,xmax}] 在{xmin,xmax}间画出f[x]的图形Plot[{f1[x],f2[x],...},{x,xmin,xmax}] 画出fi[x]Plot[Release[f],{x,xmin,xmax}] 有时f的表达式很复杂,直接用Plot计算量大,可能得不出结果,可以先求f的值,再画Plot选项设置(格式: 选项->值)PlotRange Automatic {ymin,ymax}或{{xmin,xmax},{ymin,ymax}} AxesLabel轴标None {"x轴标","y轴标"}Frame框False TrueAxesOrigin原点Automatic {x,y}Axes轴Automatic None不画Ticks刻度Automatic None或{{xticks(,...)},{yticks(,...)}} GridLines网格None All或{{xlines...},{ylines}}AspectRatio 1/GodenRatio 正实数(高/宽)PlotPoints 15 Plot的作图精度In[1]:= Plot[Sin[x^2], {x,0,3}]In[2]:= Plot[Sin[x^2], {x,0,3}, PlotRange->{0,1.2}]In[3]:= Plot[Sin[x^2], {x,0,3}, AxesLabel->{"x","Sin[x^2]"}]In[4]:= Plot[Sin[x^2], {x,0,3}, Axes->None]In[5]:= Plot[Sin[x^2], {x,0,3}, PlotPoints->40]图形的重现Show[p] 重画图pShow[p1,p2,...] 把p1,p2,...重画在一起Show[p,option->value] 改变选项重画p(选项大多同上)(没有PlotPoits选项)Options[p] 显示图p的选项InputForm[p] 显示图p的有关存储信息SetOptions[函数名,option->value] 改变函数选项默认值Head[p] p的类型,如果p是图,则值为GraphicsIn[1]:= t1=Plot[BesselJ[1,x],{x,1,20}]In[2]:= t2=Plot[Sin[x],{x,0,15}]In[3]:= Show[t1,%]In[4]:= Show[%,Axes->None]In[5]:= Show[%,Frame->True]In[6]:= Options[%]In[7]:= InputForm[t2]参数绘图ParametricPlot[{fx,fy},{t,tmin,tmax}]ParametricPlot[{{fx,fy},{gx,gy},...},{t,tmin,tmax}]{fx,fy}的几种特殊情形{r[t]Cos[t],r[t]Sin[t]} 极坐标{Re[f],Im[f]} 复函数的相角图{Log[f],Log[g]} log-log图注意: 有时需要把AspectRatio->1才能更好地显示y/x比例, 如画圆. In[1]:= ParametricPlot[{Sin[t],Sin[2t]},{t,0,2Pi}]In[2]:= ParametricPlot[{Sin[t],Cos[t]},{t,0,2Pi}]In[3]:= Show[%,AspectRatio->Automatic]AspectRatio是1或Automatic是y/x的比例才是1 选项, 改变线宽和线型(虚线):在Plot的选项里使用PlotStyle->Thickness[0到1的值] 在math3.0下,使用0.005足矣PlotStyle->Dashing[{画,空}]在Show中,在Graphics[Thickness[.]]或Graphics[Dashing[.]] 之后的线宽或线型依此改变.In[1]:= Plot[Sin[x^2],{x,0,3},PlotStyle->Thickness[0.01]]In[2]:= Plot[Sin[x^2],{x,0,3},PlotStyle->Dashing[{0.01,0.01}]]In[3]:= t1=Plot[Sin[(3x)^2],{x,-1,1}]In[4]:= t2=ParametricPlot[{Sin[t],Sin[2t]},{t,0,2Pi}]In[5]:= Show[t1,Graphics[Dashing[{0.01,0.01}]],t2]In[6]:= Show[t1,Graphics[Thickness[0.01]],t2]--4.10 三维图形三维函数作图Plot3D, 选项; 参数作图ParametricPlot3D; 等值线图ContourPlot; 密度图DensityPlot; 数据绘图ListPlot, ListPlot3D.三维作图函数作图Plot3D[f[x,y],{x,xmin,xmax},{y,ymin,ymax}]在{xmin,xmax}间画出f[x]的Surface图形Show[p] 重画图p,用法同二维Show[Gaphics3D[p]] 将图p(可能是SurfaceGraphics)转为Graphics3D,并重画三维作图选项PlotRange Automatic {zmin,zmax}或{{xmin,xmax},{y...},{z...}} Axes轴Automatic NoneAxesLabel None {"x轴标","y轴标","z轴标"}Ticks Automatic 刻度PlotLabel图标None 图的标记Boxed盒子True False BoxRatios {1,1,0.4} {x,y,z} HiddenSurface True False是否隐去曲面被挡部分Shading True False是否涂阴影(颜色)Mesh True False是否在曲面上画网格LightSources 三个光源设光源{{x,y,z},RGBColor[r,g,b]} FaceGrids None All或坐标网格ViewPoint视点{1.3,-2.4,2.} {x,y,z}{0,-2,0}正前方; {0,-2,2}前上方; {0,-2,-2}前下方;{2,-2,0}正右角; {0,0,2}正上方; ...PlotPoints 15 作图精度(PlotPoints为Plot3D,ParametricPlot3D,ContourPlot等plot函数选项) In[1]:= Plot3D[Sin[x]y^2,{x,-3,4},{y,-2,2}]In[2]:= Plot3D[Sin[x]y^2,{x,-3,4},{y,-2,2},PlotPoints->30]In[2]:= Show[%, Mesh->False,Boxed->False,Axes->None]参数绘图ParametricPlot3D[{fx,fy,fz},{u,umin,umax},{v,vmin,vmax}]等值线图ContourPlot[f,{x,xmin,xmax},{y,ymin,ymax}]选项Contours 10 从zmin到zmax等值线条数密度图DensityPlot[f,{x,xmin,xmax},{y,ymin,ymax}]In[1]:= ParametricPlot3D[{Cos[5t],Sin[3t],Sin[t]},{t,0,2Pi}]In[2]:= ParametricPlot3D[{u,u+v,v^2},{u,0,2},{v,-1,1}]In[3]:= ContourPlot[Sin[x]Cos[y],{x,-2,2},{y,-2,2}]In[4]:= Show[%,Contours->30]In[5]:= DensityPlot[Sin[x]Cos[y],{x,-2,2},{y,-2,2}]数据绘图ListPlot[{y1,y2,...}] 画(1,y1),(2,y2),...ListPlot[{{x1,y1},{x2,y2},...}]ListPlot[...,PlotJoined->True] 连线ListPlot3D[array]In[1]:= t=Table[i^2,{i,10}]In[2]:= ListPlot[t]In[3]:= ListPlot[t,PlotJoined->True]In[4]:= tt=Table[Mod[y,x],{x,20},{y,20}]In[5]:= ListPlot3D[%,ViewPoint->{1.5,-0.5,1}]--Mathematica (11)基本图元作图二维基本图元Point, Line, Rectangle, Polygon, Circle,Disk, Text, Graphics[]; 三维基本图元Point, Line,Polygon, Cuboid, Text, Graphics3D[]; 一些PlotStyle:Thickness, Dashing, PointSize, GrayLevel, RGBColor.4.11基本图元绘图二维基本图元Point[{x,y}] 点(x,y)Line[{{x1,y1},{x2,y2},...}] 连线Rectangle[{xmin,ymin},{xmax,ymax}] 矩形Polygon[{{x1,y1},{x2,y2},...}] 多边形Circle[{x,y},r] 圆:圆心(x,y),半径rDisk[{x,y},r] 圆盘:圆心(x,y),半径rCircle[{x,y},{rx,ry},{a1,a2}]椭圆: 圆心(x,y),长短轴rx,ry,起始角a1,终止角a2 Disk[{x,y},{rx,ry},{a1,a2}] 椭圆盘Text[expr,{x,y}] 文本输出在(x,y)Text[expr,{x,y},{x1,y1}] 文本输出{x1,y1}为{-1,0},{1,0},{0,1},{0,-1}, 则文本输出以(x,y)为左端点, 右端点, 上端点, 下端点; 其他-1到1的数为相对位移In[1]:= s1=Line[Table[{n,(-1)^n},{n,6}]]In[2]:= Show[Graphics[s1]]In[3]:= g1=Show[%, Axes->Automatic]In[4]:= Show[g1,Graphics[Text["f(x)",{4.5,0.8}]]]In[5]:= s2={Rectangle[{1,-1},{2,-0.6}],Polygon[{{1,0},{3,1},{4,0.5},{5,1}}]}In[6]:= Show[g1,Graphics[s2]]In[7]:= Show[Graphics[Table[Circle[{3n,0},n/4],{n,4}]],AspectRatio->Automatic]In[8]:= Show[Graphics[Disk[{1,1},{1,2},{10Degree,325Degree}]],AspectRatio->Automatic]三维图元Point[{x,y,z}] 点(x,y,z)Line[{{x1,y1,z1},{x2,y2,z2},...}] 连线Polygon[{{x1,y1,z1},{x2,y2,z2},...}] 多边形Cuboid[{xmin,ymin,zmin},{xmax,ymax,zmax}] 立方体Text[expr,{x,y,z}] 文本输出一些PlotStyleThickness[r] 线宽Dashing[{r1,r2,...}] 虚线{实虚实虚...}PointSize[r] 点的大小GrayLevel[r] 灰度0<=r<=1RGBColor[r,g,b] RGB颜色([0,1]间)[1,0,0]红; [0,1,0]绿; [0,0,1]蓝; [1,1,0]黄In[1]:= Plot[Sin[x^2],{x,0,3},PlotStyle->RGBColor[1,0,0]]In[2]:= Show[%,Graphics[PointSize[0.05]],Graphics[Point[{2,1}]]]In[3]:= Show[Graphics3D[RGBColor[1,0,0]],Graphics3D[Line[{{0,0,0},{1,2,3},{3,2,1}}]]]4.12 表达式与纯函数表达式形式FullForm, TreeForm, Head; 表达式的书写形式@, //, ~f~; 表达式的项expr[[n]]; 表达式操作Apply(@@),Nest, Map(/@), MapAll(//@), MapAt; 纯函数&, #, ##.表达式形式FullForm[expr] 给出表达式的完全形式TreeForm[expr] 给出表达式的完全形式Head[expr] 给出表达式的头部In[1]:= FullForm[x+y+z] x+y+z的FullForm是Plus[x,y,z]In[2]:= FullForm[1+(x y)^2+(y+z)^3]In[3]:= TreeForm[%]In[4]:= Head[%]In[5]:= Head[215]In[6]:= Head[21.5]In[7]:= Head[Plot[Sin[x],{x,0,1}]]表达式的四种书写形式f[x,y] 标准形式f@x f[x]的前缀形式x//f f[x]的后缀形式x~f~y f[x,y]的中间形式In[1]:= Pi^2//N 相当于N[Pi^2](//级别低)In[2]:= N@Pi^2In[3]:= {a,b,c}~Join~{c,d}表达式的项expr[[n]] expr的第n项expr[[-n]] expr倒数第n项expr[[n1,n2,...]] 树结构索引的expr的项expr[[n]]=expr2 项赋值Position[expr,form] 寻找expr中form的位置In[1]:= t=1+(3+x)^2+z;In[2]:= t[[2]] 得(3+x)^2(类似于取List的元素)In[3]:= t[[2,1]] 再取子表得到Power函数的(3+x)In[4]:= t[[4]] 出错,不存在In[5]:= t[[3]]=y*z 试试直接赋值In[6]:= t 看看t变成什么了表达式的操作Apply[f,list] 对list施加函数f (@@)Nest[f,x,n] 将f对x作用n次Map[f,expr] 将f作用于expr的第一层(/@)Map[f,expr,n] 将f作用于expr直到第n层MapAll[f,expr] 将f作用于expr的所有项(//@)MapAt[f,expr,{polist}] 将f作用于expr的polist位置上In[1]:= Apply[f,{a,b,c}] 得到f[a,b,c](同f@@{a,b,c})In[2]:= Nest[f,x,3] 得f[f[f[x]]]In[3]:= u=x+(x+2)^2/xIn[4]:= Map[f,u] 同f/@uIn[5]:= Map[f,u,2]In[6]:= MapAll[f,u] 同f//@uIn[7]:= MapAt[f,u,Position[u,x]] 所有x都换成f[x]纯函数& Function纯函数# 纯函数的第一个变量#n 纯函数的第n个变量##n 从第n个起的变量序列## ##1Function[x,expr] 有一个变量的纯函数Function[{x1,x2,...},expr] 列表参数的纯函数In[1]:= Map[#^2&, {a,b,c}] 甚至#^2& /@ {a,b,c} 即将函数#^2作用于{a,b,c}得到{a^2,b^2,c^2}In[2]:= (#1^2+#2^#3)&[x,y,3] 即x^2+y^3In[3]:= g[##,##]&[x,y] 得g[x,y,x,y]Mathematica (13)转化规则与参数转换规则f[x]=, f[x_]=, Clear; 模式与匹配; 赋值=和:=;/; , -> , :> , /. , //. , Replace, /: ; 参数的含义_, __, ___, _head, _:xdef.转换规则f[x]=expr 定义f在x的值f[x_]:=expr 定义f[x](区别=与:=)Clear[f]或f[x_]=. 清除f的定义Remove[f] 彻底清除变量或函数fIn[1]:= f[x]=x^2 定义f在x为x^2In[2]:= f[2]+f[x] f[2]未定义,所以得到f[2]+x^2In[3]:= g[x_]=x^2 定义g[x](这里x没有值,:=与=一样)In[4]:= g[2]+g[x] 得到4+x^2 (注意看f和g的区别)In[5]:= f[3]=10 再定义一个f[3]In[6]:= ?f 看看f模式与匹配f[n_], f[m_,n_], f[n_,n_]In[1]:= f[m_,n_]:=m+nIn[2]:= f[n_,n_]:=3*nIn[3]:= f[n_]:=2*nIn[4]:= f[2,2]+f[6,8] f[2,2]用的是f[n,n]而不是f[m,n]In[5]:= f[2]+f[6,8] f[2]用单参数规则,f[6,8]用双参数规则赋值= 立即赋值:= 到使用时再赋值In[1]:= y=2In[2]:= h[y_]=y^3 即时赋值In[3]:= h[1] =8In[4]:= h2[y_]:=y^3 使用时再赋值,这里只定义规则In[5]:= h2[1] =1 (注意h2与h的区别)In[6]:= ?hIn[7]:= ?h2 分别看看就知道了In[8]:= 3!下面再熟练一下=和:=的区别In[9]:= f[x_]:=%+2xIn[10]:= 1+y^2In[11]:= g[x_]:=%+2xIn[12]:= 2+zIn[13]:= f[a]+g[a]In[14]:= f[a]*g[a]/; (表达式/;条件) 满足条件使用表达式-> (lhs -> rhs) 在定义时,lhs用rhs代替:> (lhs :> rhs) 在使用时,lhs用rhs代替/. (expr /. rule) 对expr所有项使用规则一次//. (expr //. rule) 对expr所有项使用规则直到结果不变化Replace[expr,rule] 对整体expr使用规则一次/: (g/:lhs:=rhs) 定义一个转换规则,与g相关联In[1]:= f[x_]:=1 /; -1<=x<=1 当-1<=x<=1时, f[x]=1In[2]:= f[x_]:=-1 其他时候f[x]=-1In[3]:= f[2]In[4]:= f[0.5] 分段函数耶In[5]:= Plot[f[x],{x,-2,2}] 画图看看, 不错不错In[6]:= x+y /. x->2 得到2+y(:>和->的区别类似于:=与=) In[7]:= Clear[f]In[8]:= f[5] /. {f[1]->1,f[x_]->x*f[x-1]}In[9]:= f[5] //. {f[1]->1,f[x_]->x*f[x-1]}In[10]:= ss /: math[ss]=96In[11]:= ss /: phys[ss]=95In[12]:= ?ss参数x_ 单个表达式xx__ 一个或多个表达式序列xx___ 0个或多个表达式序列xx_h (或x__h) Head是h的表达式(序列)x_:xdef 可省参数的缺省值In[1]:= nt[t_,lt__]:=t*ltIn[2]:= c={1,2,3,4}In[3]:= nt[3,c] 这里就使用c是列表参数In[4]:= li[x_,xi_,xj__]:=(x-xj)/(xi-xj)In[5]:= li[x,xi,{1,2}]再看个例子In[6]:= h[x_Real]:=x^2 定义h,当x是Real时In[7]:= h[4.5] h[4.5]的值为20.25In[8]:= h[a] a的Head不是Real,未定义,得h[a]In[9]:= fac[0]=1 以下看看函数facIn[10]:= fac[n_Integer?Positive]:=n*fac[n-1]In[11]:= fac[5] 120(注意上面条件用?间隔)In[12]:= h2[x_?NumberQ]:=x^3 看看这个条件的使用In[13]:= f[x_,y_:1,z_:2]:=g[x,y,z]In[14]:= f[a1,b1,c1] 都有参数则按参数代入In[15]:= f[a1,b1] 少一个参数,使用缺省值In[16]:= f[a1] 只有一个参数,两个参数使用缺省4.14 过程编程一般过程, Block; 循环Do, While, For, Nest, FixedPoint;条件If, Which, Switch; 转向Return, Break, Continue, Goto, Label.一般过程Command; Command; ... 一串命令Block[{x,y,...},procedure] x,y,...为局部参数Block[{x=x0,y=y0,...},proc] 局部参数赋初值In[1]:= g[x_]:= Block[{u},u=(1+x)^2;u=Expand[u]]In[2]:= g[a+b] 看看g[a+b]=?In[3]:= u 而这时u不发生改变循环结构Do[expr,{i,imin,imax,istep}] 计算expr,i从imin到imax,步长istep Do[expr,{i,imin,imax}] istep=1Do[expr,{i,imax}] imin=1,istep=1Do[expr,{n}] 计算expr n次Do[expr, {i...}, {j...}...] 多重循环(前面的外重循环)While[test,expr] 当test成立, 计算exprFor[start,test,increment,body]相当于C语言for(start;test;increment) bodyNest[f,expr,n] f对expr作用n次FixedPoint[f,expr] 重复使用f,直到expr不再变化用于循环的表达式i++, i--, ++i, --i, i+=di, i-=di, i*=di, i/=di, {x,y}={y,x} x,y值交换In[1]:= Do[Print[i^2],{i,4}] 循环Print[i^2]In[2]:= t=x;Do[t=1/(1+k*t),{k,2,4}];tIn[3]:= Do[Print[{i,j}],{i,4},{j,i-1}]In[4]:= Nest[Function[t,1/(1+t)],x,3] 注意虚函数的使用In[5]:= FixedPoint[Function[t,Print[t];Floor[t/2]],67]In[6]:= n=17;While[(n=Floor[n/2])!=0,Print[n]]In[7]:= For[i=1,i<4,i++,Print[i]]In[8]:= For[i=1;t=x,i^2<10,i++,t=t^2+i;Print[t]]大家注意练习上面例子, 考虑并看看运行结果, 熟练Math的循环语句的使用.条件语句If[test,expr] if (test) exprIf[test,expr1,expr2] if (test) expr1 else expr2If[test,expr1,expr2,expr3] 无法判断时得值expr3Which[test1,value1,test2,value2,...True,value]test1为真,得value1;否则判断test2...;若全不满足,得NullSwitch[expr,form1,value1,form2,value2,...]expr的值为form1,得value1; 为form2,得value2,...In[1]:= f[x_]:=If[x>0,1,-1]In[2]:= Plot[f[x],{x,-2,2}] 还是画图形象In[3]:= g[x_]:=Which[x>1,x+2,x<-5,x-2]In[4]:= g[0] 没有输出In[5]:= Print[g[0]] 看到了,是NullIn[6]:= g[-6]In[7]:= g[2] 这两个g值都有意义In[8]:= h[x_]:=Switch[Mod[x,3],0,a,1,b,2,c]In[9]:= h[4] 也可以看看h[5],h[6]等值转向控制Return[] 返回,当前函数值NullReturn[expr] 返回expr的值Break[] 和Continue[] 这两函数只用于For,While.(Do不使用) Goto[标志]和Label[标志] Mathematica (15)程序包程序包的结构, 上下文, 程序注释, 输出, 输入程序包的结构BeginPackage["self`"] 激活或建立self上下文f::ussage="...." f的用法说明Begin["`Private`"] 开始包的私有上下文....f[args]=.......End[] 结束自身的上下文EndPackage[] 结束包,将self`放在全局上下文路径的最前面如果第一句为BeginPackage["self`","f1`","f2`"], 则在定义包self时,同时打开f1.m, f2.m, 调入f1`, f2`.名字和上下文上下文表示为字符串name 在当前上下文或搜索路径中最先找到的符号context`name 在指定上下文中的符号`name 在当前上下文中的符号Unique[ss] 生成以ss开头的没用过的符号Clear[s] 清除s的值Remove[s] 清除符号sRemove["context`*"] 清除context上下文中的所有符号这里要提一下两个系统变量: $Context和$ContextPath, 前者为当前上下文, 后者为当前上下文路径. 关于上下文, 大家看看以下例子, 体会一下.In[1]:= $Context 当前上下文是Global`In[2]:= z=6 定义z=6In[3]:= Begin["new1`"] 开始new1上下文IN[4]:= new1`z=9 new1上下文中的z=9In[5]:= $Context 当前上下文是new1`In[6]:= z 看看z=9In[7]:= ?*`z 看看有几个z,其中有z和Global`zIn[8]:= EndAdd[] 结束new1`,并将new1`放在路径最前面In[9]:= $ContextPath 看看路径In[10]:= ?*`z 看看有几个z,其中有z和new1`zIn[11]:= z 看看现在z的值是Global的z值了In[12]:= $Context 当前上下文In[13]:= Remove[z] 清除变量zIn[14]:= z Global的z清除了,这时显示的z=9In[15]:= Remove[z] 再Remove就清除new1中的z了程序注释f::ussage="text..." 关于一个函数的说明(* 注释内容*) 出现在程序包的任何地方如If[x>y,(* then *)x,(* else *) y]和If[x>y,x,y]是一样的.输出Print[expr1,expr2,...] 在屏幕上输出expr1,expr2,...StringForm[string,expr1,expr2,...] 将string中成对的``依次用expr1,expr2,...代替. 若string中是`n`, n为整数, 则用第n个expr代替. 如StringForm["`` is not ``.",x+1,y]输出x+1 is not y.Message[s::tag] 输出tag Off[s::tag] / On[s::tag] 屏蔽/打开tag信息In[1]:= f::"overflow"="Factorial argument `1` too large."In[2]:= f[x_]:=If[x>10,Message[f::"overflow",x];Infinity,x!]In[3]:= f[20] 输出错误信息In[4]:= Off[f::"overflow"] 屏蔽overflow信息In[5]:= f[20]表达式输出到文件expr >> file 把表达式的值写入新文件fileexpr >>> file 把表达式的值追加到file中!!file显示文件输入Input[] 键盘输入完整表达式作为Input的返回值Input[提示] 显示提示,接受输入InputString[] 输入字符串Read[文件名,类型描述] 按类型描述读入文件,参看帮助--。