Mathematica作为一个优秀的符号计算系统
数学软件Mathematica
![数学软件Mathematica](https://img.taocdn.com/s3/m/248efc06cbaedd3383c4bb4cf7ec4afe04a1b13c.png)
Take[list,k]
前 k 个分量
Take[list,-k]
最后 k 个分量
Take[list,{i}]
{list[[i]]}
Take[list,{i,j}]
{list[[i]],list[[i+1]], ..., list[j]}
list[[i;;j]]
同上
Take[list,{i,j,h}]
Degree
角度到弧度的转换系数,Pi/180
E
自然对数的底,2.71828...
EulerGamma
Euler 常数:
GoldenRatio
黄金分割数:
I
虚部单位
Infinity
无穷大
Pi
圆周率
整数,有理数,实数(任意精度和机器精度),复数
*
基本运算符
基本运算:
+ - * /
加减乘除
{list[[i]],list[[i+h]], ... }
list[[i;;j;;h]]
同上
*
列表修改
Drop[list,{k}]
删除第 k 个分量
Drop[list,k]
删除前 k 个分量
Drop[list,-k]
In[2]:= g[x_,y_]:=2*x+y (* 函数 *)
In[3]:= f[2,3] (* 结果是什么? *)
*
字符串
字符串:用双引号括起来的字符序列
字符串相关函数
Characters[str]
转化为字符列表
StringJoin[s1,s2,...]
字符串合并
s1<>s2<>...
mathematica数学与符号运算软件介绍
![mathematica数学与符号运算软件介绍](https://img.taocdn.com/s3/m/ea22e5497c1cfad6185fa78f.png)
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简介
![数学软件Mathematica简介](https://img.taocdn.com/s3/m/f9169376b80d6c85ec3a87c24028915f804d841e.png)
图形渲染
Mathematica可以生成高质量的图形和动画,用于工程 设计的可视化展示。这有助于工程师更好地理解设计原 理和性能特点,提高设计效率。
数据科学中的应用
数据挖掘
Mathematica提供了强大的数据分析和挖 掘工具,可以帮助数据科学家从大量数据中 提取有价值的信息。例如,聚类分析、关联 规则挖掘等。
提供交互式编程环境, 方便用户进行编程和调 试。
Mathematica的起源与发展
起源
Mathematica最初由美国数学家 Stephen Wolfram于1988年开发, 旨在提供一个强大的数学工具包,以 简化复杂的数学计算和可视化。
发展
经过多年的不断更新和完善, Mathematica已经成为一款功能强大 、易用性强的数学软件,广泛应用于 科研、教育、工程等领域。
支持多种类型的2D和3D图形,如散点图、 线图、曲面图、等高线图等。
数据可视化工具
提供丰富的数据可视化工具,如直方图、饼 图、热力图等。
可视化动画
可以创建动态的视觉效果和动画,以更好地 展示数据和过程。
可视化交互
用户可以通过交互式界面与图形进行交互, 以获取更多信息。
编程语言的高级特性
函数式编程
Mathematica采用函数式编程语言,支持高阶函数、匿名函数等特性。
数和微分方程求解方面更优秀。
与MATLAB的比较
MATLAB主要面向工程和科学计算,特别适合矩阵计算和数值分析。Mathematica在 符号计算、公式推导和数据可视化方面更胜一筹,而MATLAB在实时控制系统设计和信
号处理方面更具优势。
与其他编程语言的比较
要点一
与Python的比较
Python是一种通用的高级编程语言,广泛用于数据科学、 机器学习和Web开发等领域。Mathematica在数学计算和 符号推导方面更强大,而Python在灵活性和开放性方面更 优秀,两者在某些领域可以相互补充。
mathematica软件简介
![mathematica软件简介](https://img.taocdn.com/s3/m/c4dccf92370cba1aa8114431b90d6c85ec3a88a4.png)
数据清洗
02
03
数据统计和分析
Mathematica可以方便地导入和 导出各种数据格式,如CSV、 Excel、数据库等。
Mathematica可以进行数据清洗 ,包括缺失值处理、异常值处理 等。
Mathematica可以进行各种数据 统计和分析,如描述性统计、回 归分析、聚类分析等。
图形和可视化
丰富的可视化功能
Mathematica软件具有丰富的可视化功能,可以生成各 种类型的图表和图形,包括二维和三维图形、动画、图像 处理等。
灵活的编程环境
Mathematica软件提供了一个灵活的编程环境,用户可 以使用Mathematica的编程语言(Wolfram Language )编写自定义函数和程序,扩展软件的功能。
THANK YOU
01
Mathematica可以进行各种代数运算,包括多项式
运算、矩阵运算、微积分运算等。
符号求解方程
02 Mathematica可以求解各种符号方程,如线性方程
、非线性方程、微分方程等。
符号化简
03
Mathematica可以将复杂的数学表达式进行符号化
简,得到最简形式。
数据处理和分析
01
数据导入导出
02
mathematica的基本操作
mathematica的基本操作
• Mathematica是一款由Wolfram Research公司开发的数学软 件,它以符号计算为核心,广泛用于科学计算、数值计算、数 学建模、数据分析和可视化等领域。
03
mathematica的功能介绍
符号计算
代数运算
mathematica的主要特点和优势
符号计算
Mathematica介绍
![Mathematica介绍](https://img.taocdn.com/s3/m/4f582ad95022aaea998f0fe8.png)
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进行符号计算和科学研究
![学会使用Mathematica进行符号计算和科学研究](https://img.taocdn.com/s3/m/cfc7f1acbb0d4a7302768e9951e79b89680268d2.png)
学会使用Mathematica进行符号计算和科学研究一、介绍MathematicaMathematica是一种强大的数学软件,可以进行符号计算和科学研究。
它是现代科学和工程领域中广泛使用的计算机代数系统之一。
Mathematica具有丰富的库和算法,可进行各种数学计算、数据处理、图形绘制和符号计算。
学会使用Mathematica将有助于提高科学研究的效率和准确性。
二、Mathematica基础知识在开始使用Mathematica之前,我们首先需要了解一些基础知识。
Mathematica所有的表达式都由头部和部分组成,并使用方括号或圆括号进行包围。
头部指定了表达式的类型,例如函数、符号或数值。
部分则是参数或操作数。
Mathematica是一种高级编程语言,支持各种数学和计算操作。
我们可以使用内置函数进行常见的数学运算,如加法、减法、乘法和除法。
此外,还可以进行复杂数学运算,如微分、积分、方程求解等。
三、符号计算符号计算是Mathematica的一个重要功能。
在符号计算中,我们可以处理和操作符号表达式,而不只是数值。
这可以使我们在研究符号和代数结构时更加灵活和精确。
符号计算允许我们定义变量,并进行代数运算。
例如,我们可以定义一个符号变量x,并对其进行算术运算,如加法和乘法。
我们还可以使用符号变量进行函数定义和求导。
除了基本的代数运算,Mathematica还支持符号计算中的其他功能,如方程求解、级数展开、极限计算和泰勒展开。
这些功能在科学研究中非常有用,可以帮助我们解决复杂的数学问题。
四、科学研究应用Mathematica广泛用于各个科学领域的研究。
以下是其中一些常见的应用:1. 数学研究:Mathematica可以进行各种数学研究,如数论、代数学、几何学等。
它提供了各种数学函数和算法,可用于解决数学难题和证明数学命题。
2. 物理学应用:在物理学中,Mathematica可用于建模、仿真和求解物理问题。
Mathematica强大的数值计算和符号运算数学专用软件
![Mathematica强大的数值计算和符号运算数学专用软件](https://img.taocdn.com/s3/m/3722833c647d27284b7351bb.png)
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](https://img.taocdn.com/s3/m/3da7fd04ef06eff9aef8941ea76e58fafab045c5.png)
expr/.x->value将 expr里所有的x均代换成value expr/.{x->value1,y->value2,…}执行数个不同变数的代换 expr/.{{x->value1},{x->value2},…}将 expr代入不同的x值 expr//.{x->value1,y->value2,…}重复代换到 expr不再改变为止
Collect[expr,x]将 expr表示成x的多项式, 如 Collect[expr,{x,y,…}]将 expr分别表示成 x,y,…的多项式 FactorTerms[expr]将 expr的数值因子提出, 如 4x+2=2(2x+1) FactorTerms[expr,x]将 expr中把所有不包含x项的因子提出 FactorTerms[expr,{x,y,…}]将 expr中把所有不包含{x,y,...}项的因子提出
D[f,x]函数f对x作微分 D[f,x1,x2,…]函数f对x1,x2,…作微分 D[f,{x,n}]函数f对x微分n次 D[f,x,NonConstants->{y,z,…}]函数f对x作微分,将y,z,…视为x的函数
Dt[f]全微分df Dt[f,x]全微分 Dt[f,x1,x2,…]全微分 Dt[f,x,Constants->{c1,c2,…}]全微分,视c1,c2,…为常数
高性能计算
Mathematica系统已经支持高性能计算。在Mathematica 5.2版本中,它已经支持自动多线程计算。在2002 年,gridMathematica的引入使得用户级的并行编程可以在不同的集群和多处理器系统中进行。在2008年,在所 有的Mathematica许可证中囊括了并行计算技术,包括支持网格技术如Windows HPC Server 2008、Microsoft Compute Cluster Server和Sun Grid。2010年,Mathematica增加了对CUDA和OpenCLGPU硬件的支持。另外, 第8版还可以生成C代码,它可以自动由系统C编译器进行编译,比如Intel C++编译器或者Visual Studio 2010 编译器。
Mathematica是美国Wolfram公司开发的一个功能强大的数.
![Mathematica是美国Wolfram公司开发的一个功能强大的数.](https://img.taocdn.com/s3/m/5851dd9ba45177232e60a268.png)
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](https://img.taocdn.com/s3/m/18b578b605a1b0717fd5360cba1aa81144318ff3.png)
Mathematica简介Mathematica是一款强大的数学软件,由Stephen Wolfram和Wolfram Research公司开发。
它可以进行符号计算、数值计算、数据分析和可视化等各种数学任务。
Mathematica提供了一个交互式的界面,使用户能够轻松地输入数学表达式和命令,并得到相应的结果。
Mathematica的功能非常广泛,涵盖了数学、物理、工程、统计学等多个领域,被广泛用于教学、研究和工程应用。
特点强大的符号计算能力Mathematica可以进行符号计算,能够处理各种数学表达式、方程、不等式等。
它能够对表达式进行简化、展开、合并等操作,并能够在数学中进行推导和证明。
Mathematica还提供了大量的预定义函数和符号,可以直接使用,或者通过定义新的函数和符号来进一步扩展功能。
多种数值计算方法除了符号计算,Mathematica还提供了各种数值计算方法。
它可以进行数值积分、数值求解方程、数值逼近等操作。
Mathematica使用高精度算法进行数值计算,可以得到非常精确的结果。
同时,Mathematica还支持并行计算和分布式计算,可以利用多台计算机进行计算,加快计算速度。
数据分析和可视化功能Mathematica拥有强大的数据分析和可视化功能。
它可以导入各种数据格式,包括Excel、CSV、数据库等,进行数据清洗、分析和建模。
Mathematica提供了丰富的数据处理函数和图形函数,可以对数据进行统计分析、机器学习、图像处理等操作。
同时,Mathematica还可以生成各种图表、图形和动画,直观地展示数据和结果。
丰富的拓展包和资源Mathematica拥有丰富的拓展包和资源。
它提供了大量的内置函数和算法,涵盖了数学、物理、工程、统计学等多个领域。
此外,Mathematica还支持第三方拓展包,用户可以下载和安装各种拓展包,扩展Mathematica的功能。
对于数学教育和研究领域的用户,Mathematica还提供了丰富的教程、文档和示例代码,用户可以参考和学习。
mathmatica符号运算
![mathmatica符号运算](https://img.taocdn.com/s3/m/76f4bc730a4c2e3f5727a5e9856a561253d32161.png)
Mathematica是一种强大的数学符号计算系统,它可以进行符号运算、数值计算、绘图和数据分析等多种数学操作。
作为一种专业的数学软件,Mathematica在科学研究、工程设计和教育教学中被广泛应用,它为用户提供了丰富的功能和简洁的操作界面。
本文将介绍Mathematica中的符号运算功能,包括基本运算、方程求解、微积分计算、矩阵运算等内容,帮助读者更好地了解和使用这一强大的数学工具。
一、基本运算在Mathematica中,可以使用基本的运算符号进行加减乘除等计算。
输入表达式"a + b",Mathematica会自动进行加法运算并给出结果。
除了基本的四则运算外,Mathematica还支持幂运算、取余运算等操作,可以满足用户在数学计算中的各种需求。
二、方程求解Mathematica能够对各种类型的方程进行求解,包括线性方程、二次方程、多项式方程、常微分方程等。
用户可以通过输入方程表达式,使用Solve或NSolve等函数进行求解,得到方程的解析解或数值解。
Mathematica还支持对方程组进行求解,可以解决多元方程的求解问题。
三、微积分计算微积分是数学中重要的内容,Mathematica提供了丰富的微积分计算功能,包括求导、积分、极限、级数等操作。
用户可以通过输入函数表达式,使用D、Integrate、Limit等函数进行微积分计算,得到函数的导数、不定积分、定积分等结果。
这些功能在科学研究和工程设计中具有重要的应用价值。
四、矩阵运算矩阵运算是数学中常见的运算方式,Mathematica为用户提供了丰富的矩阵运算功能,包括矩阵乘法、转置、逆矩阵、特征值等操作。
用户可以通过输入矩阵表达式,使用Dot、Transpose、Inverse、Eigenvalues等函数进行矩阵运算,得到矩阵的乘积、转置矩阵、逆矩阵、特征值等结果。
这些功能上线性代数和数值分析中具有重要的应用价值。
mathematica辅助数学定理的证明
![mathematica辅助数学定理的证明](https://img.taocdn.com/s3/m/91e32716bdd126fff705cc1755270722192e59f1.png)
mathematica辅助数学定理的证明Mathematica是一款功能强大的符号计算软件,它不仅可以实现各种数学计算,而且还可以辅助数学定理的证明,极大提高数学证明的效率和可靠性。
下面以辅助证明一个简单的数学定理为例,来介绍如何使用Mathematica来辅助进行数学证明。
首先,我们要确定待证的定理。
这里以“若n是偶数,则n的平方也是偶数”为例。
接着,我们要使用Mathematica来辅助证明这个定理。
具体步骤如下:
1. 定义变量n为偶数,使用偶数的定义式进行证明。
偶数定义式:
若n是整数,存在整数k,使得n=2k。
偶数平方:
(n^2)=(2k)^2=4k^2
这样,我们就可以使用Mathematica来验证偶数定义式和偶数平方式是否正确。
具体代码如下:
n=2k (*定义n为偶数*)
(n==2k) (*使用偶数定义式验证n是偶数*)
(n^2==4k^2) (*使用偶数平方式验证n^2是偶数*)
运行以上代码,得到的结果如下:
True
True
True
从结果可以看出,当n为偶数时,n的平方也是偶数,上述定理得到证明。
以上就是使用Mathematica来辅助数学定理的证明的基本步骤。
当然,在实际应用中,还需要根据具体的定理和证明方法来进行具体的操作。
总之,Mathematica作为一款强大的符号计算软件,不仅可以辅助数学计算,还可以辅助数学定理的证明,极大提高数学证明的效率和可靠性。
mathematica 矩阵计算 概述及解释说明
![mathematica 矩阵计算 概述及解释说明](https://img.taocdn.com/s3/m/22836d2dae1ffc4ffe4733687e21af45b207fe53.png)
mathematica 矩阵计算概述及解释说明1. 引言1.1 概述本篇文章旨在介绍和解释Mathematica中的矩阵计算,着重讨论矩阵的定义、性质以及常见的操作和运算。
Mathematica是一种强大的数学软件,它提供了丰富的功能和工具,特别适用于进行复杂矩阵计算。
通过学习本文,读者将能够全面了解Mathematica中矩阵计算的基本概念和使用方法。
1.2 文章结构本文共分为五个主要部分。
首先,在引言部分我们将对文章进行概述,并明确目标。
接下来,在Mathematica 矩阵计算概述部分,我们会详细介绍矩阵的定义、性质以及Mathematica中表示矩阵的方法。
然后,在矩阵计算的示例说明部分,我们会给出相关示例来演示如何进行一些常见操作,例如矩阵乘法、转置操作以及线性方程组求解等。
之后,在Mathematica中其他相关功能介绍部分,我们会简要介绍一些与矩阵计算相关的其他功能和工具,例如图形化展示功能、统计分析功能以及符号运算功能。
最后,在结论与展望部分,我们会总结我们的主要观点,并探讨Mathematica矩阵计算的未来发展方向。
1.3 目的本文的目的是提供给使用Mathematica进行矩阵计算的用户一个全面且清晰的概述和解释。
通过深入了解Mathematica中矩阵计算的基本概念和使用方法,读者将能够更加高效地应用Mathematica进行复杂矩阵运算,并在实际问题中找到合适的解决方案。
同时,本文也旨在展示Mathematica提供的其他功能和工具,使读者能够充分利用这些功能来辅助他们在数学领域中进行更广泛、更深入的研究与应用。
2. Mathematica 矩阵计算概述2.1 矩阵的定义和性质在数学中,矩阵是由数字或符号排列成的矩形数组。
它可以有不同的维度,例如m行n列的矩阵具有m个元素的行和n个元素的列。
在Mathematica中,我们可以使用一维或二维列表来表示矩阵。
一维列表表示向量(即只有一个维度的矩阵),而二维列表表示矩阵。
mathematica符号运算
![mathematica符号运算](https://img.taocdn.com/s3/m/a31dd73ff68a6529647d27284b73f242326c314a.png)
mathematica符号运算Mathematica符号运算符号运算是一种利用抽象符号表示数学定义、定理及其证明过程的数学思想。
由于Mathematica自身是一个完整的逻辑框架,因此,Mathematica非常适合用来处理符号运算。
在这里,我们将主要介绍Mathematica内置函数如何处理符号运算,以及如何使用符号运算处理复杂的数学问题。
1 了解Mathematica符号运算的基础Mathematica是一款适合进行符号运算的软件,它拥有丰富的符号运算功能,包括求解方程、解析数学计算、数值积分、数值求导等等。
首先,我们需要了解Mathematica符号运算的基础操作,比如定义变量、定义函数、用于数值求解的调用函数、用于解析结果的调用函数等等。
定义变量:在Mathematica中,利用“=”来定义变量,例如: x = 1定义函数:函数是Mathematica符号运算的基础,在Mathematica 中,定义函数有两种方法,例如:f(x) = x^2也可以用以下形式来定义函数f[x_] := x^2用于数值求解的调用函数:利用N函数可以用来计算出数值求解结果:N[f[2]]用于解析结果的调用函数:利用Solve函数可以用来求出解析结果:Solve[x^2 - 4 == 0]2 Mathematica实现符号运算符号运算在Mathematica中可以用两种方式实现:一是用内置函数;二是用自定义函数。
Mathematica的内置函数可以用来快速解决符号运算问题,其中最常用的是Integrate, Solve, D, DSolve等函数。
Integrate函数用来求积分,例如:Integrate[x^2, x]Solve函数用来求解方程组,例如:Solve[{x^2+y^2==1,x+y==0},{x,y}]D函数用来求导数,例如:D[x^2,x]DSolve函数用来求解微分方程,例如:DSolve[y'[x] == x, y[x], x]另外,用户也可以自定义函数来实现符号运算,例如,我们可以定义一个函数求两个函数的和:Add[f_,g_]:=f+g这样,我们就可以用以下命令求出两个函数f和g的和:Add[f[x],g[x]]3 符号运算的应用Mathematica符号运算可以用来处理一些复杂的数学问题。
mathematica 符号计算
![mathematica 符号计算](https://img.taocdn.com/s3/m/7d17e02d7f21af45b307e87101f69e314332fac7.png)
Mathematica 是一款强大的数学软件,它可以进行符号计算,也就是处理数学公式和表达式,而不仅仅是数字。
以下是一些在 Mathematica 中进行符号计算的基本操作:1. **定义符号变量**:在Mathematica 中,你可以使用`Symbol` 函数定义符号变量。
例如,`Symbol[x]` 会创建一个名为 x 的符号。
2. **基本运算**:Mathematica 支持基本的数学运算,如加法、减法、乘法、除法、指数等。
例如,`x + y`、`x - y`、`x * y`、`x / y` 和 `x^n` 分别表示加法、减法、乘法、除法和指数运算。
3. **函数和表达式**:你可以定义自己的函数,并使用这些函数进行计算。
例如,`f[x_] := x^2 + 3x` 定义了一个函数f(x),这个函数返回 x 的平方加上 3x。
4. **积分和微分**:Mathematica 可以进行符号积分和微分。
例如,`Integrate[x^2, x]` 会计算 x^2 的积分,而 `D[x^2, x]` 会计算 x^2 的导数。
5. **简化表达式**:你可以使用 `Simplify` 函数来简化表达式。
例如,`Simplify[x^2 + 2x]` 会简化表达式为 `x(x + 2)`。
6. **求解方程**:你可以使用 `Solve` 函数来求解方程。
例如,`Solve[x^2 - 4 == 0, x]` 会求解方程 x^2 - 4 = 0 并返回解x = ±2。
7. **替换和替换规则**:你可以使用 `ReplaceAll` 或 `/.` 操作符来替换表达式中的一部分。
例如,`expr /. x -> y` 会将表达式 expr 中的所有 x 替换为 y。
以上是 Mathematica 进行符号计算的一些基本操作。
要深入了解 Mathematica 的符号计算功能,建议查阅 Mathematica 的官方文档或相关教程。
第零讲 Mathematica软件使用简介
![第零讲 Mathematica软件使用简介](https://img.taocdn.com/s3/m/0f1010b365ce050876321368.png)
第零讲Mathematica软件使用简介一、系统概述Mathematica是美国Wolfram研究公司开发的一个功能强大的计算机数学软件系统,也称为符号计算系统。
Mathematica提供了范围广泛的数学计算功能,支持在各个领域的人们所需要的各种计算。
它是从事各种理论工作(数学、物理、……)的科学工作者、从事实际工作的工程技术人员、以及学校教师和学生的首选计算平台。
Mathematica的主要功能包括三个方面:符号演算、数值计算和图形技术。
例如,它可以做多项式的各种计算(四则计算、展开、因式分解等);求整式方程、有理式方程和的等的精确解和近似解;数值的或一般表达式的向量和矩阵的各种计算;求一般函数表达式的极限、导函数、积分、幂级数展开、求解某些微分方程等;任意位的整数的精确计算、分子分母为任意非零整数的有理数的精确计算(四则计算、乘方等)以及任意位精确度的数值(实数值或复数值)计算。
使用Mathematica还可以非常方便地作出以各种方式表示的一元和二元函数的图形,可以根据需要自由选择画图的范围和精确度。
因此,Mathematica的出现所带来的思维和解题工具的革新必将对各种需要数学计算和绘制函数图形的工作领域产生深远的影响。
Wolfram研究公司自从1988年推出Mathematica系统的1.0 DOS版本以来,历经多次升级和改版,目前已发出For Windows的 5.0版本。
本精品课程主要以Mathematica4.2 for Microsoft Windows版本为例简要介绍该系统的功能及其应用。
1.Mathematica的工作环境Mathematica的运行环境要成功安装并稳定地运行Mathematica for Windows4.2,用户的计算机必须满足以下基本配置条件:·P3或更高型号处理器的个人或多媒体计算机;·Microsoft Windows98、Windows2000、Windows XP或以上版本;·硬盘空间至少200MB,建议1GB以上Mathematica的工作窗口及使用运行Mathematica系统后,将出现下图所示的主窗口:Mathematica4.2的工作窗口有两种类型:笔记本(Notebook)工作窗口和基于文本(Text Based)的工作窗口,这两个工作窗口分别由Mathematica提供的两个基本组成系统――输入输出控制系统(Front End系统)和内核系统(Kernel系统)所包含的交互接口来实现。
Mathematica作为一个优秀的符号计算系统
![Mathematica作为一个优秀的符号计算系统](https://img.taocdn.com/s3/m/489bc5d126fff705cc170abc.png)
第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[文件名,类型描述] 按类型描述读入文件,参看帮助--。
Mathematica软件介绍及其应用
![Mathematica软件介绍及其应用](https://img.taocdn.com/s3/m/f08465c15fbfc77da269b174.png)
可见,使用表达式”x=.”可以消除变量的赋值
17
Mathematica软件还可以定义函数
(1): f[x_]=Sin[x] (*被定义的函数的自变量后需跟下划线“_”*) (2)?f (*此命令用来查看f的含义*)
18
? 的其他用途
1、获取帮助信息
2、获取更多的帮助信息
3、获取更多的帮助信息
2
Mathematica的进一步说明
它吸取了不同类型软件的一些优点: (1)具有BASIC的简单易学的交互式方法 (2)具有MathCAD\Matlab那样强的数值计算能力 (3)具有Maple的和SMP那样的符号计算能力 (4)具有APL和LISP那样的人工智能列表处理能力 (5)像C和PASCAL那样的结构化设计语言 Mathematica的开发者 Stephen Wolfram是Mathematica的创始人,并被公认为是 当今科学计算的先驱。 Wolfram1959年出生于伦敦。他曾在 牛津大学和加州理工学院接受教育,15岁发表了第一篇科技 论文,1979年20岁时在加州理工学院获得理论物理学博士学 位。 他从1973年开始使用计算机,1981年主持开发了第一个计算 机代数系统SMP。
28
数的类型和精度
在Mathematica中,有四种类型的数据类型: 类型 说明
Integer
Rational Real
任意长度的整数
有理数 实数,可以具有一定的精 度
Complex
复数,a+bI的形式
29
整数,不用解释 有理数:可以看成两个整数的比 实数可以用小数点来区分(在Mathematica中实数可以 有任意精度的。Mathematica的一大特点就是符号计算 功能强大,数值运算不限精度。)
mathematica复杂计算问题
![mathematica复杂计算问题](https://img.taocdn.com/s3/m/ad9b9a15cec789eb172ded630b1c59eef8c79a8b.png)
mathematica复杂计算问题Mathematica 是一种强大的计算机代数系统,它能够处理各种复杂计算问题,包括数学、物理、工程、金融和生物等领域的问题。
在数学领域,Mathematica 可以进行符号计算、数值计算、微分和积分等。
符号计算能够处理代数表达式,包括多项式、方程组、微分方程等。
数值计算则可以进行数值逼近、数值积分和数值解方程等。
Mathematica还包含了各种数学函数和操作符,可以进行对数运算、矩阵运算、傅里叶变换等。
在物理领域,Mathematica 可以处理物理模型的建模和求解。
它包含了各种物理学的符号表达式和物理常量,可以进行力学、电磁学、热学和量子力学等方面的计算。
它还有函数绘图功能,可以用来可视化物理模型和实验数据。
在工程领域,Mathematica 可以进行复杂的数值计算和仿真。
它包含了各种工程学的函数和模型,可以进行结构分析、流体力学、电路分析等计算。
它还有符号模型和仿真功能,可以进行系统建模和系统优化。
在金融领域,Mathematica 可以进行金融模型的建模和求解。
它包含了各种金融学的函数和模型,可以进行金融风险评估、投资组合优化等计算。
Mathematica 还有用于生成金融图表和报告的功能。
在生物领域,Mathematica 可以进行生物模型的建模和求解。
它包含了各种生物学的函数和模型,可以进行分子动力学模拟、生物网络分析等计算。
Mathematica 还有用于可视化生物数据和生成生物图表的功能。
除了以上的应用领域,Mathematica 还具有其他一些特点和功能。
首先,它具有强大的绘图功能,可以绘制二维和三维图形,包括曲线、函数图像、立体图形等。
其次,Mathematica 还有符号求解和化简功能,可以进行代数运算和化简表达式。
此外,Mathematica 还具有编程和脚本功能,可以编写自定义函数和程序。
总之,Mathematica 是一种功能强大的计算机代数系统,能够解决各种复杂计算问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第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[文件名,类型描述] 按类型描述读入文件,参看帮助--。