mathematica 行向量 列向量 矩阵
- 格式:docx
- 大小:14.83 KB
- 文档页数:3
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+3 Out[1] =6这里In[1] : = 表示第一个输入,Out[1]= 表示第一个输出,即计算结果.2. 数学常数Pi 表示圆周率π; E 表示无理数e; I 表示虚数单位i ; Degree 表示π/180; Infinity 表示无穷大.注:Pi,Degree,Infinity 的第一个字母必须大写,其后面的字母必须小写.3. 算术运算Mathematica 中用“+”、“-”、“*”、“/” 和“^”分别表示算术运算中的加、减、乘、除和 乘方.例2 计算 π⋅⎪⎭⎫ ⎝⎛⋅+⎪⎭⎫⎝⎛⋅--213121494891100. 输入 100^(1/4)*(1/9)^(-1/2)+8^(-1/3)*(4/9)^(1/2)*Pi则输出 3103π+这是准确值. 如果要求近似值,再输入N[%] 则输出 10.543这里%表示上一次输出的结果,命令N[%]表示对上一次的结果取近似值. 还用 %% 表示上 上次输出的结果,用 %6表示Out[6]的输出结果.注:关于乘号*,Mathematica 常用空格来代替. 例如,x y z 则表示x*y*z,而xyz 表示字符 串,Mathematica 将它理解为一个变量名. 常数与字符之间的乘号或空格可以省略.4. 代数运算例3 分解因式 232++x x 输入 Factor[x^2+3x+2] 输出 )x 2)(x 1(++ 例4 展开因式 )2)(1(x x ++ 输入 Expand[(1+x)(2+x)] 输出 2x x 32++例5 通分 3122+++x x 输入 Together[1/(x+3)+2/(x+2)]输出 )x 3)(x 2(x38+++例6 将表达式)3)(2(38x x x+++ 展开成部分分式输入 Apart[(8+3x)/((2+x)(3+x))]输出 3x 12x 2+++ 例7 化简表达式 )3)(1()2)(1(x x x x +++++ 输入 Simplify[(1+x)(2+x)+(1+x)(3+x)]输出 2x 2x 75++三、函数1. 内部函数Mathematica 系统内部定义了许多函数,并且常用英文全名作为函数名,所有函数名的第一个 字母都必须大写,后面的字母必须小写. 当函数名是由两个单词组成时,每个单词的第一个字母都 必须大写,其余的字母必须小写. Mathematica 函数(命令)的基本格式为函数名[表达式,选项] 下面列举了一些常用函数:算术平方根x Sqrt[x] 指数函数x e Exp[x] 对数函数x a log Log[a,x]对数函数x ln Log[x]三角函数 Sin[x], Cos[x], Tan[x], Cot[x], Sec[x], Csc[x] 反三角函数ArcSin[x], ArcCos[x], ArcTan[x], ArcCot[x], AsrcSec[x], ArcCsc[x]双曲函数 Sinh[x], Cosh[x], Tanh[x], 反双曲函数 ArcSinh[x], ArcCosh[x], ArcTanh[x] 四舍五入函数 Round[x] (*取最接近x 的整数*) 取整函数 Floor[x] (*取不超过x 的最大整数*) 取模 Mod[m,n] (*求m/n 的模*)取绝对值函数 Abs[x] n 的阶乘 n! 符号函数 Sign[x] 取近似值 N[x,n] (*取x 的有n 位有效数字的近似值,当n 缺省时,n 的默认值 为6*)例8 求π的有6位和20位有效数字的近似值. 输入 N[Pi] 输出 3.14159输入 N[Pi, 20] 输出 3.1415926535897932285 注:第一个输入语句也常用另一种形式: 输入 Pi//N 输出 3.14159例9 计算函数值(1) 输入 Sin[Pi/3] 输出23 (2) 输入 ArcSin[.45] 输出 0.466765 (3) 输入 Round[-1.52] 输出 -2 例10 计算表达式)6.0arctan(226sin 2ln 1132+-+-e π 的值 输入 1/(1+Log[2])*Sin[Pi/6]-Exp[-2]/(2+2^(2/3))*ArcTan[.6] 输出 0.2749212. 自定义函数在Mathematica 系统内,由字母开头的字母数字串都可用作变量名,但要注意其中不能包含空 格或标点符号.变量的赋值有两种方式. 立即赋值运算符是“=”,延迟赋值运算符是“: =”. 定义函数使用 的符号是延迟赋值运算符“: =”.例11 定义函数 12)(23++=x x x f ,并计算)2(f ,)4(f ,)6(f . 输入Clear[f,x]; (*清除对变量f 原先的赋值*) f[x_]:=x^3+2*x^2+1; (*定义函数的表达式*) f[2] (*求)2(f 的值*)f[x]/.{x->4} (*求)4(f 的值,另一种方法*)x=6; (*给变量x 立即赋值6*)f[x] (*求)6(f 的值,又一种方法*)输出17 97 289注:本例1、2、5行的结尾有“;”,它表示这些语句的输出结果不在屏幕上显示.四、解方程在Mathematica 系统内,方程中的等号用符号“==”表示. 最基本的求解方程的命令为 Solve[eqns, vars]它表示对系数按常规约定求出方程(组)的全部解,其中eqns 表示方程(组),vars 表示所求未知变量. 例12 解方程0232=++x x 输入 Solve[x^2+3x+2==0, x] 输出 }}1x {},2x {{-→-→例13 解方程组 ⎩⎨⎧=+=+1dy cx by ax输入 Solve[{a x + b y == 0,c x + d y ==1}, {x,y}]输出 ⎭⎬⎫⎩⎨⎧⎭⎬⎫⎩⎨⎧+-→-→ad bc a y ,ad bc b x例14 解无理方程a x x =++-11输入 Solve[Sqrt[x-1]+ Sqrt[x+1] == a, x]输出 ⎪⎭⎪⎬⎫⎪⎩⎪⎨⎧⎪⎭⎪⎬⎫⎪⎩⎪⎨⎧+→24a 4a 4x 很多方程是根本不能求出准确解的,此时应转而求其近似解. 求方程的近似解的方法有两种, 一种是在方程组的系数中使用小数,这样所求的解即为方程的近似解;另一种是利用下列专门用于 求方程(组)数值解的命令:NSolve[eqns, vars] (*求代数方程(组)的全部数值解*)FindRoot[eqns, {x, x0}, {y, y0} ,]后一个命令表示从点),,(00 y x 出发找方程(组)的一个近似解,这时常常需要利用图像法先大致确定所求根的范围,是大致在什么点的附近.例15 求方程013=-x 的近似解 输入 NSolve[x^3-1== 0, x]输出 {{→x -0.5-0.866025ii},{→x -0.5+0.866025ii},{→x 1.}} 输入 FindRoot[x^3-1==0,{x, .5}] 输出 {→x 1.}下面再介绍一个很有用的命令:Eliminate[eqns, elims] (*从一组等式中消去变量(组)elims*)例16从方程组 ⎪⎩⎪⎨⎧=+=-+-+=++11)1()1(1222222y x z y x z y x 消去未知数y 、z .输入Eliminate[{x^2+y^2+z^2 ==1,x^2+(y-1)^2 + (z-1)^2 ==1, x + y== 1},{y, z}] 输出 0x 3x 22==+-注:上面这个输入语句为多行语句,它可以像上面例子中那样在行尾处有逗号的地方将行与行 隔开, 来迫使Mathematica 从前一行继续到下一行在执行该语句. 有时候多行语句的意义不太明 确,通常发生在其中有一行本身就是可执行的语句的情形,此时可在该行尾放一个继续的记号“\”, 来迫使Mathematica 继续到下一行再执行该语句.五、保存与退出Mathematica 很容易保存Notebook中显示的内容,打开位于窗口第一行的File菜单,点击Save 后得到保存文件时的对话框,按要求操作后即可把所要的内容存为*.nb文件. 如果只想保存全部输入的命令,而不想保存全部输出结果,则可以打开下拉式菜单Kernel,选中Delete All Output,然后再执行保存命令. 而退出Mathematica与退出Word的操作是一样的.六、查询与帮助查询某个函数(命令)的基本功能,键入“?函数名”,想要了解更多一些,键入“??函数名”,例如, 输入?Plot则输出Plot[f,{x,xmin,xmax}] generates a plot of f as a functionof x from xmin to xmax. Plot[{f1,f2,…},{x,xmin,xmax}] plots several functions fi它告诉了我们关于绘图命令“Plot”的基本使用方法.例17 在区间]1,1y=的图形.[-上作出抛物线2x输入Plot[x^2,{x,-1,1}]则输出例18 .输入Plot[{Sin[x],Cos[x]},{x,0,2Pi}]则输出??Plot则Mathematica会输出关于这个命令的选项的详细说明,请读者试之.此外,Mathematica的Help菜单中提供了大量的帮助信息,其中Help菜单中的第一项Help Browser(帮助游览器)是常用的查询工具,读者若想了解更多的使用信息,则应自己通过Help菜单去学习.空间图形的画法(基础实验)实验目的 掌握用Mathematica 绘制空间曲面和曲线的方法. 熟悉常用空间曲线和空间曲面 的图形特征,通过作图和观察, 提高空间想像能力. 深入理解二次曲面方程及其图形.基本命令1.空间直角坐标系中作三维图形的命令Plot3D命令Plot3D 主要用于绘制二元函数),(y x f z =的图形. 该命令的基本格式为Plot3D[f[x,y],{x,x1,x2},{y,y1,y2},选项]其中f[x,y]是y x ,的二元函数, x1,x2表示x 的作图范围, y1,y2表示y 的作图范围.例如,输入Plot3D[x^2+y^2,{x,-2,2},{y,-2,2}]则输出函数22y x z +=在区域22,22≤≤-≤≤-y x 上的图形(图2.1)与Plot 命令类似, Plot3D 有许多选项. 其中常用的如PlotPoints 和ViewPoint. PlotPoints 的用 法与以前相同. 由于其默认值为PlotPoints->15, 常常需要增加一些点以使曲面更加精致, 可能要 用更多的时间才能完成作图. 选项ViewPoint 用于选择图形的视点(视角), 其默认值为 ViewPoint->{1.3,-2.4,2.0},需要时可以改变视点.2.利用参数方程作空间曲面或曲线的命令ParametricPlot3D 用于作曲面时, 该命令的基本格式为ParametricPlot3D[{x[u,v],y[u,v],z[u,v]},{u,u1,u2},{v,v1,v2},选项]其中x[u,v],y[u,v],z[u,v]是曲面的参数方程表示式. u1,u2是作图时参数u 的范围, v1,v2是参数v 的 范围.例如,对前面的旋转抛物面, 输入ParametricPlot3D[{u*Cos[v],u*Sin[v],u^2},{u,0,3},{v,0,2 Pi}]同样得到曲面22y x z +=的图形(图2.2).由于自变量的取值范围不同, 图形也不同. 不过, 后者比较好的反映了旋转曲面的特点, 因 而是常用的方法.又如, 以原点为中心, 2为半径的球面. 它是多值函数, 不能用命令Plot3D 作图. 但是, 它的 参数方程为,20,0,cos 2,sin sin 2,cos sin 2πθπϕϕθϕθϕ≤≤≤≤===z y x因此,只要输入ParametricPlot3D[{2 Sin[u]*Cos[v],2 Sin[u]*Sin[v],2 Cos[u]},{u,0,Pi},{v,0,2 Pi}]便作出了方程为22222=++y x z 的球面(图2.3)..用于作空间曲线时,ParametricPlot3D 的基本格式为ParametricPlot3D[{x[t],y[t],z[t]},{t,t1,t2},选项]其中x[t],y[t],z[t]是曲线的参数方程表示式. t1,t2是作图时参数t 的范围.例如, 空间螺旋线的参数方程为).80(10/,sin ,cos π≤≤===t t z t y t x输入ParametricPlot3D[{Cos[t],Sin[t],t/10,RGBColor[1,0,0]},{t,0,8 Pi}]则输出了一条红色的螺旋线(图2.4).在这个例子中,请读者注意选项RGBColor[1,0,0]的位置.用于作空间曲线时, ParametricPlot3D 的选项PlotPoints 的默认值是30, 选项ViewPoint 的默 认值没有改变.3.作三维动画的命令MoviPlot3D:无论在平面或空间, 先作出一系列的图形, 再连续不断地放映, 便得到动画. 例如, 输入调用作图软件包命令<<Graphics\Animation.m.执行后再输入MoviePlot3D[Cos[t*x]*Sin[t*y],{x,-Pi,Pi},{y,-Pi,Pi},{t,1,2},Frames->12]则作出了12幅曲面图, 选中任一幅图形, 双击它便可形成动画.实验举例一般二元函数作图例2.1 (教材 例2.1) 作出平面y x z 326--=的图形,其中20,30≤≤≤≤y x . 输入Plot3D[6-2x-3y,{x,0,3},{y,0,2}]则输出所作平面的图形(图2.5).如果只要位于第一卦限的部分, 则输入Plot3D[6-2x-3y,{x,0,3},{y,0,2},PlotRange->{0,6}]观察图形.2.6).图2.6例2.2 (教材 例2.2) 作出函数2214y x z ++=的图形.输入k[x_,y_]:=4/(1+x^2+y^2)Plot3D[k[x,y],{x,-2,2},{y,-2,2},PlotPoints->30,PlotRange->{0,4},BoxRatios->{1,1,1}]则输出函数的图形2.7. 观察图形, 理解选项PlotRange->{0,4}和BoxRatios->{1,1,1}的含义. 选项 BoxRatios 的默认值是{1,1,0.4}.例2.3 (教材 例2.3) 作出函数22y x xye z ---=的图形. 输入命令Plot3D[-x*y*Exp[-x^2-y^2],{x,-3,3},{y,-3,3},PlotPoints->30,AspectRatio->Automatic];则输出所求图形(图 图2.8例2.4 (教材 例2.4) 作出函数)94cos(22y x z +=的图形. 输入Plot3D[Cos[4x^2+9y^2],{x,-1,1},{y,-1,1},Boxed->False,Axes->Automatic,PlotPoints->30,Shading->False]则输出网格形式的曲面图2.9, 这是选项Shading->False 起的作用, 同时注意选项Boxed->False 的作用.二次曲面例2.5 (教材 例2.5) 作出椭球面1194222=++z y x 的图形. 这是多值函数, 用参数方程作图的命令ParametricPlot3D. 该曲面的参数方程为,cos ,sin sin 3,cos sin 2u z v u y v u x === (ππ20,0≤≤≤≤v u ).输入ParametricPlot3D[{2*Sin[u]*Cos[v],3*Sin[u]*Sin[v], Cos[u]},{u,0,Pi},{v,0,2 Pi},PlotPoints->30]则输出椭球面的图形, 可使图形更加光滑.图2.10例2.6 (教材 例2.6) 作出单叶双曲面1941222=-+z y x 的图形. 曲面的参数方程为,tan 3,cos sec 2,sin sec u z v u y v u x === (.20,2/2/πππ≤≤<<-v u )输入ParametricPlot3D[{Sec[u]*Sin[v],2*Sec[u]*Cos[v], 3*Tan[u]},{u,-Pi/4,Pi/4},{v,0,2 Pi},PlotPoints->30]图2.11例2.7 作双叶双曲面13.14.15.1222222-=-+z y x 的图形.曲面的参数方程是,csc 3.1,sin cot 4.1,cos cot 5.1u z v u y v u x ===其中参数πππ<<-≤<v u ,20时对应双叶双曲面的一叶, 参数πππ<<-<≤-v u ,02时对应双叶双曲面的另一叶. 输入sh1=ParametricPlot3D[{1.5*Cot[u]*Cos[v],1.4*Cot[u]*Sin[v],1.3/Sin[u]},{u,Pi/1000,Pi/2},{v,-Pi,Pi}, DisplayFunction->Identity];(*DisplayFunction->Identity 是使图形暂时不输出的选项*) sh2=ParametricPlot3D[{1.5*Cot[u]*Cos[v],1.4* Cot[u]*Sin[v],1.3/Sin[u]},{u,-Pi/2,-Pi/1000}, {v,-Pi,Pi},DisplayFunction->Identity];Show[sh1,sh2,DisplayFunction->$DisplayFunction](*命令Show[sh1,sh2]是把图形sh1,sh2放置在一起, DisplayFunction->$DisplayFunction 是恢复显示图形的选项*) 输出为图2.12.例2.8 可以证明: 函数xy z =的图形是双曲抛物面. 在区域22,22≤≤-≤≤-y x 上作出它的图形.输入Plot3D[x*y,{x,-2,2},{y,-2,2},BoxRatios->{1,1,2}, PlotPoints->30]输出图形略. 也可以用ParametricPlot3命令作出这个图形, 输入ParametricPlot3[{r*Cos[t],r*Sin[t],r^2*Cos[t] *Sin[t]},{r,0,2},{t,0,2 Pi},PlotPoints->30]输出为图2.13例2.9 (教材 例2.7) 作出圆环v z u v y u v x sin 7,sin )cos 38(,cos )cos 38(=+=+=,(πππ22/,2/30≤≤≤≤v u )的图形.输入ParametricPlot3D[{(8+3*Cos[v])*Cos[u],(8+3*Cos[v])*Sin[u],7*Sin[v]},{u,0,3*Pi/2},{v,Pi/2,2*Pi}];图2.14例2.10 画出参数曲面]2,001.0[],4,0[)5/2/ln(tan cos sin sin sin cos ∈∈⎪⎩⎪⎨⎧++===v u u v v z vu y v u x π的图形.输入命令ParametricPlot3D[{Cos[u]*Sin[v],Sin[u]Sin[v],Cos[v]+Log[Tan[v/2]+u/5]}, {u,0,4*Pi},{v,0.001,2}];则输出所求图形(图2.15).曲面相交例2.11 (教材 例2.8) 作出球面22222=++z y x 和柱面1)1(22=+-y x 相交的图形. 输入g1=ParametricPlot3D[{2 Sin[u]*Cos[v],2 Sin[u]*Sin[v],2 Cos[u]},{u,0,Pi},{v,0,2 Pi},DisplayFunction->Identity];g2=ParametricPlot3D[{2Cos[u]^2,Sin[2u],v},{u,-Pi/2,Pi/2},{v,-3,3},DisplayFunction->Identity];Show[g1,g2,DisplayFunction->$DisplayFunction]则输出所求图形(图2.16)例2.12 作出锥面222z y x =+和柱面1)1(22=+-y x 相交的图形. 输入g3=ParametricPlot3D[{r*Cos[t],r*Sin[t],r}, {r,-3,3},{t,0,2 Pi},DisplayFunction->Identity];Show[g2,g3,DisplayFunction->$DisplayFunction]输出为图2.17.图2.17例2.13 画出以平面曲线x y cos =为准线, 母线平等Z 轴的柱面的图形. 写出这一曲面的参数方程为⎪⎩⎪⎨⎧=∈-∈==s z R s t t y t x ],,[,cos ππ 取参数s 的范围为[0, 8]. 输入命令ParametricPlot3D[{t,Cos[t],s},{t,-Pi,Pi},{s,0,8}]则输出所求图形(图2.18).例2.14 (教材 例2.9) 作出曲面x y x y x z =+--=2222,1及xOy 面所围成的立体图形. 输入g1=ParametricPlot3D[{r*Cos[t], r*Sin[t],r^2},{t,0,2*Pi},{r,0,1},PlotPoints->30]; g2=ParametricPlot3D[{Cos[t]*Sin[r],Sin[t]Sin[r],Cos[r]+1},{t,0,2*Pi},{r,0,Pi/2},PlotPoints->30];Show[g1,g2]则输出所求图形(图图2.19例2.15 (教材 例2.10) 作出螺旋线t z t y t x 2,sin 10,cos 10===(R t ∈)在xOz 面上的正投影曲线的图形.所给螺旋线在xOz面上的投影曲线的参数方程为10==.,cosx2ztt输入ParametricPlot[{2t,10Cos[t]},{t,-2Pi,2Pi}];则输出所求图形(图图2.20注:将表示曲线的方程组, 消去其中一个变量, 即得到曲线在相应于这一变量方向上的正投影曲线的方程, 不考虑曲线所在平面, 它就是投影柱面方程; 对于参数方程, 只要注意将方程中并不存在的那个变元看成第二参数而添加第三个方程即可.例2.16 (教材例2.11) 作出默比乌斯带(单侧曲面)的图形.输入Clear[r,x,y,z];r[t_,v_]:=2+0.5*v*Cos[t/2];x[t_,v_]:=r[t,v]*Cos[t]y[t_,v_]:=r[t,v]*Sin[t]z[t_,v_]:=0.5*v*Sin[t/2];ParametricPlot3D[{x[t,v],y[t,v],z[t,v]},{t,0,2 Pi},{v,-1,1},PlotPoints->{40,4},Ticks->False]则输出所求图形(图空间曲线例2.17 (教材 例2.12) 作出空间曲线)60(2,sin ,cos π≤≤===t t z t t y t t x 的图形. 输入ParametricPlot3D[{t*Cos[t],t*Sin[t],2*t,RGBColor[1.0,0,0.5]},{t,0,6 Pi}]则输出所求图形(图图2.22例2.18 绘制参数曲线 ⎪⎩⎪⎨⎧===2/cos 2sin t z t y t x 的图形.输入命令ParametricPlot3D[{Sin[t],2Cos[t],t.2},{t,0,12}];则输出所求图形(图2.23).例2.19 绘制参数曲线 ⎪⎪⎩⎪⎪⎨⎧=+==t z t y t x arctan 211cos 2的图形.输入命令ParametricPlot3D[{Cos[t]^2,1/(1+2*t),ArcTan[t]},{t,0,8}]; 则输出所求图形(图2.24).动画制作例2.20 平面正弦曲线的运动. 输入Table[Plot[Sin[x+t*Pi],{x,0,6 Pi}],{t,0,2,1/8}]则作出了16幅具有不同相位的正弦曲线(输出图形略). 双击屏幕上某一幅画, 则可形成动画. 下面是动画的最后一幅图(图2.25).例2.21 (教材 例2.13) 作模拟水波纹运动的动画. 输入调用软件包命令<<Graphics\Animation.m执行后再输入MoviePlot3D[Sin[Sqrt[x^2+y^2]+t*2*Pi],{x,-8 Pi,8 Pi},{y,-8 Pi,8 Pi},{t,1,0},PlotPoints->50,AspectRatio->0.5,ViewPoint->{0.911,-1.682,2.791},Frames->12]则输出12幅具有不同相位的水面图形, 双击屏幕上任意一幅图, 均可观察动画效果. 下图是第一幅图(图2.26).图2.26例2.22 (教材 例2.14) 用动画演示由曲线],0[,sin π∈=z z y 绕z 轴旋转产生旋转曲面的过程.该曲线绕z 轴旋转所得旋转曲面的方程为,sin 222z y x =+ 其参数方程为])2,0[],,0[(,,sin sin ,cos sin ππ∈∈===u z z z u z y u z x输入For[i=1,i<=30,i++,ParametricPlot3D[{Sin[z]*Cos[u],Sin[z]*Sin[u],z},{z,0,Pi},{u,0,2*Pi*i/30},AspectRatio->1,AxesLabel->{"X","Y","Z"}]];则输出连续变化的30幅图形. 双击屏幕上任意一幅图, 均可观察动画效果. 下面是生成旋转曲面的过程中的第23幅图(图2.27).图2.27例2.23 将一张薄膜贴在1,0,1,0====y y x x 的方框上, 薄膜振动的函数取为)cos()sin()sin()cos 1)(cos 1(16),,(224141222t n m y m x n m n n m t y x u m n ππππππ+⋅-+=∑∑==其中t 为参数, 作出图形随t 的变动而引起薄膜振动的动画.初始位置是).0,,(y x u 通过t 的不同值得到多幅画面, 然后将这些图形连续地一张张显示出来, 即可达到运动的动画效果. 输入命令<<Graphics 'Animation '; Clear[x,y,t,m,n];u[x_,y_,t_]:=Sum[16*(1+Cos[n*Pi])*(1-Cos[m*Pi])*Sin[n*Pi*x]*Sin[m*Pi*y]*Cos[Sqrt[m^2+n^2]*Pi*t] /(m^2*n^2*Pi*2),{m,1,4},{n,1,4}]Animate[Plot3D[u[x,y,t],{x,0,1},{y,0,1}, PlotRange->{-8,8}],{t,0,1.75,0.25}];图2.28附录Ⅰ 大学数学实验指导书项目三 多元函数微积分实验1 多元函数微分学(基础实验)实验目的 掌握利用Mathematica 计算多元函数偏导数和全微分的方法, 掌握计算二元 函数极值和条件极值的方法. 理解和掌握曲面的切平面的作法. 通过作图和观察, 理解二元 函数的性质、方向导数、梯度和等高线的概念.基本命令1.求偏导数的命令D命令D 既可以用于求一元函数的导数, 也可以用于求多元函数的偏导数. 例如: 求),,(z y x f 对x 的偏导数, 则输入D[f[x,y,z],x] 求),,(z y x f 对y 的偏导数, 则输入D[f[x,y,z],y]求),,(z y x f 对x 的二阶偏导数, 则输入D[f[x,y,z],{x,2}] 求),,(z y x f 对y x ,的混合偏导数, 则输入D[f[x,y,z],x,y] …………2.求全微分的命令Dt该命令只用于求二元函数),(y x f 的全微分时, 其基本格式为Dt[f[x,y]]其输出的表达式中含有Dt[x],Dt[y], 它们分别表示自变量的微分d x ,d y . 若函数),(y x f 的表 达式中还含有其它用字符表示的常数, 例如a, 则Dt[f[x,y]]的输出中还会有Dt[a], 若采用选 项Constants->{a}, 就可以得到正确结果, 即只要输入Dt[f[x,y],Constants->{a}]3.在Oxy 平面上作二元函数),(y x f 的等高线的命令ContourPlot 命令的基本格式为ContourPlot[f[x,y],{x,x1,x2},{y,y1,y2}]例如,输入ContourPlot[x^2-y^2,{x,-2,2},{y,-2,2}]则输出函数22y x z -=的等高线图(图1.1). 该命令的选项比较多(详细的内容参见光盘中的实验案例库). 如选项Contours->15表示作15条等高线, 选项Contours->{0}表示只作函数值为0的等高线.实验举例求多元函数的偏导数与全微分例1.1 (教材 例1.1) 设),(cos )sin(2xy xy z +=求.,,,222yx zx z y z x z ∂∂∂∂∂∂∂∂∂输入Clear[z];z=Sin[x*y]+Cos[x*y]^2; D[z,x] D[z,y] D[z,{x,2}] D[z,x,y]则输出所求结果.y Cos x y2y Cos x y Sin x yx Cos x y 2x Cos x y Sin x y2y 2Cos x y 2y 2Sin x y 2y 2Sin x y2Cos x y 2x y Cos x y 2x y Sin x y 2Cos x y Sin x y2x y Sin x y2例1.2 设,)1(y xy z +=求yzx z ∂∂∂∂,和全微分dz.输入Clear[z];z=(1+x*y)^y;D[z,x] D[z,y]则有输出⎪⎪⎭⎫ ⎝⎛++++++-]1[1)1()1(12xy Log xy xy xy xy y y y再输入Dt[z]则得到输出⎪⎪⎭⎫⎝⎛+++++]1[][1])[][()1(xy Log y Dt xy y xDt x yDt y xy y 例1.3 (教材 例1.2) 设,)(y xy a z +=其中a 是常数, 求dz.输入Clear[z,a];z=(a+x*y)^y;wf=Dt[z,Constants->{a}]//Simplify则输出结果:(a+xy)-1+y (y 2Dt[x,Constants->{a}]+Dt[y,Constants->{a}](xy+(a+xy)Log[a+xy]))其中Dt[x,Constants->{a}]就是d x , Dt[y,Constants->{a}]就是d y . 可以用代换命令“/.”把它们 换掉. 输入wf/.{Dt[x,Constants->{a}]->dx,Dt[y,Constants->{a}]->dy}输出为(a+xy)-1+y (dxy 2+dy(xy+(a+xy)Log[a+xy]))例1.4 (教材 例1.3) 设v u e y v u e x u u cos ,sin -=+=,求.,,,yv x v y u x u ∂∂∂∂∂∂∂∂ 输入eq1=D[x==E^u+u*Sin[v],x,NonConstants->{u,v}](*第一个方程两边对x 求导数, 把u,v 看成x,y 的函数*) eq2=D[y==E^u-u*Cos[v],x,NonConstants->{u,v}](*第二个方程两边对x 求导数, 把u,v 看成x,y 的函数*) Solve[{eq1,eq2},{D[u,x,NonConstants->{u,v}],D[v,x,NonConstants->{u,v}]}]//Simplify(*解求导以后由eq1,eq2组成的方程组*)则输出}}][][1(][}],{tan ,,[,][][1][}],{tan ,,[{{v Sin E v Cos E u v Cos E v u ts NonCons x v D v Sin E v Cos E v Sin v u ts NonCons x u D u u u u u -+-->->-+->->-其中D[u,x,NonConstants->{u,v}]表示u 对x 的偏导数, 而D[v,x,NonCosnstants->{u,v}]表示v 对x 的偏导数. 类似地可求得u ,v 对y 的偏导数.微分学的几何应用例1.5 求出曲面222y x z +=在点(1,1)处的切平面、法线方程, 并画出图形.解(1) 画出曲面的图形. 曲面的参数方程为⎪⎩⎪⎨⎧=∈∈==2]2,0[],2,0[,cos 2/sin rz r u u r y u f x π 输入命令Clear[f];f[x_,y_]=2x^2+y^2;p1=Plot3D[f[x,y],{x,-2,2},{y,-2,2}];g1=ParametricPlot3D[{r*Sin[u]/Sqrt[2.],r*Cos[u],r^2}, {u,0,2*Pi},{r,0,2}] 则输出相应图形(图1.2).(2) 画出切平面的图形. 输入命令a=D[f[x,y],x]/.{x->1,y->1}; b=D[f[x,y],y]/.{x->1,y->1}; p[x_,y_]=f[1,1]+a(x-1)+b(y-1);g2=Plot3D[p[x,y],{x,-2,2},{y,-2,2}];则输出切平面方程为,012=-+y x 及相应图形(图1.3).(3) 画出法线的图形. 输入命令ly[x_]=1+b(x-1)/a;lz[x_]=f[1,1]-(x-1)/a;g3=ParametricPlot3D[{x,ly[x],lz[x]},{x,-2,2}]; Show[p1,g2,g3,AspectRatio->Automatic,ViewPoint->{-2.530,-1.025,2.000}];则输出相应图形(图1.4).例1.6 (教材 例1.4) 求曲面14),(22++=y x y x k 在点⎪⎭⎫⎝⎛2164,21,41处的切平面方程, 并把曲面和它的切平面作在同一图形里.输入Clear[k,z];k[x_,y_]=4/(x^2+y^2+1); (*定义函数k(x,y)*)kx=D[k[x,y],x]/.{x->1/4,y->1/2};(*求函数k(x,y)对x 的偏导数, 并代入在指定点的值*) ky=D[k[x,y],y]/.{x->1/4,y->1/2};(*求函数k(x,y)对y 的偏导数, 并代入在指定的值*) z=kx*(x-1/4)+ky*(y-1/2)+k[1/4,1/2]; (*定义在指定点的切平面函数*)再输入qm=Plot3D[k[x,y],{x,-2,2},{y,-2,2},PlotRange->{0,4}, BoxRatios->{1,1,1},PlotPoints->30, DisplayFunction->Identity]; qpm=Plot3D[z,{x,-2,2},{y,-2,2}, DisplayFunction->Identity];Show[qm,qpm,DisplayFunction->$DisplayFunction]则输出所求曲面与切平面的图形(图1.5).多元函数的极值例1.7 (教材 例1.5) 求x y x y x y x f 933),(2233-++-=的极值. 输入Clear[f];f[x_,y_]=x^3-y^3+3x^2+3y^2-9x; fx=D[f[x,y],x] fy=D[f[x,y],y]critpts=Solve[{fx==0,fy==0}]则分别输出所求偏导数和驻点:2236369y y x x -++-{{x->-3,y->0},{x->-3,y->2},{x->1,y->0},{x->1,y->2}}再输入求二阶偏导数和定义判别式的命令fxx=D[f[x,y],{x,2}]; fyy=D[f[x,y],{y,2}]; fxy=D[f[x,y],x,y]; disc=fxx*fyy-fxy^2输出为判别式函数2xy yy xx f f f -的形式:(6+6x)(6-6y)再输入data={x,y,fxx,disc,f[x,y]}/.critpts;TableForm[data,TableHeadings->{None,{ "x ", "y ", "fxx ", "disc ", "f "}}]最后我们得到了四个驻点处的判别式与xx f 的值并以表格形式列出.X y fxx disc f -3 0 -12 -72 27 -3 2 -12 72 31 1 0 12 72 -51 2 12 -72 -1易见,当2,3=-=y x 时,12-=xx f 判别式disc=72, 函数有极大值31; 当0,1==y x 时,12=xx f 判别式disc=72, 函数有极小值-5;当0,3=-=y x 和2,1==y x 时, 判别式disc=-72, 函数在这些点没有极值. 最后,把函数的等高线和四个极值点用图形表示出来,输入d2={x,y}/.critpts;g4=ListPlot[d2,PlotStyle->PointSize[0.02],DisplayFunction->Identity]; g5=ContourPlot[f[x,y],{x,-5,3},{y,-3,5},Contours->40,PlotPoints->60,ContourShading->False,Frame->False,Axes->Automatic,AxesOrigin->{0,0},DisplayFunction->Identity];Show[g4,g5,DisplayFunction->$DisplayFunction]则输出图1.6.从上图可见, 在两个极值点附近, 函数的等高线为封闭的. 在非极值点附近, 等高线不 封闭. 这也是从图形上判断极值点的方法.注:在项目一的实验4中,我们曾用命令FindMinimum 来求一元函数的极值, 实际上,也可 以用它求多元函数的极值, 不过输入的初值要在极值点的附近. 对本例,可以输入以下命令FindMinimum[f[x,y],{x,-1},{y,1}]则输出{-5.,{x->1.,y->-2.36603×10-8}}从中看到在0,1==y x 的附近函数),(y x f 有极小值-5, 但y 的精度不够好.例1.8 求函数22y x z +=在条件0122=-+++y x y x 下的极值. 输入Clear[f,g,la]; f[x_,y_]=x^2+y^2;g[x_,y_]=x^2+y^2+x+y-1; la[x_,y_,r_]=f[x,y]+r*g[x,y]; extpts=Solve[{D[la[x,y,r],x]==0,D[la[x,y,r],y]==0,D[la[x,y,r],r]==0}]得到输出⎭⎬⎫⎩⎨⎧⎭⎬⎫⎩⎨⎧+->-+->-+->-⎩⎨⎧⎭⎬⎫⎩⎨⎧-->--->--->-)31(21),31(21),33(31,)31(21),31(21),33(31y x r y x r再输入f[x,y]/.extpts//Simplify得到两个可能是条件极值的函数值}.32,32{-+但是否真的取到条件极值呢? 可利用等高线作图来判断.输入dian={x,y}/.Table[extpts[[s,j]],{s,1,2},{j,2,3}] g1=ListPlot[dian,PlotStyle->PointSize[0.03],DisplayFunction->Identity]cp1=ContourPlot[f[x,y],{x,-2,2},{y,-2,2},Contours->20,PlotPoints->60,ContourShading->False,Frame->False,Axes-> Automatic,AxesOrigin->{0,0},DisplayFunction->Identity]; cp2=ContourPlot[g[x,y],{x,-2,2},{y,-2,2},PlotPoints->60,Contours->{0},ContourShading-> False,Frame->False,Axes->Automatic,ContourStyle->Dashing[{0.01}],AxesOrigin->{0,0},DisplayFunction->Identity]; Show[g1,cp1,cp2,AspectRatio->1,DisplayFunction->$DisplayFunction]输出为⎪⎭⎪⎬⎫⎪⎩⎪⎨⎧⎪⎭⎪⎬⎫⎪⎩⎪⎨⎧+-+-⎪⎭⎪⎬⎫⎪⎩⎪⎨⎧----)31(21,2321,)31(21,2321 及图1.7. 从图可见,在极值可疑点,2321,2321⎪⎪⎭⎫ ⎝⎛----⎪⎪⎭⎫ ⎝⎛+-+-2321,2321 处, 函数),(y x f z =的等高线与曲线0),(=y x g (虚线)相切. 函数),(y x f z =的等高线是一系列同心圆, 由里向外, 函数值在增大, 在)31(21),31(21--=--=y x 的附近观察, 可以得出),(y x f z =取条件极大的结论. 在),31(21+-=x )31(21+-=y 的附近观察, 可以得出),(y x f z =取条件极小的结论.梯度场例1.9 画出函数222),,(y x z z y x f --=的梯度向量. 解 输入命令<<Graphics`ContourPlot3D` <<Graphics`PlotField3D` <<Calculus`VectorAnalysis`SetCoordinates[Cartesian[x,y,z]];f=z^2-x^2-y^2;cp3d=ContourPlot3D[f,{x,-1.1,1.1},{y,-1.1,1.1},{z,-2,2},Contours->{1.0},Axes->Tr ue,AxesLabel->{"x","y","z"}];vecplot3d=PlotGradientField3D[f,{x,-1.1,1.1},{y,-1.1,1.1},{z,-2,2},PlotPoints->3,Ve ctorHeads->True];Show[vecplot3d, cp3d];则输出相应图形(图1.8)例1.10 在同一坐标面上作出⎪⎪⎭⎫⎝⎛++=2211),(y x x y x u 和 ,11),(22⎪⎪⎭⎫⎝⎛+-=y x y y x v 的等高线图(0>x ), 并给出它们之间的关系.解 输入命令<<Calculus`VectorAnalysis` <<Graphics`PlotField`SetCoordinates[Cartesian[x,y,z]];check[u_,v_]:={Grad[u][[1]]-Grad[v][[2]],Grad[v][[1]]+Grad[u][[2]]} u=x(1+1/(x^2+y^2));v=y(1-1/(x^2+y^2)); check[u,v]//Simplifyugradplot=PlotGradientField[u,{x,-2,2},{y,-2,2},DisplayFunction->Identity];uplot=ContourPlot[u,{x,-2,2},{y,-2,2},ContourStyle->GrayLevel[0],ContourShading->False,DisplayFunction->Identity,Contours->40,PlotPoints->40]; g1=Show[uplot,ugradplot,DisplayFunction->$DisplayFunction];vgradplot=PlotGradientField[v,{x,-2,2},{y,-2,2},DisplayFunction->Identity];vplot=ContourPlot[v,{x,-2,2},{y,-2,2},ContourStyle->GrayLevel[0.7],ContourShading->False,DisplayFunction->Identity,Contours->40,PlotPoints->40]; g2=Show[vplot,vgradplot,DisplayFunction->$DisplayFunction]; g3=Show[uplot,vplot,DisplayFunction->$DisplayFunction];g4=Show[ugradplot,vgradplot,DisplayFunction->$DisplayFunction];则输出相应图形(图1.9),其中(a) ),(y x u 的梯度与等高线图;(b) ),(y x v 的梯度与等高线图; (c) ),(y x u 与),(y x v 的等高线图; (d) ),(y x u 与),(y x v 的梯度图.图1.9从上述图中可以看出它们的等高线为一族正交曲线. 事实上, 有,,2222x v y x x y u y v y x x x u ∂∂-=+=∂∂∂∂=+=∂∂ 且,0=∇⋅∇v u 它们满足拉普拉斯方程022222222=∂∂+∂∂=∂∂+∂∂y vx v y u x u 例1.11 (教材 例1.6) 设,),()(22y x xe y x f +-=作出),(y x f 的图形和等高线, 再作出它的梯度向量gradf 的图形. 把上述等高线和梯度向量的图形叠加在一起, 观察它们之间的关系.输入调用作向量场图形的软件包命令<<Graphics\PlotField.m再输入Clear[f];f[x_,y_]=x*Exp[-x^2-y^2];dgx=ContourPlot[f[x,y],{x,-2,2},{y,-2,2},PlotPoints->60, Contours->25,ContourShading->False,Frame->False,Axes->Automatic,AxesOrigin->{0,0}] td=PlotGradientField[f[x,y],{x,-2,2},{y,-2,2},Frame->False] Show[dgx,td]输出为图1.10. 从图可以看到Oxy 平面上过每一点的等高线和梯度向量是垂直的, 且梯度的 方向是指向函数值增大的方向图1.10例1.12 求出函数244),(y xy x y x f +-=的极值, 并画出函数),(y x f 的等高线、驻点以及),(y x f -的梯度向量的图形.输入命令<<Graphics`PlotField`f=x^4-4*x*y+y^2;FindMinimum[f,{x,1},{y,1}]conplot=ContourPlot[f,{x,-2,2},{y,-3,3},ContourShading->False,PlotPoints->100,Contours->{-4,-2,0,2,4,10,20}];fieldplot=PlotGradientField[-f,{x,-2,2},{y,-3,3},ScaleFunction->(Tanh[#/5]&)];critptplot=ListPlot[{{-Sqrt[2],-2*Sqrt[2]},{0,0},{Sqrt[2],2*Sqrt[2]}},PlotStyle->{PointSize [0.03]}];Show[conplot,fieldplot,critptplot];则得到),(y x f 的最小值.4)82843.2,41421.1(-=f 以及函数的图形(图1.11).实验习题 1.设,xy e z =求.dz2.设),,(y xy f z =求.,,22222y x zy z x z ∂∂∂∂∂∂∂ 3.设),sin (cos ),(228/)(22y x e y x g y x+=+-求.,,2yx z y z x z ∂∂∂∂∂∂∂ 4.试用例1.5的方法求265433051830120),(xy x x x x y x f +++--=的极值. 5.求324y x z +=在01422=-+y x 条件下的极值.6.作出函数42210/)2(),(y x e y x f +-=的等高线和梯度线的图形, 并观察梯度线与等高线的 关系.实验2 多元函数积分学(基础实验)实验目的掌握用Mathematica 计算二重积分与三重积分的方法; 深入理解曲线积分、曲面积分的 概念和计算方法. 提高应用重积分和曲线、曲面积分解决各种问题的能力.基本命令1. 计算重积分的命令lntegrate 和NIntegrate 例如,计算dydx xy x ⎰⎰102, 输入Integrate[x*y^2,{x,0,1},{y,0,x}]则输出 151又如,计算dydx xy )sin(10102⎰⎰的近似值, 输入NIntegrate[Sin[x*y^2],{x,0,1},{y,0,1}] 则输出 0.160839注: Integrate 命令先对后边的变量积分.计算三重积分时,命令Integrate 的使用格式与计算二重积分时类似. 由此可见, 利用 Mathematica 计算重积分, 关键是确定各个积分变量的积分限. 2. 柱坐标系中作三维图形的命令CylindricalPlot3D使用命令Cylindricalplot3D, 首先要调出作图软件包. 输入 <<Graphics`ParametricPlot3D` 执行成功后便可继续下面的工作.使用命令Cylindricalplot3D 时,一定要把z 表示成r ,θ的函数. 例如,在直角坐标系中方 程22y x z +=是一旋转抛物面, 在柱坐标系中它的方程为2r z =. 因此,输入 CylindricalPlot3D[r^2,{r,0,2},{t,0,2Pi}] 则在柱坐标系中作出了该旋转抛物面的图形.3. 球面坐标系中作三维图形命令SphericalPlot3D使用命令SphericalPlot3D, 首先要调出作图软件包. 输入 <<Graphics`ParametricPlot3D` 执行成功后便可继续下面的工作.命令SphericalPlot3D 的基本格式为SphericalPlot3D[r[],θϕ, {}],,{},,,2121θθθϕϕϕ其中r[],θϕ是曲面的球面坐标方程, 使用时一定要把球面坐标中的r 表示成ϕ、θ的函数. 例如,在球面坐标系中作出球面,22222=++z y x 输入Sphericalplot3D[2,{u,0,pi},|v,0,2,pi|,plotpoints->40]则在球面坐标系中作出了该球面的图形. 4. 向量的内积用“.”表示两个向量的内积. 例如,输入 vecl={al,bl,cl} vec2={a2,b2,c2} 则定义了两个三维向量, 再输入 vec1. vec2 则得到它们的内积a1a2+b1b2+c1c2实验举例计算重积分例2.1 (教材 例2.1) 计算,2dxdy xyD⎰⎰ 其中D 为由,,2y x y x ==+ 2=y 所围成的有界区域.先作出区域D 的草图, 易直接确定积分限,且应先对x 积分, 因此, 输入 Integrate[x*y^2,{y,1,2},{x,2-y,Sqrt[y]}] 则输出所求二重积分的计算结果.120193例2.2 (教材 例2.2) 计算,)(22dxdy e Dy x⎰⎰+- 其中D 为.122≤+y x如果用直角坐标计算, 输入Clear[f,r];f[x,y]=Exp [-(x^2+y^2)];Integrate[f[x,y],{x,-1,1},{y,-Sqrt[1-x^2],Sqrt[1-x^2]}]则输出为dx x 1Erf e 211x 2⎥⎦⎤⎢⎣⎡-π⎰--其中Erf 是误差函数. 显然积分遇到了困难.如果改用极坐标来计算, 也可用手工确定积分限. 输入Integrate[(f[x,y]/.{x->r*Cos[t],y->r*Sin[t]})*r,{t,0,2 Pi},{r,0,1}] 则输出所求二重积分的计算结果eπ-π 如果输入NIntegrate[(f[x,y]/.{x->r*Cos[t],y->r*Sin[t]})*r,{t,0,2 Pi},{r,0,1}] 则输出积分的近似值1.98587例 2.3 (教材 例 2.3) 计算dxdydz z y x)(22++⎰⎰⎰Ω, 其中Ω由曲面222y x z --=与22y x z +=围成.先作出区域Ω的图形. 输入g1=ParametricPlot3D[{Sqrt[2]*Sin[fi]*Cos[th],Sqrt[2]*Sin[fi]*Sin[th], Sqrt[2]*Cos[fi]},{fi,0,Pi/4},{th,0,2Pi}] g2=ParametricPlot3D[{z*Cos[t],z*Sin[t],z},{z,0,1},{t,0,2Pi}] Show[g1,g2,ViewPoint->{1.3,-2.4,1.0}]则分别输出三个图形(图2.1(a), (b), (c)).考察上述图形, 可用手工确定积分限. 如果用直角坐标计算, 输入 g[x_,y_,z_]=x^2+y^2+z;Integrate[g[x,y,z],{x,-1,1},{y,-Sqrt[1-x^2], Sqrt[1-x^2]},{z,Sqrt[x^2+y^2],Sqrt[2-x^2-y^2]}] 执行后计算时间很长, 且未得到明确结果.现在改用柱面坐标和球面坐标来计算. 如果用柱坐标计算,输入Integrate[(g[x,y,z]/.{x->r*Cos[s],y->r*Sin[s]})*r, {r,0,1},{s,0,2Pi},{z,r,Sqrt[2-r^2]}]则输出π⎪⎪⎭⎫⎝⎛+-15281252 如果用球面坐标计算,输入Integrate[(g[x,y,z]/.{x->r*Sin[fi]*Cos[t],y->r*Sin[fi]*Sin[t],z->r*Cos[fi]})*r^2*Sin[fi],{s,0,2Pi},{fi,0,Pi/4},{r,0,Sqrt[2]}]则输出π⎪⎪⎭⎫ ⎝⎛+-321662551这与柱面坐标的结果相同.重积分的应用例2.4 求由曲面()y x y x f --=1,与()222,y x y x g --=所围成的空间区域Ω的体积.输入Clear[f,g];f[x_,y_]=1-x -y;g[x_,y_]=2-x^2-y^2;Plot3D[f[x,y],{x,-1,2},{y,-1,2}] Plot3D[g[x,y],{x,-1,2},{y,-1,2}] Show[%,%%]一共输出三个图形,首先观察到Ω的形状. 为了确定积分限, 要把两曲面的交线投影到Oxy 平面上输入 jx=Solve[f[x,y]==g[x,y],y] 得到输出 ⎭⎬⎫⎩⎨⎧⎭⎬⎫⎩⎨⎧⎪⎭⎫ ⎝⎛-++→⎭⎬⎫⎩⎨⎧⎪⎭⎫ ⎝⎛-+-→22445121,445121x x y x x y为了取出这两条曲线方程, 输入 y1=jx[[1,1,2]] y2=jx[[2,1,2]] 输出为⎪⎭⎫ ⎝⎛-+-2445121x x⎪⎭⎫ ⎝⎛-++2445121x x再输入tu1=Plot[y1,{x,-2,3},PlotStyle->{Dashing[{0.02}]},DisplayFunction->Identity];tu2=Plot[y2,{x,-2,3},DisplayFunction->Identity]; Show[tu1,tu2,AspectRatio->1, DisplayFunction-> $DisplayFunction]输出为图2.2, 由此可见,y 是下半圆(虚线),y 是上半圆,因此投影区域是一个圆.设21y y =的解为1x 与2x ,则21,x x 为x 的积分限. 输入 xvals=Solve[y1==y2,x]输出为 ()()⎭⎬⎫⎩⎨⎧⎭⎬⎫⎩⎨⎧+→⎭⎬⎫⎩⎨⎧-→6121,6121x x 为了取出21,x x , 输入x1=xvals[[1,1,2]]x2=xvals[[2,1,2]]输出为()6121- ()6121+。
Mathematica可进行矩阵的各种运算,如矩阵求逆、矩阵的转置、矩阵与向量的乘法等.下面列出主要的运算.记k为常数,u,v为向量,A,B为矩阵k*A------------------------常数乘矩阵k+u-----------------------向量u的每一个元素加上ku+v----------------------向量的对应元素相加u.v-----------------------向量的内积u*v-----------------------向量的对应元素相乘A.u---------------------矩阵乘向量u.A-----------------------向量乘矩阵A.B--------------------------矩阵乘矩阵Transpose[A]-----------------求矩阵A的转置阵Inverse[A]--------------------求矩阵A的逆矩阵Det[A]-------------------------求矩阵A的行列式Eigenvalues[A]-----------------求数字阵A的特征值Eigentvectors[A]---------------求数字阵A的特征向量LinearSolve[A,v]---------------求解线性方程组Ax=vChop[%n]-------------------舍去第n个输出中无实际意义小量矩阵可以左乘以向量或右乘以向量, Mathematica也不区分“行”,或“列”向量,自动进行可能的运算.例:In[1]:=A={{a,b},{c,d}}; v={x,y};In[2]:=A.v (A左乘以v)Out[2]={ax+by,cx+dy}In[3]:=v.A (A右乘以v)Out[3]={ax+cy,bx+dy}In[4]:=Inverse[A]Out[4]=如果矩阵的元素是近似数,则求出的逆矩阵也是近似的。
附录Mathematica 软件简介Mathematica是一个功能强大的数学软件.它集数值计算、符号运算,绘图功能于一身,堪称众多数学软件中的佼佼者.加之其语法规则简单,操作使用方便,深受广大科技工作者的喜爱,得到广泛的使用.数学函数和常数Mathematica提供了大量的数学函数,给运算带来很大方便.下面列出一些常用的函数.注:Mithematica提供的函数,其名称中的字母大小写是固定的(特别开头字母均为大写),不得误用;函数的自变量以方括号[ ]括起来.Mathemaica还提供了许多数学常数,下面列出了一些常数(均以大写字母开头).Pi -------------------π; E---------------------e; Infinity--------------∞I----------------------1函数和常数均可参与运算,下面是一些运算的例子.In[ l]:=Pi^2Out[ 1]=π2In[2]:=N[ Pi,11]Out[2]=3.1415626535In[3]:=Log[E^8]Out[3]=8In[4]:=Sin[Sqrt[%1]/6]Out[4]=1/2用户不仅可以使用Mathemaica提供的函数和常数,还可以自定义函数和常数.方法如下:形式功能f[x_]:= expr-------------定义函数ff[x_,y_]:=exp r-----------定义多变量的函数f?f------------------------显示函数的定义Clear[f]-----------------清除f的定义x=value-------------给变量x赋值x=.清除变量x的值注:定义函数时,在等式左端的方括号中的变量必须跟随下到线符号“_”;定义的函数或变量的名称不要使用大写字母开头,以免和Mathemaica的函数或常数混淆.例:In[1]:=f[x_]:=x^5;f[x_,y_]:=Sqrt[x^2+y^2];z=3;其中输入语句后的分号“;”表示不显示输出结果,定义了函数、变量以后,便可以在运算中使用.In[4]:=f[2]Out[4]=32In[5]:=f[1+b]Out[5]=(1+b)2In[6]:=g[z,4]Out[6]=5如果忘记了已定义的函数的容,可以使用?f查询f的定义.当函数或变量使用完以后,最好将其清除,以免带来麻烦.3.符号运算符号运算即代数式的运算.它是Mathemaica的重要功能.下面简介符号运算的主要功能.(1)符号赋值Mathemaica不仅可以把一个常值赋给一个符号,还可以把一个表达式赋给一个符号.其规则如下:x =value--------------------将value 赋给x x =.-----------------------清除赋给x 的值expr/.x-> value -------------用value 替换expr 中的xexpr/.{x->xvalue,y->yvalue}----------用xvalue,yvalue 分别替换expr 中的x,y. 例:In[1]:=t =l +x Out[1]=1+x In[2]:= l- t^ 2 Out[2]=1-(1+x)2 In[3]:=t =. Out[3]=1-(1+x)2 In[4]:=l- t^ 2 Out[4]=1-t 2 In[5]:=%2/.x->2Out[5]=-8(2)代数式变换Mathernatica 提供了许多进行代数式变换的一些函数,下面列出常用的函数. Expand[expr]-----------------------展开exprExpandAll[expr]--------------------展开expr 的分子、分母 Factor[expr]-------------------------对expr 进行因式分解 Together[expr]----------------------对expr 进行通分 Apart [expr ]---------------------将 expr 分解为简单分式 Cancel[expr]----------------------消去exp r 的分子、分母的公因式 Simplify[expr]--------------------把expr 化为最少项形式 例: In[1]:=t=(x-1)^2(2+x)/((1+x)(x-3)^2),)x ()x ()x ()x (++-++-=1321Out[1]22 In[2]:=Expand[t] (展开分子,分母不变)x)(1x)3(x)(1x)3(3x)(1x)(-32Out[2]2322++-+++--++=x x In[3]:=ExpandAll[t] (展开分子、分母)323323253953935392Out[3]x x x x x x x x x x x +-+++-+-+-+=In[4]:=Together[%] (通分)32353932Out[4]x x x x x +-++-=In[5]:=Apart[%] (化为部分分式)x )4(11x )4(-319x )(-351Out[5]2++++++= In[6]:=Factor[%] (分解因式)x)(1x)(-3x)(2x)(-1Out[6]22++++= In[7]:=Simplify[%5] (将表达式化简)322539x )(2x )(-1Out[7]xx x +-+++= 除了上述常用的变换外,Mathematica 还可以进行许多种类型的变换.下面再看一些例子.In[8]:=Expand[2Cos[x]^3*Sin[2x]^2, Trig->True] (展开三角函数)Out[8]:=Cos @x D 3-Cos @x D 7+6Cos @x D 5Sin @x D 2-Cos @x D 3Sin @x D4In[9]:=Factor[%,Trig->True] Out[9]=8 Cos[x]5Sin[x]2In[10]:=ComplexExpand[Sin[x+y*I]] (展开复函数) Out[10]:=Cosh[y]Sin[x]+ICos[x]Sin[y]In[11]:=s=Expand[(x+y)^3];In[12]:=Coefficient[s,x^2] (取出s 中x^2项的系数) Out[12]=3yIn[13]:=Numerator[%1] (取出%1中的分子) Out[13]=(-1+x)2(2+x)In[14]:=Denominator[%1] (取出%1中的分母) Out[14]=(-3+x)2(1+x)Mathematica 还允许用户自己定义变换规则,例如: In[15]:=mysin=Sin[2*x_]->2Sin[x]Cos[x]; In[16]:=Sin[2*(x+y)^2]/.mysin Out[16]=2Cos[(x+ y)2]Sin[(x+ y)2]总之Mathematica 进行变换的功能是非常强的.(3)解方程Mathematica 可以用多种方法求解符号方程.下面列出主要的解法: Solve[equ,vars]-------------------求方程的一般解 Reduce[equ,vars]-----------------求方程的全部解 NSolve[equ,vars]----------------求方程的数值解FindRoot[equ,{x,a}]--------------求方程在 a 附近的数值解 其中,equ 是待求解的方程,var 是未知量. 例 In[1]:=Solve[a*x+b==0,x]注:方程中,等号必须用“= =” Out[1]={{x->-b/a}} In[2]:=Reduce[a*x+b==0,x]Out[2]=a == 0 && b == 0 || x ==-b/a && a != 0使用Reduce 给出了a!=0时的解和a=0,b=0时的解,(此时x 为任意值).对四次及四次以下的代数方程, Mathematica 总能给精确解.四次以上的方程,若能分解因式,亦可给出精确解.In[3]:=Solve[x^3+3x^2+ 3x+ 2== 0,x] Out[3]=当求不出精确解时,Mathemaica 以符号形式给出结果 In[4]:=x^5+5x+1==0; In[5]:=Solve[%4,x] Out[5]=8x ?Root @1+5#1+#15&,1D <,8x ?Root @1+5#1+#15&,2D <,8x ?Root @1+5#1+#15&,3D <,8x ?Root @1+5#1+#15&,4D <,8x ?Root @1+5#1+#15&,5D <上述方程求不出精确解,此时可求数值解. In[6]:=NSolve[%4,x]Out[6]= 8x ?-1.0045-1.06095?<,8x ?-1.0045+1.06095?<,8x ?-0.199936<,8x ?1.10447-1.05983?<,8x ?1.10447+1.05983?<如果要求在某点附近的数值解,使用FindRoot In[7]:=FindRoot[x*Sin[x]==1/2,{x,1}] Out[7]={x->0.740841}使用 Solve 还可以求解方程组.Out[8]三 微积分进行高等数学中的各种运算是Mathematica 的主要功能.Mathematica 可进行微积分、线性代数和工程数学中的许多运算.特别是其符号运算能力,令人惊叹.现在Mathematica 已受到越来越多科技工作者的欢迎和使用。
使用一个参数的 Range 来创建一个从1开始的整数列表:或使用两个参数的 Range 来创建从一个从更大的值开始的整数列表:使用三个参数可以得到相邻元素间隔不为1的列表:Table[i^2,{i,10}]或使用 Table 创建这头10个平方:正如 Range 一样,Table 可以从更大的值开始,或进行任意数量的跳跃:使用 NestList 将 f 应用于 x 0到3次的结果创建一个列表:NestList[f,x,3]{x,f[x],f[f[x]],f[f[f[x]]]}用 Array 创建一个长度为4的列表,其中元素为 f[i]:Array[f,4]{f[1],f[2],f[3],f[4]}Array[f,{3,2}]{{f[1,1],f[1,2]},{f[2,1],f[2,2]},{f[3,1],f[3,2]}}List[{"a","b","c"},{"you","are","good"}]{{a,b,c },{you,are,good }}使用 RandomInteger 创建一个由0到10之间的随机整数(由 m 存储)组成的 4*4 矩阵:m =RandomInteger [10,{4,4}]{{5,0,2,5},{3,2,8,6},{9,9,8,0},{2,2,3,4}}MatrixForm [m ](5025328699802234) 您可以将函数应用于列表.您可以直接将数学函数应用于一个列表:数学函数继续向纵深发展:1+{{a },{a,b },{a,b,c }}2{{1+a 2},{1+a 2,1+b 2},{1+a 2,1+b 2,1+c 2}}Length 给出列表长度:Length [{a,b,c }]3用 Map 将一个函数应用于一个列表中的元素(不仅限于数学函数):Map [f,{a,b,c }]{f [a ],f [b ],f [c ]}这里使用 Map 将 Length 应用于各个子列表:Map[Length,{{a },{a,b },{a,b,c }}]{1,2,3}v =Range [10]2{1,4,9,16,25,36,49,64,81,100}使用 Part 取出列表的第三个元素:Part [v,3]9或使用[[...]] (Part 的简写形式):v[[3]]9将;;(Span 的简写形式)与Part 合用,取出从1到5的元素:v[[1;;5]]{1,4,9,16,25}取出最后七个元素(负号表示从后向前数):v[[−7;;]]{16,25,36,49,64,81,100}Mathematica 中的矩阵是等长度列表的列表. 您可以像操作列表一样从矩阵中取出元素.设置一个5*5整数矩阵:m=Partition[Range[25]2,5]{{1,4,9,16,25},{36,49,64,81,100},{121,144,169,196,225},{256,289,324,361,400},{441,484,529,576,625}}使用MatrixForm 使之以矩阵形式显示:MatrixForm[m](1491625 36496481100121144169196225256289324361400441484529576625)矩阵的第一个部分是第一行:m[[1]]{1,4,9,16,25}设置一个由六个整数组成的、具有某些重复值的列表(存为v):用Sort 将列表v 中的元素排序:Sort[v]{1,2,3,3,4,5}使用Union 对v 排序,并去除所有重复值:Union[v]{1,2,3,4,5}应注意除非您重新定义v,否则它仍保留原值:v{3,1,3,2,5,4}对v 的元素进行反向排列:Reverse[v]{5,4,3,2,1}将v 的元素向左轮换两位:RotateLeft[v,2]{3,4,5,1,2}将v 的元素向右轮换两位:RotateRight[v,2]{4,5,1,2,3}用x 对v 进行左填充,得到一个长度为10的列表:PadLeft[v,10,x]{x,x,x,x,x,1,2,3,4,5}将列表v 拆分成长度为2的子列表:Partition[v,2]{{1,2},{3,4}}将列表v 拆分成偏移为1、长度为2的子列表:Partition[v,2,1]{{1,2},{2,3},{3,4},{4,5}}将列表中的相同元素进行组合:Split[{1,4,1,1,1,2,2,3,3}]{1},{4},{1,1,1},{2,2},{3,3}Flatten 删除嵌套列表中的内部大括号:Flatten[{{a,b},{c,{d},e},{f,{g,ℎ}}}]{a,b,c,d,e,f,g,ℎ}将一组列表的元素连接:Join[{a,b},{c,d,e},{f,g,ℎ}]{a,b,c,d,e,f,g,ℎ}设置一个列表,由0到10之间的5个随机整数组成(存储为v):v=RandomInteger[10,{5}]{8,5,2,5,9}用Max 求v 的最大元素:Max[v]9设置一个4*3矩阵,由0到10之间的随机整数组成:m=RandomInteger[10,{4,3}]{{1,5,6},{1,3,10},{3,8,4},{6,3,9}}使用Map 将Max 应用于m 顶层的各个元素:Map[Max,m,2]{6,10,8,9}您可以将两个等长列表的元素对应相加:{a,b}+{x,y}{a+x,b+y}给列表的各个元素加上标量c:c+{a,b}{a+c,b+c}将列表中的每个元素乘以标量k:k{a,b}{ak,bk}设置一个由5个整数组成的列表:v=Range[5]{1,2,3,4,5}将元素x 追加到列表v 的开始:Prepend[v,x]{x,1,2,3,4,5}将x 追加到v 的尾部:Append[v,x]{1,2,3,4,5,x}删除位于列表v 第三位的元素:Delete[v,3]{1,2,4,5}将列表v 第三位的元素用新元素x 替换:ReplacePart[v,3→x]{1,2,x,4,5}在v 的各项之间交错插入x:Riffle[v,x]{1,x,2,x,3,x,4,x,5}创建一个列表的列表以供使用:alist={{a1,a2,a3,a4},{b1,b2,b3,b4},{c1,c2,c3,c4},{d1,d2,d3,d4}}{{a1,a2,a3,a4},{b1,b2,b3,b4},{c1,c2,c3,c4},{d1,d2,d3,d4}}在Mathematica 中,矩阵用嵌套列表表示. 每一行对应于嵌套列表中的一个子列表:MatrixForm[alist](a1a2a3a4 b1b2b3b4 c1c2c3c4d1d2d3d4)使用Part 函数的简写形式[[]],得到第二行:alist[[2]]{b1,b2,b3,b4}从第二行中得到第三个元素:alist[[2,3]]b3得到各行的第三个元素:alist[[All,3]]{a3,b3,c3,d3}使用Flatten 解除嵌套:Flatten[alist]{a1,a2,a3,a4,b1,b2,b3,b4,c1,c2,c3,c4,d1,d2,d3,d4}将展平后的数据显示为一列:MatrixForm[Flatten [alist ]]( a1a2a3a4b1b2b3b4c1c2c3c4d1d2d3d4)添加 {},将展平后的数据显示为一行:MatrixForm [{Flatten [alist ]}](a1a2a3a4b1b2b3b4c1c2c3c4d1d2d3d4)您可在嵌套列表的独立子列表上进行运算,也可以将嵌套列表作为一个整体进行运算. 设置一个数据集:data =Table [i +j,{i,1,5},{j,1,4}]{{2,3,4,5},{3,4,5,6},{4,5,6,7},{5,6,7,8},{6,7,8,9}}MatrixForm [data ]( 23453456456756786789)大多数函数在嵌套列表内的每个子列表上映射.创建数据集各行的图形:ListLinePlot [data,AxesOrigin →{0,0}]大多数描述统计函数根据列运算.求各列的均值:Mean[data]{4,5,6,7}将列表展平,得到所有数的均值:Mean[Flatten [data ]] 112创建一个双嵌套列表:dat =Table [i +j +k,{i,1,4},{j,1,4},{k,1,4}];MatrixForm[dat]Mean 现在列出的是每个嵌套子列表的均值:MatrixForm[Mean[dat]](9211213215211 213215217213 215217219215 2172192212)使用Flatten 得到整个数据集的均值:Mean[Flatten[dat]]152首先设置一个由1至5的整数组成的列表:mylist=Range[5]{1,2,3,4,5}您可以使用Map 将函数映射到列表的每个元素;下面的例子使用的是一个未定义的函数f:Map[f,mylist]{f[1],f[2],f[3],f[4],f[5]}可以使用/@ 作为Map 的简写形式(这个命令与上例中的相同):f@mylist{f[1],f[2],f[3],f[4],f[5]}大多数数学函数具有Listable 属性,表示它们将自动映射于列表:Attributes[Sin]{Listable,NumericFunction,Protected}Sin[mylist]{Sin[1],Sin[2],Sin[3],Sin[4],Sin[5]}如果函数非Listable,您可以使用Map. 设置由5个2*2矩阵组成的列表:matrices= RandomInteger[1,{5,2,2}]{{{0,0},{0,1}},{{1,1},{1,1}},{{0,1},{1,0}},{{1,0},{0,0}},{{1,1},{0,1}}}使用Map 将MatrixForm 映射于列表,以数学符号形式查看每一个矩阵:MatrixForm@matrices现在用 Map 计算列表中每个矩阵的特征值:Eigenvalues/@matrices{{1,0},{2,0},{−1,1},{1,0},{1,1}}Map 不仅可以操作列表. 它也可以用于任何表达式:Map [f,a +b +c +d ]f [a ]+f [b ]+f [c ]+f [d ]Apply 是另一个函数编程操作. 它用于替换一个表达式的头:您可以通过两个未定义的函数 f 和 g 来看这是怎样作用的:Apply[f,g [a,b,c,d ]]f [a,b,c,d ]Apply 用 @@ 作为简写形式(这个命令与上例中的相同):f@@g [a,b,c,d ]f [a,b,c,d ]在 Mathematica 中公用表达式以 StandardForm 形式显示,而它们的底层 FullForm 说明可以如何使用 Apply :{Plus [a,b,c ],Times [a,b,c ],List [a,b,c ]}{a +b +c,abc,{a,b,c }}例如,这里将加和变成乘积:Apply [Times,a +b +c ]abc当您想要将列表中的元素转换为函数的参数时,Apply 很有用.创建一个由5个有序对 {a,b} 组成的列表:pairs =RandomInteger [{1,10},{5,2}]{{8,7},{5,9},{6,8},{7,1},{6,7}}Mod 求有序对中第一个数除以第二个数得到的余数:Mod [10,4]2将 Mod 应用于全部有序对,需要在列表的第一层作用(由 {1} 指定):Apply [Mod,pairs,{1}]{1,5,6,0,6}可以用 @@@ 作为简写符号应用于第一层:Mod@@@pairs{1,5,6,0,6}这是完成同样任务的另一种方法,方法是利用带有 Function 的纯函数:Map[Function[w,Apply [Mod,w ]],pairs]{1,5,6,0,6}这里使用 Function 的简写形式:Map [Apply [Mod,#]&,pairs ]{1,5,6,0,6}使用 Table 制作一个函数值表格:Table [i 2,{i,10}]{1,4,9,16,25,36,49,64,81,100}使用两个变量的 Table 制作一个二维表格(存储为 m ):m =Table [i 2−j 3,{i,5},{j,6}] {{0,−7,−26,−63,−124,−215},{3,−4,−23,−60,−121,−212},{8,1,−18,−55,−116,−207},{15,8,−11,−48,−109,−200},{24,17,−2,−39,−100,−191}} 使用 Grid 将值放在一个网格中:Grid [m ]0−7−26−63−124−2153−4−23−60−121−21281−18−55−116−207158−11−48−109−2002417−2−39−100−191使用一个选项加上边框:Grid [m,Frame →All ]0−7−26−63−124−2153−4−23−60−121−21281−18−55−116−207158−11−48−109−2002417−2−39−100−191Mathematica 中的表格可以包含任意元素. 与Plot 合用,制作一个Table,并用ImageSize 控制输出的大小:Table[Plot[Sin[nx],{x,0,2Pi},ImageSize→{150,150}],{n,1,6}]也可以用表格迭代量(下例中为q)的任意值列表创建一个Table:Table[Factor[q5−1],{q,{x,y,z}}]{(−1+x)(1+x+x2+x3+x4),(−1+y)(1+y+y2+y3+y4),(−1+z)(1+z+z2+z3 +z4)}规则的缩写形式使用一个右箭头,它可以通过输入-> 得到(在- 和> 之间无空格). 在进一步输入时,Mathematica 前端自动将-> 转化为->. 任何一个符号都是Rule 的缩写形式.创建下述变换规则,它可以被认为是"x 取3":x→3x→3通过观察x->3 的输出,您可以看到该规则并不做任何事情:输出仅仅是规则本身. 这是因为当规则单独存在时,它们是没有任何作用的. 您必须将规则与表达式合用才会有所用处. 规则可以通过使用/. 应用于表达式(ReplaceAll 的缩写形式). 一般的语法为expr/.rules. 用/. 将规则用于表达式:2x+1/.x→37要将多个规则用于一个表达式,要把它们放到一个列表中{}:2x+y/.{x→3,y→4}10如果对同一变量给出两个规则,Mathematica 将仅用第一个规则:2x+y.{x→3,x→4}6+y可以将变量用任何表达式代替,而不只是单独的值.用3y 替换x:2x+y/.x→3y7y可以使用一个规则代替表达式的一大部分:用3 替换x:1+f[x]+f[y]/.x→31+f[3]+f[y]→p对f[x] 使用一个规则. 注意该规则与f[x] 完全匹配,并不影响f[y]:1+f[x]+f[y].f[x]1+p+f[y]要代替函数f,而不论其自变量如何,您必须在规则中使用一种模式.规则f[x_]->x^2 可以被读作"f[anything] 取anything^2":1+f[x]+f[y]/.f[x_]→x^21+x2+y2使用-> 设置的规则是即时规则. 也就是说,右端与规则同时计算:x→RandomReal[]x→0.1078550147458579您有时可能要使用延时规则,这种规则在用于表达式之前保持不被计算. 延时规则通过RuleDelayed 创建.延时规则的缩写形式是:>(: 和> 之间无空格). Mathematica 前端会自动将:> 转换成:>. 任何一个都代表RuleDelayed 的缩写形式:x⧴RandomReal[]x⧴RandomReal[]考虑这样一个问题:您希望使用一个规则来生成3个在0和1之间的随机实数. 使用即时规则生成的是3个相同的数:{x,x,x}/.x→RandomReal[]{0.4748575639269861,0.4748575639269861,0.4748575639269861}显式使用= 的赋值具有全局效应,而规则仅对使用它的表达式产生影响.用= 将x 赋为3,然后计算x 来查看它的值:x=3;x3使用规则将一个值赋给y:y→3;计算y,可以看到赋给它的值并没有保存:yy规则必须用于表达式才有作用. 然而,您可以将一个规则赋给一个符号,然后像使用规则一样使用这个符号.使用= 将规则p->2 赋给n,然后将n 应用于一个表达式:n=p→22p/.n4由于p->2 现在作为符号n 被全局保存,您可以继续在p->2 的地方使用n.类似地,您可以将一个表达式赋给一个符号,然后对这个符号应用规则:t=1+y2+y3+3yt/.y→219当您将表达式用于多个计算时,这样做尤其方便.解这个简单的方程x+3=5,得到x:s=Solve[x+3==5,x]{{x→2}}该方程的解包含在一个嵌套列表(即一个列表的列表)中. Mathematica 中的列表用{} 表示. 列表中的各项被称作元素,并且可以根据它们的位置来引用.要使用该解,必须首先将它从嵌套列表中取出. 方法是使用[[ ]] (Part 的简写形式),并指定该解在嵌套列表中的位置. 该例中,解是嵌套列表中的第一个、也是唯一一个元素:s[[1]]s[[1]]现在您可以使用解,用/.(ReplaceAll 的简写形式)将解代入表达式x+4:x+4/.s[[1]]6返回一个二次方程的两个解. 有两个子列表,每个解一个:t=Solve[x2==9,x]{{x→−3},{x→3}}这里使用第二个解:x+4/.t[[2]]7求解线性方程组时,解集在一个子列表中返回.设置简单线性方程组的列表,用于求解:eqns={x+3==4,y−5==2,3z==4}{3+x==4,−5+y==2,3z==4}解方程组. 包含唯一解集的一个嵌套列表被返回:u=Solve[eqns,{x,y,z}]{{x→1,y→7,z→4 3 }}含有解集的内列表是嵌套列表中的第一个(也是唯一一个)元素. 因此,将[[1]] 用于嵌套列表将返回解的列表:u[[1]]{x→1,y→7,z→4 3 }这里使用该解集:x+y+z/.u[[1]]283拓展语法,将解在内列表中的位置加上,可以得到解集的一部分.得到第一个变量的解:u[[1,1]]x→1将它代入:x+y+z/.u[[1,1]]1+y+z类似地,代入第二个和第三个变量:x+y+z/.{u[[1,2]],u[[1,3]]}253+x这些方程含有两个解集:v=Solve[{x^2+y^2+z^2==9,y==x,y==z},{x,y,z}]{{x→−√3,z→−√3,y→−√3},{x→√3,z→√3,y→√3}}将两个解集都代入:x+y+z/.v{−3√3,3√3}这里说明的是如何验证一个方程的解(集):首先,求解一个含参数的二次方程:eqn=x^2+2ax+1==0;sol=Solve[eqn,x]{{x→−a−√−1+a2},{x→−a+√−1+a2}}通过代入法验证结果:sub=eqn/.sol{1+2a(−a−√−1+a2)+(−a−√−1+a2)2==0,1+2a(−a+√−1+a2)+(−a+√−1+a2)2==0}注意的是,代入后的结果是方程的形式,而不是True 或False.用Simplify 确定代入结果是否满足方程. 每个代入的运行结果都是True,表明解使方程成立:Simplify[sub]{True,True}这里说明的是,如何通过代入对含参数a 的函数的解进行绘图:Plot[x/.sol,{a,−5,5}]类似地,只绘出sol 中第一个解的图形:Plot[x/.sol[[1]],{a,−5,5}]尽管/.(ReplaceAll 的简写形式)只能单次地将规则用于一个表达式,您将发现重复地将规则应用于表达式,直到它不再发生任何改变为止,非常有用. 这可以通过使用//.(ReplaceRepeated 的简写形式)实现.使用/. 将一个规则或规则列表单次应用于一个表达式的各个部分:a+x^2+y^6/.{x→2+a,a→1}1+(2+a)2+y6用//. 重复应用规则,直到表达式不再变化为止:a+x^2+y^6//.{x→2+a,a→1}10+y6相似地:log[abcd]/.log[x_y_]→log[x]+log[y]log[a]+log[bcd]log[abcd]//.log[x_y_]→log[x]+log[y]log[a]+log[b]+log[c]+log[d]将//. 用于一个循环的规则集合时,应当慎用. 用MaxIterations 选项设置//. 的最大循环次数:ReplaceRepeated[x,x→x+1,MaxIterations→1000]ReplaceRepeated::rrlim: Exiting after _x_ scanned _1000_ times.1000+x可用 ReplaceList 通过应用一个规则或规则列表对整个表达式进行各种可能方式的变换. 使用 Column 以易于查看的方式显示结果:ReplaceList[log[abc],log[x_y_]→log[x]+ log[y]]//Columnlog[a]+log[bc]log[b]+log[ac]log[ab]+log[c]log[ab]+log[c]log[b]+log[ac]log[a]+log[bc]圆括号( )、大括号{ }以及方括号[ ] 在 Mathematica 中各代表不同的意义. 前两个有时也分别称作圆括弧和花括号.圆括号 ( ) 在 Mathematica 中用作对表达式编组和确定运算的优先次序:1+2/353(1+2)/31Mathematica 中的列表用大括号{ } 表示,它汇集了被称作元素的各项.创建一个列表,由前五个正整数组成:{1,2,3,4,5}{1,2,3,4,5}Mathematica 中的任何事物都可在列表中使用,包括数字、变量、排版数学表达式以及字符串等:{1,b,2,3,3x==12,√9+y,"hello"}{1,b,2,3,3x==12,√9+y,"hello"}列表可包含其它列表,从而得到嵌套列表:{1,1,{3,4,5},{3,2}}{1,1,{3,4,5},{3,2}}Mathematica 中的任何事物都可在列表中使用,包括数字、变量、排版数学表达式以及字符串等:{1,b,2,3,3x==12,√9+y,"hello"}{1,b,2,3,3x==12,√9+y,hello}列表可包含其它列表,从而得到嵌套列表:{1,1,{3,4,5},{3,2}}{1,1,{3,4,5},{3,2}}方括号在Mathematica 中用于括入函数参数.此处,用方括号将函数Range、Sin 以及N 的参数分别括入:Range[10]{1,2,3,4,5,6,7,8,9,10}Sin[2]Sin[2]N[Sin[2]]0.9092974268256817Mathematica 将双方括号[[ ]] 用作函数Part 的简写形式,该函数用于得到列表的一部分:v=Range[10]^2{1,4,9,16,25,36,49,64,81,100}v[[3]]9不同的括号架构可以一起使用.绘出一个函数的图形,在列表中指定绘图范围:Plot[Sin[x],{x,1,10}]函数与列表并用的能力无缝地集成在Mathematica 中. 将两个函数的图形绘制在一起\[LongDash]\[LongDash]这一对函数在一个列表中列出:Plot[{Sin[x],Cos[x]},{x,1,10}]所有的括号字符必须平衡(即成对出现),以便Mathematica 运行一个表达式. 如果括号不平衡,Mathematica 前端将把括号变成紫色:(2+π如对该表达式进行运算将生成错误:(2+πMathematica 前端包含一个有效应对这种情况的菜单项. 将光标放在不平衡的表达式中,进入编辑\[FilledRightTriangle] 扩展选择. 最相邻的配对括号的内容现在得以选择. 这也可以通过双击不平衡的表达式实现:重复使用编辑\[FilledRightTriangle] 扩展选择或重复点击进一步将选择扩展到下一个最相邻的配对括号. 您可以迅速注意到哪个括号是不平衡的:您也可以使用编辑\[FilledRightTriangle] 检查括号平衡来选择最相邻的一对平衡括号:使用编辑\[FilledRightTriangle] 检查括号平衡时,光标的位置很重要. 当光标位于一个未平衡的括号之前时,它是不会工作的,因为没有平衡的括号集合可供选择:三击一个函数头部会将选择扩展从而确定该函数的范围. 这也可以通过将光标置于函数头部的某处,按住Ctrl+. 两次完成:类似地,三击任何分隔符,包括引号在内,将选择它的范围:Mathematica 提供了多种便捷方法,用于输入函数.例如,将Length 与包围一个列表的方括号合用,可得到该列表的长度:Length[{1,2,4,6,5,8}]6在函数与列表之间使用@ 符号可以完成同样的任务. 使用@,您不必移到表达式的末端来匹配方括号:Length@{1,2,4,6,5,8}6还可以用后缀符号//:{1,2,4,6,5,8}//Length6这些符号可扩展至任何函数及任何类型的参数:f@{1,2,4,6,5,8}f[{1,2,4,6,5,8}]1//AtomQTruex+1//gg[1+x]对于含两个参数的函数,您可以使用中缀符号:f[a,b]纯函数在Mathematica 中使用得非常频繁. 它们的存在令您无需为一个函数定义明确的名称就可使用它. 您可以使用Function 的简写符号给出一个纯函数.使用Function 给出一个纯函数,对输入进行立方运算:Function[x,x^3][3]27符号# 和& 可以组合使用完成同一任务. 符号# 用作变量的占位符,而符号& 放在函数的代入值之前:(#^3)&[3]27Map 和Apply 对于函数式编程非常重要. 使用这些函数的简写符号会带来很大方便.使用Map 将一个函数映射到一个列表中的各元素:Map[f,{1,2,4,6,5,8}]{f[1],f[2],f[4],f[6],f[5],f[8]}/@ 可实现同一目的:f/@{1,2,4,6,5,8}{f[1],f[2],f[4],f[6],f[5],f[8]}Apply 也有一个简写符号(@@):Apply[f,{1,2,4,6,5,8}]f[1,2,4,6,5,8]f@@{1,2,4,6,5,8}f[1,2,4,6,5,8]Mathematica 中的简写符号可以组合使用,生成高效代码.使用Map 与Function 可将列表中的每个元素进行幂乘,并给结果加上一个符号:Map[Function[x,x^3+a],{1,2,4,6,5,8}]{1+a,8+a,64+a,216+a,125+a,512+a}使用Function 的简写符号执行同一运算:Map[#^3+a&,{1,2,4,6,5,8}]{1+a,8+a,64+a,216+a,125+a,512+a}对此扩展,将Map 的简写符号也包括进来:(#^3+a)&/@{1,2,4,6,5,8}{1+a,8+a,64+a,216+a,125+a,512+a}您往往需要在一个新的计算中使用前面的输出结果. 这可以用Out 的简写符号% 实现. 设置一个计算:{RandomReal[],RandomReal[],RandomReal[]}{0.19069011437216643,0.7850190354468811,0.9994398024995657}使用Out 的简写符号% 指定最新的输出:%{0.19069011437216643,0.7850190354468811,0.9994398024995657}联合使用% 与Part 的简写符号[[...]],取列表中的第一个元素:%[[1]]0.19069011437216643可以使用%%...% 表示先前的输出. 得到两个计算生成之前的输出:%%{0.19069011437216643,0.7850190354468811,0.9994398024995657}如果想要得到的输出并非来自最近的计算,则需要使用多个% 符号,这可能会比较繁琐. 这种情况下可以将特定的输出单元号与Out 合用. 如果您运行该单元,您将从当前的笔记本进程得到Out[17],并不一定与下面的所示相同:Out[17]{0.19069011437216643,0.7850190354468811,0.9994398024995657}这是另一个简写符号:%17{0.19069011437216643,0.7850190354468811,0.9994398024995657}通过标签或简写符号表示先前的输出虽然方便,但可能会很快失控,因为当前的运算始终受约于较早的输出. 因此,您必须确保您要使用的输出可用于您当前的计算. 应谨慎使用此表通过字符串操作函数的简写符号,可以简化字符串的使用.连接字符串是一种常用的字符串运算. 用StringJoin 实现:StringJoin["This is","Mathematica."]"This is Mathematica."使用StringJoin 的简写符号<>,可将同一运算写作:"This is"<>"Matℎematica.""This is Mathematica."StringExpression 是用于表示字符串的一个非常重要的函数. 它被很多字符串操作函数使用,诸如StringReplace、StringCases、StringSplit 和StringMatchQ 等.使用StringExpression 创建一个字符串表达式对象:StringExpression["ab",_]"ab"~~_或直接使用StringExpression 的简写符号~~:"ab"~~_"ab"~~_尽管Mathematica 内置函数的缺省行为适用于大多数场合,您可以通过函数选项来对其行为进行准确控制.选项使用规则输入. 一个规则的缩写形式使用的是一个右箭头,这可以通过键入->(- 与>之间无空格)得到. 在进一步键入时,Mathematica 前端自动将-> 转换为->. 每个符号都是Rule 的一种缩写形式.选项使用规则输入. 一个规则的缩写形式使用的是一个右箭头,这可以通过键入->(- 与>之间无空格)得到. 在进一步键入时,Mathematica 前端自动将-> 转换为->. 每个符号都是Rule 的一种缩写形式.在输入函数选项时,选项在规则的左边,其设置在右边. 选项永远位于函数要求的所有参数之后.将Plot 与Filling 联合使用创建一个填充图形:Plot[Sin[x],{x,0,2π},Filling→Axis]如果在PC 上通过键盘插入函数模板,要先键入函数,然后键入Ctrl+Shift+K. 如果使用的是Macintosh,则键入Cmd+Shift+K. 它们是菜单项编辑\[FilledRightTriangle] 制作模板的快捷键.此处,用键盘插入Plot 的模板. 请注意Plot 的第一个参数的占位符被自动选定:用Tab 移动至其它占位符,或单击一个特定的占位符以将其选中.插入函数模板还用于当键入了函数名的一部分,然后从使用快捷键弹出的菜单中选择想要的函数时.要在键入位置插入一个函数模板,双击想要输入的函数(Mac OS X 上要单击),或用箭头键在列表上定位,当它突出显示时,按Enter 键:还可以通过Mathematica 的许多内置面板插入函数模板. 您可以通过面板菜单来访问这些面板.从面板菜单打开数学助手面板,打开该面板的基本指令部分,然后单击2D 选项卡. 单击其中一个函数来输入它的模板:这里用数学助手面板输入Plot 的模板:Plot[function,{var,min,max}]当 Mathematica 把表达式 x+x 变换成 2x 时,它是把 x 作为纯符号或形式的式子进行处理. 在这种情形下,x 是一个可以代表任何表达式的符号.然而,常常需要给类似 x 的符号赋一个确定的"值". 这个值有时是一个数;更多的是另一个表达式. 要对表达式 1+2x 中的符号 x 赋一个确定的值,用户可以建立一个Mathematica 变换规则,然后把这个规则用于该表达式. 例如,把 x 替换成 3,用户应建立变换规则 x->3. 您必须把 -> 作为一对字符输入,中间没有任何空格. x->3 这条规则的含义是"x 取值为 3".要对一个特定的 Mathematica 表达式进行变换,使用 expr/.rule. "替换符号" /. 是由两个字符组成,中间没有空格.用值替换表达式中的符号. expr/.x−>value expr/.{x−>xval,y−>yval}可以把多个替换规则写成列表一起使用. (x+y)(x−y)^2/.{x−>3,y−>1−a}(4−a)(2+a)2替换算符 /. 使用户可以对一个特定表达式进行变换. 然而,有时用户想要定义一个总是被使用的变换规则. 例如,无论 x 何时出现, x 总是被 3 替换.如同在 "定义变量" 讨论的那样,这可以通过 x=3 给 x 赋以值 3 来实现. 一旦用户做了赋值 x=3,无论 x 何时出现, x 总是被 3 替换.用户可以把符号的值定义成任何表达式,而不仅是能定义成数. 应该注意,一旦给出了定义,这个定义将一直被使用,直到用户明确改变或消除该定义. 在使用 Mathematica 时,忘记清除已经赋给符号的值是常见的出错原因.在 Mathematica 中一个符号如 x 可以用作多种不同目的. 事实上,Mathematica 的伸缩性主要来自于能够按意愿混合这些目的. 然而,为了避免出错,用户需要直接使用 x 的某种用途. 最重要的区别在于把 x 作为另一个表达式的名称和只代表本身的符号变量. 传统的程序语言并不支持符号计算. 只允许变量作为已经赋值的对象的名称. 然而,在Mathematica 中,x 能被作为一个纯形式变量进行处理,可以对x使用各种变换规则. 当然如果用户明确给出一个定义,如 x=3,那么 x 将总是被 3 代替,而不再作为形式变量. 应当明白,显示定义如 x=3 有一个全局效应. 而替换如 expr/.x->3 仅对指定的表达式expr 有效. 除非绝对有必要,一般应避免使用显式定义,这样,保持所做的事情是正确的就容易多了.用户可以将替换和赋值混合使用. 运用赋值,可以对想要作替换的表达式或替换规则给出一个名称.使用 Mathematica 进行运算时,通常要进行一系列运算步骤. 如果您愿意,可分行输入每一步骤. 然而,把几个步骤放在同一行往往是方便的. 这只需简单地用分号将各部分分开即可.如果输入以分号结尾(这表明用户可能给出一个运算序列,结尾为空),其效果是:Mathematica 执行该运算,但并不显示输出.产生对象列表在做计算时,将一些对象放在一起作为单个实体处理是很方便的.而列表(Lists)是Mathematica产生对象集合的一种方法.后面将看到列表是 Mathematica 的非常重要和普遍的结构.例如列表{3,5,1}是三个对象的集合,但在许多情况下,可以把它作为单一对象处理.例如,可以一次对整个列表进行运算,或把整个列表赋为某个变量的值.如同把数赋给变量一样也可以把列表赋给某变量.一般地,Mathematica 列表本质上是提供一种把任何类型的表达式收集在一起的方法. Mathematica内部的数学函数大多被设置成可列表的,使得它们能分别作用于列表的每一个元素.然而,并不一定Mathematica 的所有函数都能做到这一点.除非用户专门设置它.用户引入新函数 f 把列表作为单个对象进行处理. 函数作用于表达式的部分项和结构的操作将介绍如何用 Map 和 Thread 使一个函数分别地作用于列表的每个元素.可以使用列表作为值的表. 用户可以生成这些表. 例如,通过对不同参数值的序列计算一个表达式来生成表值表的生成可以使用列表作为值的表.用户可以生成这些表.例如,通过对不同参数值的序列计算一个表达式来生成表.这里给出 i 从1到6的 i^2 的值表.In[1]:= Table[i^2,{i,6}]Out[1]={1,4,9,16,25,36}这里是一个 n 从 0 到 4 的 sin(n/5) 的表.In[2]:= Table[Sin[n/5],{n,0,4}]Out[2]={0,Sin[1/5],Sin[2/5],Sin[3/5],Sin[4/5]}这里给出近似值.In[3]:= N[%]Out[3]={0.,0.198669,0.389418,0.564642,0.717356}也可以生成一个公式列表.In[4]:= Table[x^i+2i,{i,5}]Out[4]={2+x,4+x^2,6+x^3,8+x^4,10+x^5}表Table 使用像函数Sum 和Product 一样的循环表示法. 该表示法在"求和与求积" 中讨论过.In[5]:= Product[x^i+2i,{i,5}]Out[5]=(2+x) (4+x^2) (6+x^3) (8+x^4) (10+x^5)这是一个x 从0 到1,步长为0.25 所产生的表.In[6]:= Table[Sqrt[x],{x,0,1,0.25}]Out[6]={0,0.5,0.707107,0.866025,1.}可以在从Table 中得到的列表上进行其它运算.In[7]:= %^2+3Out[7]={3,3.25,3.5,3.75,4.}TableForm 把列表显示为"表格"的形式. 注意,TableForm 中有两个大写字母.In[8]:= %//TableFormOut[8]//TableForm=(33.253.53.754.)到现在为止所有表的例子都是通过变化单个参数而得到的. 用户也可以使用多个参数产生表. 在"求和与求积" 节讨论使用标准的Mathematica循环表示法确定的多维表.这里生成一个i 从1 到3,j从1到2 的x^ i+y^ j 的表.In[9]:= Table[x^i+y^j,{i,3},{j,2}]Out[9]={{x+y,x+y^2},{x^2+y,x^2+y^2},{x^3+y,x^3+y^2}}这个例子是一个列表的列表. 其中外层列表的元素相应于i的值. 内层列表的元素相应于i值固定的情况下,j的值.有时用户可能想通过计算一个特定表达式多次来生成一个表,其中没有任何变量的增加. 这里生成一个包含符号x 的4个拷贝的列表.In[10]:= Table[x,{4}]Out[10]={x,x,x,x}这里从{1,2,3,4}给出4个伪随机数的表.Table 对列表中的每个元素重复计算RandomSample[{1,2,3,4},2] 4次,得到了不同的伪随机数.In[11]:= Table[RandomSample[{1,2,3,4},2],{4}]Out[11]={{3,2},{4,2},{4,3},{2,1}}这里对列表{1,4,9,16} 中的每个i 值计算Sqrt[i].In[12]:= Table[Sqrt[i],{i,{1,4,9,16}}]Out[12]={1,2,3,4}这里产生一个3*2的表格.In[13]:= Table[i+2j,{i,3},{j,2}]Out[13]={{3,5},{4,6},{5,7}}在这个表格中,行的长度取决于较慢变化的迭代变量i.In[14]:= Table[i+2j,{i,3},{j,i}]Out[14]={{3},{4,6},{5,7,9}}可以使用 Table 生成具有任意维度的数组.这里生成一个三维2*2*2 数组. 这是一个列表的列表的列表.In[15]:= Table[i j^2 k^3,{i,2},{j,2},{k,2}]Out[15]={{{1,8},{4,32}},{{2,16},{8,64}}}Table[f,{Subscript[i,max]}]给出 f 的 Subscript[i,max] 个值的列表Table[f,{i,Subscript[i,max]}]给出 f 的 i 从 1 到 Subscript[i,max] 的列表Table[f,{i,Subscript[i,min],Subscript[i,max]}]给出 i 从 Subscript[i,min] 到Subscript[i,max] 的列表Table[f,{i,Subscript[i,min],Subscript[i,max],di}]使用 di 为步长Table[f,{i,Subscript[i,min],Subscript[i,max]},{j,Subscript[j,min],Subscript[j,max]},...]生成多维表Table[f,{i,{Subscript[i,1],Subscript[i,2],…}]给出当 i 连续取值 Subscript[i,1],Subscript[i,2], ...时 f 的值的列表TableForm[list]把列表显示为表格形式生成表的函数.可以使用"处理列表元素" 节讨论的方法提取表的元素.这里生成一个2*2的表,起名为sq.In[16]:= sq=Table[j^2,{j,7}]Out[16]={1,4,9,16,25,36,49}这里给出表格的第三部分.In[17]:= sq[[3]]Out[17]= 9这里给出第三到第五部分的列表.In[18]:= sq[[3;;5]]Out[18]={9,16,25}这里生成一个2*2 的表,起名为m.In[19]:= m=Table[i−j,{i,2},{j,2}]Out[19]={{0,−1},{1,0}}这里从列表的列表中提取第一个子列表来产生一个表.In[20]:= m[[1]]Out[20]={0,−1}这里提取该子列表的第二个元素.In[21]:= %[[2]]Out[21]=−1此处把前面两个运算合在一起进行.In[22]:= m[[1,2]]Out[22]=−1这里把m 显示成"表格"形式.In[23]:= TableForm[m]0 −1Out[23]//TableForm=()1 0t[[i]]或[ThinSpace] Part[t,i]给出 t 的 i 个子列表(也作为 t[[i]] 输入)t[[i;;j]]或[ThinSpace] Part[t,i;;j]给出从 i 到 j 的部分列表t[[{Subscript[i,1],Subscript[i,2],…}]]或[ThinSpace] Part[t,{Subscript[i,1],Subscript[i,2],…}]给出 t 的 Subscript[i,1],Subscript[i,2],...部分构成的列表t[[i,j,...]]或 Part[t,i,j,...]给出 t 的相应于 t[[i]][[j]]...的部分元素列表。
9、用Mathematic 计算行列式、矩阵 在Mathematica 系统中,有固定的输入法和函数对矩阵的有关问题进行计算。
所以必须要掌握这些输入法与函数。
如:1、求行列式在Mathematica 系统中,用函数Det[b]求行列式的值,其中b 是所给行列式的元素所构成的二维数表,b 的一维子表顺次由行列式的逐行(或列)上的元素构成.例1计算行列式.1245101124126853D -= 解:}};1,2,4,5{},1,0,1,1{},2,4,1,2{},6,8,5,3{{b ]1[In -==:]b [Det ]2[In =:122]2[Out -=2、矩阵的加法在Mathematica 系统中,矩阵的加减法实际上就是二维数表间的相应加减法.在二维数表的表达式后输入//MatrixForm 可输出矩阵形式的表达式.例2已知矩阵,612342017915,864202109751⎪⎪⎪⎭⎫ ⎝⎛--=⎪⎪⎪⎭⎫ ⎝⎛-=B A 求.B A +解:}};8,6,4,2{},0,2,1,0{},1,5,7,9{{a ]1[In -==:}};6,1,2,3{},4,2,0,1{},7,9,1,5{{b ]2[In --==:b a ]3[In +=:b a ]4[In +=://MatrixForm}{5,6,5,14},{1,-1,0,4}6},{{6,6,16,1]3[Out ==MatrixForm //]4[Out⎪⎪⎪⎭⎫ ⎝⎛-1456540111616663、矩阵的乘法在Mathematica 系统中,矩阵用二维数表表示,矩阵a 与b 的乘法运算用ba ⋅表示.其中“∙”表示矩阵乘法运算符号.例3设矩阵,01202131,431103⎪⎪⎭⎫ ⎝⎛-=⎪⎪⎪⎭⎫ ⎝⎛-=B A 求.AB 解:]b ,a [Clear ]1[In =:;:}}1,4{},0,3{},13,{{a ]2[In -== ;: 2,1,0}}0,{1,3,1,2}{{b ]3[In -== b a ]4[In ⋅=:;,,,,,,5,5,2}}{1,0},36{06},211{{3]3[Out --= 4、矩阵的转置在Mathematica 系统中,求矩阵A 的转置矩阵用函数Transpose[A].例4若矩阵,452331021⎪⎪⎭⎫ ⎝⎛=A 求.AA ,A T T 解:;:}},2,453,3,{},1,2,0,1{{a ]1[In == MatrixForm//a]Transpose[]2[In =: a];T ranspose[b ]3[In ==:orm b//MatrixF a ]4[In ⋅=:⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=452331021MatrixForm //]2[Out ⎪⎪⎭⎫ ⎝⎛=204754546MatrixForm //]4[Out 5、矩阵的逆矩阵在Mathematica 系统中,求矩阵A 的逆矩阵用函数Inverse[A].例5求矩阵⎪⎪⎪⎭⎫ ⎝⎛=343122321A 的逆矩阵。
在Mathematica 中,行向量、列向量和矩阵的表示和操作略有不同。
1.行向量:
o在Mathematica 中,行向量使用圆括号{}包围元素,元素之间用空格或逗号分隔。
o例如,一个包含三个元素的行向量可以表示为{a, b, c}。
2.列向量:
o在Mathematica 中,列向量实际上是行的转置。
也就是说,如果A是一个m x n 的矩阵,那么A[[1]]将返回一个n x 1 的列向量。
o例如,对于矩阵{{a, b}, {c, d}},其第一行(即列向量)为{a, b}。
3.矩阵:
o在Mathematica 中,矩阵使用方括号[]包围元素,行之间用分号;分隔。
o例如,一个2 x 2 的矩阵可以表示为{{a, b}, {c, d}}。
在操作上,你可以使用Mathematica 的内置函数来操作这些向量和矩阵。
例如,你可以使用Transpose函数来转置矩阵或向量。
对于向量,转置操作与列向量的表示是相同的。
希望这些信息能对你有所帮助!如果你有任何其他问题或需要进一步的澄清,请随时提问。
Mathematica 教程 2第二章列表在上节课中我们已经用过Mathematica中的列表。
在这一章中我们将学习列表的许多不同方式。
用户将发现列表是Mathematica 中最灵活和最强有力的对象之一,将看到Mathematica 列表是数学和计算机科学中一些标准概念的一般化。
Mathematica列表通常是提供一种将一些相互关联的元素放在一起的方法,使他们成为一个整体。
这样一来,既可以对整体操作,也可以对整体中的一个元素进行单独的操作。
在Mathematica 中这样的数据结构被称为表(List)。
在Mathematica中表主要有三个用法,在后续的课程中会分别学习。
注:在Mathematica中,表是用{}来表示,表中元素用“,”隔开。
多维列表中每一维用{}分隔。
如表{a,b,c}可以表示一个一维列表, 表{{a,b},{c,d}}可以表示二维列表。
2.1 表的生成在表中的元素较少时,可以采取直接列表的方式列出表中的元素,如{1,2,3}如果列表元素较多时,可以通过建表函数进行建表,见下表:生成列表的函数*:f表示一个表达式或者函数如:上面的例子都是通过变化单个参数而得到的,用户也可以使用多个参数产生列表。
这些例子表示的都是一个列表的列表,其中外层列表的元素对应于i的值,内层列表的元素相应于j的值。
2.2获取列表的部分元素对于列表,我们可以象普通数值给予变量名。
当ABC表示一个列表时,我们可以对列表也可以对列表中的元素进行操作。
在Mathematica 中提取部分元素的方法如下。
提取列表中的部分元素的方法产生三维列表t提取t的i=2的部分提取t的i=2,i=1部分提取t的i=2,j=1的部分提取t的i=2,j=1,k=1的部分注:用户可以将Mathematica列表看作“数组”,那么列表的列表可以看作二维数组,当把列表显示为表格形式时,每个元素的两个下标如x和y坐标一样。
2.3 检测和搜索列表元素上一节讨论的是根据元素的位置或标号提取列表的元素。
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函数大全--运算符及特殊符号一、运算符及特殊符号Line1; 执行Line,不显示结果Line1,line2 顺次执行Line1,2,并显示结果?name 关于系统变量name的信息??name 关于系统变量name的全部信息!command 执行Dos命令n! N的阶乘!!filename 显示文件内容<<filename 读入文件并执行Expr>> filename 打开文件写Expr>>>filename 打开文件从文件末写() 结合率[] 函数{} 一个表<*Math Fun*> 在c语言中使用math的函数(*Note*) 程序的注释#n 第n个参数## 所有参数rule& 把rule作用于后面的式子% 前一次的输出%% 倒数第二次的输出%n 第n个输出var::note 变量var的注释"Astring " 字符串Context ` 上下文a+b 加a-b 减a*b或a b 乘a/b 除a^b 乘方base^^num 以base为进位的数lhs&&rhs 且lhs||rhs 或!lha 非++,-- 自加1,自减1+=,-=,*=,/= 同C语言>,<,>=,<=,==,!= 逻辑判断(同c)lhs=rhs 立即赋值lhs:=rhs 建立动态赋值lhs:>rhs 建立替换规则lhs->rhs 建立替换规则expr//funname 相当于filename[expr]expr/.rule 将规则rule应用于exprexpr//.rule 将规则rule不断应用于expr知道不变为止param_ 名为param的一个任意表达式(形式变量)param__ 名为param的任意多个任意表达式(形式变量)二、系统常数Pi 3.1415....的无限精度数值E 2.17828...的无限精度数值Catalan 0.915966..卡塔兰常数EulerGamma 0.5772....高斯常数GoldenRatio 1.61803...黄金分割数Degree Pi/180角度弧度换算I 复数单位Infinity 无穷大-Infinity 负无穷大ComplexInfinity 复无穷大Indeterminate 不定式三、代数计算Expand[expr] 展开表达式Factor[expr] 展开表达式Simplify[expr] 化简表达式FullSimplify[expr] 将特殊函数等也进行化简PowerExpand[expr] 展开所有的幂次形式ComplexExpand[expr,{x1,x2...}] 按复数实部虚部展开FunctionExpand[expr] 化简expr中的特殊函数Collect[expr, x] 合并同次项Collect[expr, {x1,x2,...}] 合并x1,x2,...的同次项Together[expr] 通分Apart[expr] 部分分式展开Apart[expr, var] 对var的部分分式展开Cancel[expr] 约分ExpandAll[expr] 展开表达式ExpandAll[expr, patt] 展开表达式FactorTerms[poly] 提出共有的数字因子FactorTerms[poly, x] 提出与x无关的数字因子FactorTerms[poly, {x1,x2...}] 提出与xi无关的数字因子Coefficient[expr, form] 多项式expr中form的系数Coefficient[expr, form, n] 多项式expr中form^n的系数Exponent[expr, form] 表达式expr中form的最高指数Numerator[expr] 表达式expr的分子Denominator[expr] 表达式expr的分母ExpandNumerator[expr] 展开expr的分子部分ExpandDenominator[expr] 展开expr的分母部分TrigExpand[expr] 展开表达式中的三角函数TrigFactor[expr] 给出表达式中的三角函数因子TrigFactorList[expr] 给出表达式中的三角函数因子的表TrigReduce[expr] 对表达式中的三角函数化简TrigToExp[expr] 三角到指数的转化ExpToTrig[expr] 指数到三角的转化RootReduce[expr]ToRadicals[expr]Mathematica入门教程Mathematica的基本语法特征如果你是第一次使用Mathematica,那么以下几点请你一定牢牢记住:Mathematica中大写小写是有区别的,如Name、name、NAME等是不同的变量名或函数名。
mathematica计算矩阵使用Mathematica进行矩阵计算Mathematica是一款功能强大的数学软件,可以用于各种数学计算,包括矩阵计算。
本文将介绍如何使用Mathematica进行矩阵计算,并以实例说明其用法和功能。
1. 创建矩阵在Mathematica中,可以使用内置的MatrixForm函数来创建和显示矩阵。
例如,要创建一个3x3的矩阵A,可以使用以下代码:A = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};MatrixForm[A]这将创建一个3x3的矩阵A,并以矩阵形式显示出来。
2. 矩阵运算Mathematica提供了各种矩阵运算函数,如加法、减法、乘法、转置等。
以下是一些常用的矩阵运算示例:- 加法:使用Plus函数进行矩阵加法。
例如,要计算矩阵A和矩阵B的和,可以使用以下代码:A = {{1, 2}, {3, 4}};B = {{5, 6}, {7, 8}};C = A + B;MatrixForm[C]这将计算矩阵A和矩阵B的和,并以矩阵形式显示出来。
- 减法:使用Subtract函数进行矩阵减法。
例如,要计算矩阵A和矩阵B的差,可以使用以下代码:A = {{1, 2}, {3, 4}};B = {{5, 6}, {7, 8}};C = A - B;MatrixForm[C]这将计算矩阵A和矩阵B的差,并以矩阵形式显示出来。
- 乘法:使用Dot函数进行矩阵乘法。
例如,要计算矩阵A和矩阵B的乘积,可以使用以下代码:A = {{1, 2}, {3, 4}};B = {{5, 6}, {7, 8}};C = A.B;MatrixForm[C]这将计算矩阵A和矩阵B的乘积,并以矩阵形式显示出来。
- 转置:使用Transpose函数进行矩阵转置。
例如,要计算矩阵A 的转置矩阵,可以使用以下代码:A = {{1, 2}, {3, 4}};B = Transpose[A];MatrixForm[B]这将计算矩阵A的转置矩阵,并以矩阵形式显示出来。
§13.4向量、行列式、矩阵与线性方程组实验[学习目标]1.会用Mathematica进行向量的计算;2.能用Mathematica进行行列式的计算;3.会利用Mathematica进行矩阵的运算与初等变换;4.能利用Mathematica解线性方程组。
线性代数的数值计算程序并不稀奇,早有大量的算法和软件。
然而这里是进行准确的符号运算,学习了本节以后,就可以摆脱冗繁的矩阵运算了。
本节介绍用Mathematica实现线性代数运算的各种专用函数,它们基本上满足了线性代数计算的需求。
读者将会看到,以下的一些计算功能是十分出色的。
但从我国的教材来看,还有个别计算功能没有涉及,留有继续开发的余地。
一、矩阵的输入与输出在Mathematica中向量和矩阵就是一个表。
{a1,a2,…,a n} 表示一个向量。
{{a11,a12,…,a1n},{a21,a22,…,a2n},…,{a m1,a m2,…,a mn}} 表示一个m行n列的矩阵,其中每一个子表表示矩阵的一行。
1.直接输入矩阵直接输入矩阵的方法有3种,如下所述。
(1)按表的形式输入矩阵既然矩阵和向量都是表,表的一般操作对于矩阵和向量仍然适用。
但是,按表的格式键入矩阵和向量,会让人很不习惯。
因此,Mathematica也提供了矩阵和向量的常规形式的输入、输出方法。
(2)由模板输入矩阵基本输入模板中有输入2阶方阵的模板,单击该模板输入一个空白的2阶方阵。
按“Ctrl +”使矩阵增加一列,按“Ctrl + Enter”使矩阵增加一行。
如果矩阵不大,此法较方便。
(3)由菜单输入矩阵如果输入行、列数较多的矩阵,可以打开主菜单的Input项,其中Create Table/Matrix/Palette 可用于建立一个矩阵,单击该项出现一个的对话框。
选择Make:Matrix,再输入行数和列数,单击OK按钮,于是一个空白矩阵被输入到工作区窗口。
空白矩阵的每个小方块代表一个元素的位置,光标所在的小方块与众不同,可以用Tab 键将光标从一个方块跳到下一个方块,也可以用鼠标选中一个方块。
mathematica 行向量列向量矩阵
摘要:
一、引言
二、mathematica 简介
三、行向量与列向量
四、矩阵的定义及性质
五、mathematica 在矩阵运算中的应用
六、总结
正文:
一、引言
Mathematica 是一款强大的数学软件,广泛应用于科学、工程、数学等领域。
在Mathematica 中,行向量、列向量和矩阵是基本的数学概念,对于理解和使用该软件具有重要的意义。
本文将介绍这些概念及其在Mathematica 中的应用。
二、mathematica 简介
Mathematica 是一款由美国著名数学软件公司Wolfram Research 开发的数学软件,自1988 年问世以来,已经发展成为全球最著名的数学软件之一。
Mathematica 具有强大的计算功能,可以解决各种数学问题,包括代数、几何、微积分、概率统计等各个领域。
三、行向量与列向量
在Mathematica 中,向量是基本的数学对象,可以表示为一个有序的元
素集合。
根据元素的排列方式,向量可以分为行向量和列向量。
行向量是一个一维数组,其中元素的排列方式类似于矩阵的行;列向量是一个一维数组,其中元素的排列方式类似于矩阵的列。
例如,在二维平面中,一个点的坐标可以表示为一个行向量或列向量。
四、矩阵的定义及性质
矩阵是Mathematica 中的重要概念,可以表示为具有特定行和列的一个二维数组。
矩阵具有以下基本性质:
1.矩阵是一个二维数组,由行和列组成;
2.矩阵的行数和列数决定了其维度;
3.矩阵的元素可以是实数、复数或符号;
4.矩阵具有加法、减法、乘法等基本运算。
在Mathematica 中,矩阵的运算非常方便,可以通过内置函数进行计算。
例如,求矩阵的行列式、逆矩阵、秩等操作都可以通过Mathematica 内置的函数轻松实现。
五、mathematica 在矩阵运算中的应用
Mathematica 在矩阵运算中的应用非常广泛,包括线性方程组求解、特征值计算、矩阵分解等。
例如,在求解线性方程组时,可以使用Mathematica 内置的线性方程组求解函数,如`LinearSolve`;在计算特征值时,可以使用`Eigensystem`函数;在矩阵分解时,可以使用`MatrixPower`函数进行幂运算,或者使用`Decompose`函数进行奇异值分解。
六、总结
本文介绍了Mathematica 中的行向量、列向量和矩阵的基本概念,以及
它们在矩阵运算中的应用。