Mathematica是一款
科学计算软件,很好地结合了数值和
符号计算引擎、
图形系统、
编程语言、文本系统、和与其他
应用程序的高级连接。很多功能在相应领域内处于世界领先地位,它也是使用最广泛的数学软件之一。Mathematica的发布标志着现代科技计算的开始。Mathematica是世界上
通用计算系统中最强大的系统。自从1988发布以来,它已经对如何在科技和其它领域运用计算机产生了深刻的影响。
简介
发展历史
人们常说,Mathematica的发布标志着现代科技计算的开始。自从上世纪六十年代以来,在数值、代数、图形、和其它方面一直有个别的
软件包存在。但是,Mathematica的基本概念是用一个连贯的和统一的方法创造一个能适用于科技计算各个方面的
软件系统。实现这一点的关键之处是发明了一种新的计算机
符号语言。这种语言能仅仅用很少量的基本元素制造出广泛的物体,满足科技计算的
广泛性。这在人类历史上还是第一次。
当Mathematica1.0版发布时,《纽约时代报》写道:“这个软件的重要性不可忽视”;紧跟着《
商业周刊》又将Mathematica评比为当年十大最重要产品。在科技界,Mathematica被形容为智能和实践的革命。
影响
Mathematica的
用户群中最主要的是
科技工作者和其它专业人士。但是,Mathematica还被广泛地用于教学中。数学中的许多计算是非常繁琐的,特别是函数的作图费时又费力,而且所画的图形很不规范,所以流行用Mathematica
符号计算系统进行学习,从高中到研究生院的数以百计的课程都使用它,很多问题便迎刃而解。此外,随着学生版的出现,Mathematica已经在全世界的学生中流行起来,成为了一个著名的工具。
开发组
Mathematica的开发工作是由世界级的队伍组成的。这支队伍自从成立以来一直由
史蒂芬·沃尔夫勒姆领导。Mathematica的成功使得公司能够集中注意力在非常长远的目标上,运行独特的
研发项目,以及通过各种各样的
免费网站支持世界各地的知识爱好者。
长期以来,Mathematica核心设计的
普遍性使得其涉及的领域不断增长。从刚开始是一个主要用于数学和科技计算的系统,到发展成许多计算领域的主要力量,Mathematica已经成为世界上最强大的
通用计算系统。
高性能计算
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 分为两部分:内核和前端。内核对表达式(即 Mathematica 代码)进行解释,并且返回结果表达式。
前端由
Theodore Gray 设计,提供了一个 GUI,它使得用户可以创建并且编辑一个“笔记本文档”,该笔记本文档可以包含程序代码和其它格式化的文本(比如公式、图像、GUI组件、表格、声音等),并且支持标准文字处理功能。所有的内容和格式都可以通过算法生成或者通过交互式方法进行编辑。
文档可以使用层次式单元进行结构化处理,这样便于对文档划分章节。文档也可以表示为
幻灯片形式,便于进行演讲。笔记本与其内容均以 Mathematica 表达式的形式存储,并且可用使用 Mathematica 程序进行创建、编辑和修改,而且还可以转化为其它格式,比如
TeX 或者 XML。
前端包括
开发工具,比如
调试器、输入自动补全、以及自动语法着色。
默认情况下,Mathematica 使用一个标准前端,不过也有其它前端可供选择,包括 Wolfram Workbench、2006年引入的基于
Eclipse 的
IDE。它们为 Mathematica 提供了面向项目的开发工具,包括
版本管理、调试、归档和测试。 此外,Mathematica 还包括一个
命令行前端(Mathematica Kernel)。
函数概览
基本运算
a+b+c 加
a-b 减
a b c 或 a*b*c 乘
a/b 除
a^b 次方
Mathematica 数字的形式
256 整数
2.56 实数
11/35 分数
2+6I 复数
Pi 圆周率,π=3.141592654…
Degree 角度转换弧度的常数,Pi/180
I 虚数单位,其值为 √-1
指定之前计算结果的方法
% 前一个运算结果
%% 前二个运算结果
%%…%(n个%) 前n个运算结果
%n 或 Out[n] 前n个运算结果
复数的运算指令
a+bI 复数
Re[z], Im[z] 复数z的实数/虚数部分
Abs[z] 复数z的大小或模数(Modulus)
Arg[z] 复数z的幅角(Argument)
expr1; expr2; expr3 做数个运算,但只印出最后一个运算的结果
expr1; expr2; expr3; 做数个运算,但都不印出结果
expr; 做运算,但不印出结果
常用数学函数
Sin[x],Cos[x],
Tan[x],Cot[x],Sec[x],Csc[x]
三角函数,其引数的单位为
弧度Sinh[x],Cosh[x],Tanh[x],…
双曲函数ArcSin[x],ArcCos[x],ArcTan[x]
反三角函数ArcCot[x],ArcSec[x],ArcCsc[x]
ArcSinh[x],ArcCosh[x],ArcTanh[x],…
反双曲函数Exp[x] 指数
Round[x] 最接近x的整数
Floor[x] 小于或等于x的最大整数
Ceiling[x] 大于或等于x的最小整数
n! 阶乘
Random[] 0至1之间的
随机数(最新版本已经不用这个函数,改为使用RandomReal[])
Max[a,b,c,...],Min[a,b,c,…] a,b,c,…的极大/
极小值数值设定
x=a 将变数x的值设为a
x=y=b 将变数x和y的值均设为b
x=. 或 Clear[x] 除去变数x所存的值
变数使用的一些法则
xy 中间没有空格,视为变数xy
x y x乘上y
3x 3乘上x
x3 变数x3
x^2y 为 x^2 y次方运算子比乘法的运算子有较高的处理顺序
四个处理指令
Expand[expr] 将 expr展开
Simplify[expr] 将 expr化简成精简的式子
FullSimplify[expr] Mathematica 会尝试更多的
化简公式,将 expr化成更精简的式子
多项式转换
Together[expr] 将 expr各项
通分在并成一项
Apart[expr,var] 视var以外的变数为常数,将 expr拆成数项的和
Cancel[expr] 把分子和
分母共同的因子消去
分母分子运算
Denominator[expr] 取出expr的分母
Numerator[expr] 取出expr的分子
ExpandDenominator[expr] 展开expr的分母
ExpandNumerator[expr] 展开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,...}项的因子提出
函数指数运算
TrigExpand[expr] 将三角函数展开
TrigFactor[expr] 将三角函数所组成的数学式因式分解
TrigReduce[expr] 将相乘或次方的三角函数化成一次方的基本三角函数之组合
ExpToTrig[expr] 将
指数函数化成三角函数或双曲函数
TrigToExp[expr] 将三角函数或双曲函数化成指数函数
次方乘积
ComplexExpand[expr] 假设所有的变数都是实数来对 expr展开
ComplexExpand[expr,{x,y,…}] 假设x,y,..等变数均为复数来对 expr展开
PowerExpand[expr] 将
系数最高次方
Coefficient[expr,form] 于 expr中form的系数
Exponent[expr,form] 于 expr中form的最高次方
Part[expr,n] 或 expr[[n]] 在 expr项中第n个项
代换运算子
expr/.x->value 将 expr里所有的x均代换成value
expr/.{x->value1,y->value2,…} 执行数个不同变数的代换
expr/.{{x->value1},{x->value2},…} 将 expr代入不同的x值
expr//.{x->value1,y->value2,…} 重复代换到 expr不再改变为止
求解方程式
Solve[lhs==rhs,x] 解
方程式lhs==rhs,求x
Nsolve[lhs==rhs,x] 解方程式lhs==rhs的
数值解Solve[{lhs1==rhs1,lhs2==rhs2,…},{x,y,…}] 解
联立方程式,求x,y,…
NSolve[{lhs1==rhs1,lhs2==rhs2,…},{x,y,…}] 解联立方程式的数值解
FindRoot[lhs==rhs,{x,x0}] 由初始点x0求lhs==rhs的根
四种括号
p[[i ]] 或 Part[p,i] 双方括号,p的第i项元素
p[[i,j]] 或 Part[p,i,j] p的第i项第j个元素
缩短输出指令
expr//Short 显示一行的计算结果
Short[expr,n] 显示n行的计算结果
Command; 执行command,但不列出结果
查询物件
?Command 查询Command的语法及说明
??Command 查询Command的语法和属性及选择项
?Aaaa* 查询所有开头为Aaaa的物件
定义查询清除
f[x_]= expr 立即定义函数f[x]
f[x_]:= expr 延迟定义函数f[x]
f[x_,y_,…] 函数f有两个以上的引数
?f 查询函数f的定义
Clear[f] 或 f=. 清除f的定义
Remove[f] 将f自系统中清除掉
含有预设值的Pattern
a_+b_. b的预设值为0,即若b从缺,则b以0代替
x_ y_ y的预设值为1
x_^y_ y的预设值为1
条件式的自订函数
lhs:=rhs/;condition 当condition成立时,lhs才会定义成rhs
If指令
If[test,then,else] 若test为真,则回应then,否则回应else
If[test,then,else,unknow] 同上,若test无法判定真或假时,则回应unknow
极限
Limit[expr,x->c] 当x趋近c时,求expr的极限
Limit[expr,x->c,Direction->1]
Limit[expr,x->c,Direction->-1]
微分
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,x] 全微分
Dt[f,x1,x2,…] 全微分
Dt[f,x,Constants->{c1,c2,…}] 全微分,视c1,c2,…为常数
不定积分
Integrate[f,x] 不定积分 ∫f dx
定积分
Integrate[f,{x,xmin,xmax}]
定积分Integrate[f,{x,xmin,xmax},{y,ymin,ymax}] 定积分
列之和与积
Sum[f,{i,imin,imax}] 求和
Sum[f,{i,imin,imax,di}] 求数列和,引数i以di递增
Sum[f,{i,imin,imax},{j,jmin,jmax}]
Product[f,{i,imin,imax}] 求积
Product[f,{i,imin,imax,di}] 求数列之积,引数i以di递增
Product[f,{i,imin,imax},{j,jmin,jmax}]
泰勒展开式
Series[expr,{x,x0,n}] 对 expr于x0点作
泰勒级数展开至(x-x0)n项
Series[expr,{x,x0,m},{y,y0,n}] 对x0和y0展开
a==b 等于
a>b 大于
a
a!=b 不等于
逻辑运算子
!p not
p||q||… or
p&&q&&… and
Xor[p,q,…] exclusive or
LogicalExpand[expr] 将逻辑表示式展开
二维绘图指令
Plot[f,{x,xmin,xmax}]
画出f在xmin到xmax之间的图形
Plot[{
f1,f2,…},{x,xmin,xmax}]
同时画出数个函数图形
Plot[f,{x,xmin,xmax},option->value]
指定特殊的绘图选项,画出函数f的图形
Plot指令
选项 预设值 说明
AspectRatio 1/GoldenRatio 图形高和宽之比例,高/宽
AxesLabel Automatic 为坐标轴贴上标记,若设定为
AxesLabel->{?ylabel?},则为y轴之标记。若设定为AxesLabel->{?
xlabel?,?ylabel?}
,则为{x轴,y轴}的标记
AxesOrigin Automatic 坐标轴的相交的点
DefaultFont 图形里文字的预设字型
Frame False 是否将图形加上外框
FrameLabel False 从x轴下方依
顺时针方向加上图形外框的标记
FrameTicks Automatic (如果Frame设为True)为外框加上刻度;
None则不加刻度
GridLines None 设Automatic则于主要刻度上加上
网格线PlotRange Automatic 指定y方向画图的范围
Ticks Automatic 坐标轴之刻度,设None则没有刻度记号出现
※“Automatic、None、True、False”为Mathmatica常用的选项设定,其代表意义分别为“使用内部设定、不包含此项、作此项目、不作此项目”。
串列绘图
ListPlot[{y1,y2,…}] 画出{1,y1},{2,y2},…的点
ListPlot[{{x1,y1},{x2,y2},…}] 画出{x1,y1},{x2,y2},…的点
ListPlot[{{x1,y1},{x2,y2},…},PlotJoined->True] 把画出来的点用线段连接
绘图颜色指定
Plot[{f1,f2,…},{x,xmin,xmax},
PlotStyle->{RGBColor[r1,g1,b1],RGBColor[r2,g2,b2],…}]
彩色绘图
Plot[{f1,f2,…},{x,xmin,xmax},
PlotStyle->{GrayLevel,GrayLevel[j],…}]
图形处理指令
Show[plot] 重画一个图
Show[plot1,plot2,…] 将数张图并成一张
Show[plot,option->opt] 加入选项
图形之排列
Show[GraphicsArray[{plot1,plot2,…}]] 将图形横向排列
Show[GraphicsArray[{,,…}]] 将图形
垂直排列Show[GraphicsArray[{{plot1,plot2,…},…}]] 将图形成二维矩阵式排列
二维参数图
ParametricPlot[{f1,f2},{t,tmin,tmax}]
参数绘图
ParametricPlot[{{f1,f2},{g1,g2},…},{t,tmin,tmax}]
同时绘数个参数图
ParametricPlot[{f1,f2},{t,tmin,tmax},AspectRatio->Automatic]
等高线图
ContourPlot[f,{x,xmin,xmax},{y,ymin,ymax}]
ContourPlot选项
选项 预设值 说明
ColorFunction Automatic 上色的预设值为灰阶,选Hue则为系列色彩
Contours 10
等高线的数目。设Contours->{z1,z2,…}则指定等高值为z1,z2,…
ContourShading True Contour的上色,选False则不上色
PlotRange Automatic 高度z值的范围,也可指定{zmin,zmax}
版本
Mathematica14.0
版本 14.0 继续扩展计算涵盖的范围和广度,同时对现有计算领域进行简化和完善。
Mathematica13.3
2023年6月
Mathematica13
2021年12月
版本 13.0 共添加了 117 个新功能,数百个更新和升级,以及上千个错误修复和小型增强,新版本还包括了许多新的想法,使系统更易于使用和并更加流畅。
Mathematica12
2019年4月
版本 12.0 对 Mathematica 在数学和几何、地理可视化、音频和图像处理、机器学习等方面的功能进行了大幅扩展,其中包括主要的前端功能强化和系统范围的性能改进。
Mathematica 11
2016年8月
Mathematica 10.4
2016年3月
Mathematica 10.2
2015年7月
Mathematica 10.1
2015年3月
Mathematica 10.0.0
2014年7月
Mathematica9.0.0
2012年11月
Mathematica8.0
2010年1月
Mathematica7.0.1
2009年3月
Mathematica7.0
2008年11月
Mathematica6.0.3
2008年6月
Mathematica6.0.2
2008年2月
Mathematica6.0.1
2007年7月
Mathematica6.0
2007年5月
Mathematica5.2
2005年2月
Mathematica5.1
2004年11月
Mathematica5.0
2003年6月
Mathematica4.2
2002年6月
Mathematica4.1
2000年11月
Mathematica4.0
1999年5月
Mathematica3.0
1996年9月
Mathematica2.2
1993年6月
Mathematica2.1
1992年6月
Mathematica2.0
1991年1月(首次重要更新)
Mathematica1.2
1989年8月
Mathematica1.0
1988年6月
Mathematica 的首次发布
产品功能
Mathematica的功能包括:
1、使用一行代码可显示的图形
3、各种特殊属性函数库
5、支持复数、任意精度数、区间算术和符号运算
6、2维和3维数据以及函数的可视化和动画工具
9、多变量统计
程序库,包括支持100多种数据分布的
数据拟合、
假设检验、概率和期望的运算
12、
程序语言支持:过程式
编程语言、函数式编程语言和面向对象的编程语言
14、提供用于图论中图的分析和可视化的工具
15、分析组合问题的工具
16、用于文本挖掘的工具
19、金融运算的工具,包括期权、债券、年金、
派生工具等的计算
20、群论函数
23、控制系统程序库
25、导入和导出数据、图像、视频、
GIS、
CAD等各种
文件格式,并支持对生物医学类数据的输入和输出
26、链接
Wolfram Alpha的大量数学、科学、社会经济学类的
数据集合
27、查看并且重新使用前面的输入和输出(包括图像和文本记号)的笔记本界面
29、编写并行程序的工具
30、当与互联网连接时,在笔记本中可同时使用“自由格式语言输入”(一个自然语言型的用户界面)和 Mathematica 语言
应用的链接
Mathematica通过名为MathLink的协议与其它应用程序链接。通过该协议,Mathematica实现内核与前端的通讯,并且也提供了内核和其它应用程序之间的一个通用接口。
Mathematica不但本身具有丰富的功能,而且它也提供了大量接口用以访问其它软件,从而可以方便地调用那些其它软件具有但Mathematica暂时不具备的功能。这样做可以进一步增强Mathematica的
适用性。
Wolfram Research发布了一个免费的开发工具包,该工具包允许C programming language编写的应用程序通过MathLink链接到Mathematica内核。
使用.NET/Link,,任何一个.NET程序都可以调用Mathematica执行
计算操作;相应地,Mathematica程序也可以加载.NETclasses、操纵.NET对象并且执行方法调用。这样我们就可以从Mathematica内部构建.NET
图形用户界面。类似地,Mathematica也有J/Link。顾名思义,它可以用于Mathematica与Java程序之间的交互。
与
SQL数据库之间的通讯是通过内置的JDBC支持实现的。Mathematica也可以从一个
WSDL描述中安装网页服务。
在Mathematica和
OpenOffice.org Calc以及
Microsoft Excel之间有双向的链接。
Mathematica也提供了与许多专门的数学软件包之间的链接,包括
MATLAB、R、Sage、SINGULAR、MathModelica和Origin
Mathematica中的
数学公式也可以与其它计算或者排版软件(比如
MathML)的公式进行相互转换。
Mathematica可以通过多种方式捕获
实时数据,比如与
LabVIEW的链接,金融数据feeds,或者直接通过GPIB从硬件设备(IEEE 488)、
USB以及串行接口获取。
其他可用界面有JMath,它基于GNU readline和MASH,并利用UNIX命令行运行内置的Mathematica程序(内含参数)。
支持语言
语言:C、.NET、Java、SQL
支持软件
软件:
OpenOffice、Microsoft Excel、MATLAB、R
可计算数据
Mathematica囊括了大量可立即计算的数据。用户可以通过编程访问这些数据,并且也可以通过
Wolfram Research的数据服务器自动更新数据。某些数据如
股票价格和天气数据都是实时递送的。
适用平台
Mathematica可以在许多不同的平台上运行,包括:
Linux、
Apple的
Mac OS X以及基于
NT的
Microsoft Windows。所有平台都支持64位实现。在6.0.3之前的版本还支持其它操作系统,包括:
Solaris、
AIX、Convex、
HP-UX、
IRIX、
MS-DOS、
NeXTSTEP、
OS/2、Ultrix和
Windows Me.
Mathematica家用版是Microsoft Windows、Linux和Mac OS X(Intel)上的一个32位应用程序。