导图社区 符号计算语言:Mathematica
Mathematica作为一款强大的符号计算语言,能高效地进行符号运算与处理,我汇总了Mathematica的使用方法,共分八章,基本涵盖了各个方面。
编辑于2023-03-10 20:17:51 北京市符号计算语言:Mathematica
第一章:简介
符号计算系统简介
怎样应用Mathematica
内置函数名:英文单词(首字母大写)
函数的变量或运算内容:“[ ]”
列表、变量的范围:“[ ]”
运行代码:“Shift+Enter”
因式分解:Factor[x^3+36x^2+431x]
解线性方程组:Solve[{3x-2y==5,x+y==5},{x,y}]
计算导数:D[x^2*Sin[x],x]
不定积分:Integrate[x^3Sin[x],x]
矩阵特征值:A={{1,3,5},{3,2,7},{1,2,-1}}; Eigenvalues[A]
绘制图像:Plot[Sin[x],{x,-3,3}]
常用操作
一维输入:单元(Y)—转换成—TraditionalForm
二维输入
面板(P)
数学助手(数学格式)
其他:代数操作/基本排版/数字输入
插入(I)
特殊字符:希腊字母等
排版(T):上下标
表格/矩阵(M)
第二章:Mathematica基本量
数的表示及其函数
简单数值类型
整数:Integer
有理数:Rational
实数:Real
复数:Complex
数学常数
45Degree:45°
E:e
GolderRatio:1.618
I:√-1
Infinity:∞
Pi:π
数的转换
转为整数:Round(四舍五入)/Floor(向下取整)/Ceiling(向上取整)
转为实数:N[Pi,6](默认保留五位)
转为分数:Rationalize
常用初等函数
绝对值:Abs[x]
复数实部/虚部/辐角/共轭:Re[z]/Im[z]/Arg[z]/Conjugate[z]
幂函数/平方根:Power[x,y]/Sqrt[x]
指数/对数:Exp[x]/Log[x]
最大/小值:Max[x1,x2,...]/Min[x1,x2,...]
三角/反三角/双曲/反双曲函数:Sin[x]/ArcCot[x]/Sinh[x]/ArcSinh[x]
字符串:双括号“”括起的字符,如“清华大学”
列表生成
表示对象:数组(向量)、矩阵、集合
形式:花括号”{ }“括起有限个元素,元素间用逗号分隔
生成方式
枚举:a={1,2,3}
专用:Range[ ]
循环:Table[ ]
随机生成:RandomReal[ ]
递归列表:RecurrenceTable[ ]
列表元素表示:A={1,2,3}——A[[2]]=2,A[[-1]]=3(倒数第一项)
列表相关函数
编辑
删除:Drop/Delete[ ]
增加:Insert[ ](插入)/Append[ ](追加)
排序:Sort[ ]
求和:Apply[ ]
合并/拆分:Flatten[ ]/Partition[ ]
集合运算
并集:Union[ ]
交集:Intersection[ ]
补集:Complement[ ]
表达式
变量
变量名:在mathematica中变量名通常以英文字母开头,希腊字母和中文字符也可用在变量中,建议变量以小写字母开头,若要大写,应避免使用C、D、E、I等系统已用字母。
变量替换:表达式 /. 规则或ReplaceAll[表达式,规则]
清除变量:Clear[ ]
算数表达式
阶乘:!
变量自加/减:++/--
方幂:^
矩阵乘积/向量内积:.
逻辑表达式
值
True
False
返回原形式(无法确定)
逻辑运算符
与:And/&&
或:Or/||
非:Not/!
逻辑等价:Equivalent
第三章:初等函数
多项式运算
基本运算:PolynomialQuotientRemainder[a1,a2,x](求两多项式相除的商式+余式)
元素提取
检验:PolynomialQ[ ]
给出变量:Variables[ ]
多项式系数:Coefficient[ ]
展开与合并
展开
乘积+正整数方幂:Expand[ ]
乘积+整数方幂:ExpandAll[ ]
嵌套幂次(如对数开方):PowerExpand[ ]
展开分子/分母:ExpandNumerator[ ]/ExpandDenominator[ ]
合并
合并同类项:Collect[ ]
部分分式之和:Apart[ ]/ApartSquareFree[ ]
约分:Cancel[ ]
通分:Together[ ]
因式分解
分解多项式:Factor[ ]
提出多重因式:FactorSquareFree[ ]
高级用法:FactorTerms[ ]/FactorList[ ]/FactorSquareFreeList[ ]
公因式与公倍式
最大公因式:PolynomialGCD[p1,p2,...]
最小公倍式:PolynomialLCM[p1,p2,...]
拓展最大公因式:PolynomialExtendedGCD[ ]
三角函数运算
Expand[ ]/Cancel[ ]/Together[ ]也适用于三角函数运算,但并未结合三角函数公式化简,此时需要在函数中设置:”Trig→True“。例如:Cancel[Sin[x]/(1-Cos[x]^2),Trig→True]
专用函数
和差化积:TrigExpand[ ]
积化和差:TrigReduce[ ]
因式分解:TrigFactor[ ]
欧拉公式
三角变为指数:TrigToExp[ ]
指数变为三角:ExpToTrig[ ]
表达式化简
化简:Simplify[ ]
深入化简:FullSimplify[ ]
依据假设assum执行expr:Assuming[assum,expr]
解方程运算
方程表示
等式:eqn1==eqn2
不等式:>/</!=(不等于)
方程组:{eqn1,eqn2,...}或eqn1&&eqn2&&...
方程和不等式也可被展开、合并、化简:Expand[ ]/Collect[ ]
联立方程组消去变量:Eliminate[ ]
若要把方程的解带入表达式,可直接用运算符“/.”,如:sol=Solve[...]; x^2+y^2/.sol
常规方程求解
符号求解(解析解)
求方程组:Solve[ ]
化简并求解方程组/不等式:Reduce[ ](某些情况下比Solve[ ]更好用)
求解方程组/不等式特解:FindInstance[ ](一般不如Reduce[ ])
仅限求解单个多项式根:Roots[ ]
数值求解
求方程所有数值解:NSolve[ ]
求单个多项式所有数值解:NRoots[ ]
求方程(组)在某一给定点附近的数值根:FindRoot[f,{x,a}](牛顿迭代法)
递归方程求解
求值:RecurrenceTable[ ]
求通解:RSolve[ ]
第四章:微积分
求极限
公式:Limit[expr,x→x0]
累次极限:Limit[Limit[expr,x→x0],y→y0]
微商和微分
微商(导数)
导数/偏导数:D[f,x]/f'[x]
高阶偏导数:D[f,x1,x2,...,xn]→
n阶偏导数:D[f,{x,n}]→
复合函数偏导数:D[f,x,NonConstants→{y1,y2,...,yn}]
偏导数向量:D[f,{{x,y,z,...}}]→
全微分:Dt[f]
不定积分和定积分
不定积分
公式:Integrate[ ]
二重积分:Integrate[f,x,y](先y后x)
分段函数积分:Integrate[Piecewise[{{1,x<1},{x,x>=1}}],x]
向量函数积分:Integrate[{x,E^x,Sin[x]},x]
定积分
解析解:Integrate[f[x],{x,a,b}]→
数值解:NIntegrate[f[x],{x,a,b}](二重积分再加"{y,c,d}")
多重积分
曲线积分:Integrate[f,{x,y}∈Circle[ ]]
曲面积分:Integrate[f,{x,y,z}∈Sphere[]]
注意
Mathematica提供如Bessel函数、Gamma函数和Beta函数等数学物理特殊函数表示积分结果
无法算出结果则仍按Integrate形式输出
级数
幂级数
展开
公式::Series[expr,{x,x0,n}](将expr在x=x0点展开到n阶幂级数)
注意
可直接对抽象函数展开
展开式中可能将分数、对数函数作为基本元素
Series可计算无界函数在无界间断点(瑕点)的洛朗展开式
运算
求和:Sum[ ]
无穷乘积:Product[ ]
给出幂级数中某一项系数:SeriesCoefficient[ ]
反函数级数:InverseSeries[ ]
幂级数复合:ComposeSeries[s1,s2](用幂级数s2代换幂级数s1中的变量x)
傅里叶级数
公式:FourierSeries[ ](周期为2π)
注:对于以2L为周期的函数,在公式后用“FourierParameters→{1,2Pi/L}”说明
正弦/余弦级数
正弦:FourierSinSeries[ ]
余弦:FourierCosSeries[ ]
微分方程
解析解
常微分方程(组)
公式:DSolve[ ]
注
DSolve[ ]是在纯函数形式下求解,其解可以再代入微分的运算
例:DSolve[{y[x]==-z'[x],z[x]==-y'[x],y[0]==0,},{y[x],z[x]},x]
初始条件一并放入“eqns”里
偏微分方程(组):DSolve[eqns,{y1,y2,...},{x1,x2,...}]
数值解:NDSolve[ ]
第八章:程序设计
条件结构
If语句:If[ ]
Which语句:Which[ ]
Switch语句:Switch[ ]
函数式条件
数学函数条件:Piecewise[ ]
条件表达式:f[expr,Assumptions→]
基于列表条件:Cases[ ]/Select[ ]
模式约束:”/;“、”p ? test“
循环结构
Do[ ](内部循环变量j为局部变量,不影响外部变量值j)
While[ ]
For[ ]
While、For循环中没有隐含的局部变量
”++“/”--“
x++/x--:在使用x后将x加/减1
++x/--x:在使用x前将x加/减1
x+=y/x-=y:x=x+y/x=x-y
x*=y x/=y:x=x*y/x=x/y
迭代函数(函数式循环)
Nest[ ]/NestList[ ]/NestWhile[ ]
不动点迭代:FixedPoint[ ]/FixedPointList[ ]
程序模块
Block[ ]:保护模块外部同名变量,使它们不受模块内部语句影响
Module[ ]:保护模块内部的局部变量,使它们不受模块外部影响
With[ ](速度比Module快)
茱莉亚集合和罗德尔部落特集:JuliaSetPlot[ ]/MandelbrotSetPlot[ ]
中止程序运行
计算(v)→放弃计算(A)
"Alt"+"."
程序包
给函数附加定义信息
定义信息:s::tag=string
显示信息:Message[s::tag]
打开/关闭信息:On/Off[s::tag]
构建程序包
程序包为纯文本格式,通常后缀名”*.m“
查看当前上下文(是否为全局Global`):$Context
使用程序包:<<Package`或Needs["Package`"]
Wolfram系统标准程序包
统计学程序包
Analysis of Variance
Hypothesis Testing
离散数学程序包
Combiatorica
微积分程序包
Fourier Series
Variational Methods
Numerical Differential Equation Analysis
第七章:自定义函数和模式替换
自定义函数
在符号计算环境下并不强调函数与命令的区别
模式x_
定义函数:f[x_]:=x-1(变量可以是数、符号、矩阵)
注意:必须要有“_”,若定义g[x]:=x-1,系统只认识g[x],g[1]无定义原样输出
同名函数不同模式(面向对象):f[x_,y_]:=x+y f[x_,x_]:=Sin[x]+Cos[x],此时f有两个函数定义(查看定义:?f)
一些定义方式
x的任意幂次:x^n_
任意表达式的任意幂次:x_^n_
含有两个表达式的表:{a_,b_}
一个或多个变量:x_ _
零个、一个或多个变量:x_ _ _
模式类型说明
表达式:x_
近似实数:x_Real
表:x_L:ist
头为h的表达式:x_h
整数:x_Integer
复数:x_Complex
矩阵:x_Matrix
更复杂时可用“?”进行判断,例:u[x_ ? NumericQ]:=x+2
”:=“与“=”(延时赋给与立即赋给)
延时赋给(:=):会在调用时再计算后面的表达式(定义函数多用)
立即赋给(=):会在进行赋值时就计算后面表达式的结果(定义变量多用)
模式替换
自定义模式替换
作为函数:f=x; f /. x→2
改函数名:f[x] /. f→g
两次替换:{a,b,c} /. a→b /. b→d
同时替换:{a,b,c} /. →{a→b,b→d}
函数取代:1+x^(1/2)+x^2 /. x^n_→g[m]
“→”和“:>”(立即变换和延迟变换)
延迟变换(:>):定义时不求值,调用时才求值(多用于数学关系式)
立即变换(→):定义规则时就求值(多用于替换具有确定值的表达式)
非自动调用规则
Mathematica系统规则分为两类:自动调用规则和非自动调用规则。自动调用规则包括系统自带和用户用“=”或“:=”定义的规则,非自动调用规则由“→”或“:>”定义,要用“/.”、“//.”或Replace才能调用。
/. :对表达式只调用一次
//. :对表达式反复调用,直到不再变化
Replace[ ]:替换一层
ReplaceAll[ ]:替换所有部分(更常用)
给模式替换附加条件( /;)
pattern /; condition:满足条件condition时模式匹配
Ins→rhs /;condition:满足条件condition时调用规则
重复模式、纯函数
重复模式
expr.. :重复一次或多次
expr.. :重复零次或多次
计数:Count[ ]
列表:Cases[ ]
去除:Except[ ]
删除:DeleteCases[ ]
纯函数
定义:Mathematica中提供了不取函数名定义函数的方式,称为纯粹函数。
优势:可使定义函数和调用一次完成
公式:Function[{变量表},表达式]
简略形式:表达式 &(表达式中变量为#,#1,#2,##等)
例:定义函数f(u,v)=u^2+v^3,计算f(2,3)
普通方式:f[u_,v_]:=u^2+v^3; f[2,3]
纯函数:Function[{u,v},u^2+v^3][2,3]
纯函数简略形式:(#1^2+#2^3)&[2,3]
函数的属性与属性定义
属性名称
交换律:Orderless
结合律:Flat
恒等:OneInditity
自动分配到表中:Listable
函数定义收到保护:Protected
属性运算函数
显示属性表:Attributes[ ]
设置属性:Attributes[ ]={属性1,属性2,...}
添加属性:SetAttributes[ ]
清除属性:ClearAttributes[ ]
用户一般不要修改Mathematica內部函数的属性。若要增加某函数功能,先去掉保护属性,做出定义后,再恢复保护属性。
第六章:Mathematica作图
函数绘图
一维
直角坐标:Plot[ ]
极坐标:PolarPlot[ ](转换关系:(x,y)=(rcosθ,rsinθ))
二维
参数:ParametricPlot[ ]
函数:Plot3D[ ]
三维
参数:ParametricPlot3D[ ](空间曲线/曲面)
球坐标:SphericalPlot3D[ ](转换关系:(x,y,z)=(rsinθcosφ,rsinθsinφ,rcosθ))
相关知识
绘图区间:ImplicitRegion[ ](设定开区间或不易用xmin,xmax表达的)
绘图选项:在绘图函数的“选项”处使用,例如:"Plotstyle→{Thick,Red,Dashed},PlotLegends→”Expressions""等。
重现/重组图形:Show[pic1,pic2,...,picn,选项名→选项值](想对已画好的图像进一步修改)
数据绘图
二维
数据点集
直角坐标:ListPlot[ ]
极坐标:ListPolarPlot[ ]
曲线:ListLinePlot[ ]
三维
散点图:ListPointPlot3D[ ]
曲面图:ListPlot3D[ ]
图元绘图
二维
公式:Graphics[ ]
图形元素
箭头:Arrow[ ]
弧:Circle[ ]
(椭)圆:Disk[ ]
线段:Line[ ]
点:Point[ ]
多边形:Polygon[ ]
矩形:Rectangle[ ]
三维
公式:Graphics3D[ ]
图形元素
球体:Sphere[ ]
立方体:Cuboid[ ]
圆柱体:Cylinder[ ]
圆锥体:Cone[ ]
球:Ball[ ]
三维管体:[ ]
图形动画
交互式演示:Manipulate[ ]
动画演示:Animate[ ]
驻点动画演示:ListAnimate[ ]
播放声音
声音:Play[ ]
播放音符:Sound[ ]
音符表示:SoundNote[ ]
语音:Speak[ ]
等值线和密度图
二维
等值线:ContourPlot[ ]
密度图:DensityPlot[ ]
三维
等值面:ContourPlot3D[ ]
密度图:DensityPlot3D[ ]
数学相关作图
区间可视化:NumberLinePlot[ ]
图示函数区域:RegionPlot(3D)
函数可视化:DiscretePlot[ ]
向量图:VectorPlot(3D)[ ]
流量图:StreamPlot[ ]
图论:GraphPlot3D[ ]
旋转曲面:RevolutionPlot3D[ ]
第五章:线性代数
矩阵的定义
矩阵的输入
在Mathematica中,向量与矩阵用列表示,向量是简单的列表,矩阵是列表的列表。
向量
Table[expr,{i,a,b,d}]
Array[f,n]→{f[1],f[2],...,f[n]}
矩阵
Table[expr,{i,ai,bi,di},{j,aj,bj,dj}]
定义m行n列矩阵:Array[f,{m,n}]
将列表用矩阵形式表示
A//MatrixForm
MatrixForm[A]
矩阵还可通过“菜单→插入→表格/矩阵”完成
例:Table[If[i≤j,i+j,0],{i,5},{j,5}]//MatrixForm
特殊矩阵
对角阵:DiagonalMatrix[{对角线元素列表}]
n阶单位阵:IdentityMatrix[n]
稀疏矩阵:SparseArray[ ]
希尔伯特矩阵:HilbertMatrix[ ](数学变换矩阵,正定,高度病态)
汉克尔矩阵:HankelMatrix[ ](每条副对角线元素相等)
旋转矩阵:RotationMatrix[θ]
矩阵分量操作
取元素:A[[i,j]]/Part[A,i,j]
取子矩阵:Take[A,i,j]
矩阵的基本运算
算术运算
加法:A+B/Plus[A,B]
减法:A-B/Subtrace[A,B]
负矩阵:-A/Minus[A]
对应元素相乘:A*B/Times[A,B](不是矩阵乘法)
对应元素相除:A/B或Divide[A,B](不是逆)
每个元素方幂:A^n/Power[A,n]
矩阵乘法/向量内积:A.B/Dot[A,B]
外积(叉乘):Cross[A,B]
矩阵方幂:MatrixPower[A,n](n个A相乘)
MatrixExp[A]→
转置:Transpose[A]
共轭转置:ConjugateTranspose[A]
行列式和逆矩阵(方阵)
行列式:Det[A]
逆矩阵:Inverse[A]
余子式:Minors[A]
特征值和特征向量(方阵)
特征多项式:CharacteristicPolynomial[A,x]
特征值:Eigenvalues[A]
特征向量:Eigenvectors[A]
特征值+特征向量:Eigensystem[A]
秩、迹、范数
秩:MatrixRank[A]
矩阵/向量范数:Norm[A,p](p=1,2,Infinity(缺省为2))
向量v的各项和:Total[v]
迹:Tr[A](对角元素和)/Tr[A,f](广义迹f[a11,a22,...,ann])
矩阵的高级运算
线性方程组求解AX=B
知识储备
当方阵A行列式不为零时,AX=B有唯一解X=A-¹B
当|A|=0或A不是方阵时,可能无解或有无穷多解
有无穷多解时,由基础解系向量的线性组合加一个特解组成线性方程组的全部解
求AX=B的一个特解X:LinearSolve[A,B]
求齐次方程组AX=0的一个基础解系:NullSpace[A]
Gauss-Jordan消去法:RowReduce[A]
线性空间相关运算
矩阵的秩(维数):Rank[{a1,a2,...,an}]
标准正交化:Orthogonalize[{a1,a2,...,an}]
向量单位化:Normalize[v,f]
向量投影:Projection[u,v,f](u在v方向上的投影,f是线性空间中内积的定义,f缺省时采用标准复内积和L2范数)
矩阵的乘积分解
若尔当分解:JordanDecomposition[A](对方阵A返回{P,J},使A=PJP-¹,J是Jordan标准形)
LU分解:LUDecomposition[A](对方阵返回{LU,P,C}使A=P.L.U)