1、(1)简介 数学系给本科生开设一门课: 符号计算系统, 主要简单讲授 mathematica(以下简称math)软件的使用及其编程,赶兴趣的同学可以找本math书以求更深入的了解. 我们平日用到编程语言时, 大家都知道编程中用到的整型, 实型, 甚至双精度数, 都只是一个近似的数, 其精度有限, 有 效数字有限, 在很多时候达不到实际需要的要求. 符号计算与 数值计算的区别就在于符号计算以准确值记录计算的每一步的 结果, 如果需要时, 可以将精确表示按需要计算成任意位数的 小数表示出来(只要机器内存足够大). 最常见的符号计算系统有maple, mathematica, redues等, 这些
2、软件各有侧重, 比如,maple内存管理及速度比math好, 但 是图形方面不如math; redues没找到, 没用过, 未明; 而用得 较多的matlab编程环境特好, 和C语言接口极其简单, 遗憾的是 它不是符号计算, 只是数值计算. 所以, 就实用而全面来说, math是一个很好用的软件. math软件不仅能够进行一般的+-*/及科学函数如Sin, Log 等计算, 而且能进行因式分解, 求导, 积分, 幂级数展开, 求 特征值等符号计算, 并且, math有较强的图元作图, 函数作图, 三维作图及动画功能. (2)mathematica入门 mathematica自发布以来, 目前比
3、较常见的有math 1.2 for DOS, math 2.2 for Windows, math 3.0 for win95, math 3.0 for UNIX. DOS下的math的好处就是系统小, 对机器要求低, 在386机 器4M内存下就能运行得很好(机器再低点也是可以用的, 比如 说286/2M). 在DOS下直接键入math即可进入math系统, 出现的提示符In1:=, 这时就可以进行计算了, 键入math函 数, 回车即可进行运算. 如果输入的Quit, 则退出math. 这里 要注意的是, math区分大小写的, 一般math的函数均以大写字 母开始的. windows下的
4、math对机器要求就要高一些了, math3.0更是 庞大, 安装完毕有100M之多(2.2大约十多兆). 同windows下的 其他软件一样, math可以双击图标运行, 在File菜单下有退出 这一项. windows下的math有其优越性, 就是可以在windows下 随心所欲地拷贝粘贴图形. math3.0更是能输入和显示诸如希腊 字母, 积分符号, 指数等数学符号. DOS的math与windows下的 一个区别是DOS的以回车结束一句输入, 而windows的以 +结束一句输入. DOS下的提示符显示为In数字:=, 而 windows下在结束输入后才显示出In数字:=及Out数字
5、:=字样. (Out为输出提示符) 下面试试几个例子:(In数字:=为提示符, 不用键入) In1:= 2100 计算2的100次方 In2:= s=3,7,9,7,4,3,1,3,8 定义矩阵s In3:= Eigenvaluess 计算s的特征值 In4:= PlotSinx,x,0,Pi 在0,Pi间画Sin In5:= PlotCosx,x,0,Pi Cos In6:= Plot3DSinxSiny,x,0,1,y,0,2 三维作图 以In6为例说明: math的函数都以大写字母开头的单词 为函数名, Plot3D, Plot, Eigenvalues, Sin等, 常数也是如 此,
6、如Pi. 函数名后的参数用括起, 逗号隔开. math的输出可以作为函数的输入对象, 你可以再试一个: In7:=Show%,% 这里一个%代表上一个输出, 两个代表 上两个. 也可以直接用Outn代表第n个输出. 这里需要补充的是 !command 执行DOS命令 ?name 关于name(函数等)的信息(可以使用通配符) ?name 关于name的额外信息 (3)基本计算1. 算术运算符 +加-减*乘/除指数 (乘也可用空格) Nexpr或expr /N 计算expr的数值(6位有效数字) Nexpr, n n表示小数的位数 2. 数学函数 Sqrtx x开方 Expx e的x方 Logx
7、 x的自然对数 Logb,x 以b为底, x的对数 Sinx, Cosx, Tanx, ArcSinx, ArcCosx 三角函数 Absx |x| Roundx 离x最近的整数 Floorx 不超过x的最大整数 Quotientn,m n/m的整数部分 Modn,m n/m的余数 Random 0,1间随机数 Maxx,y,. Minx,y,. 最大数和最小数 3. 常数 Pi Pi=3.141592653589793. E e=2.71828. Degree Pi/180 I i=Sqrt-1 Infinity 无穷大 Catalan Catalan常数.=0.915966 Complex
8、Infinity 复无穷 DirectedInfinity 有向的无穷 EulerGamma 欧拉常数gamma=0.5772216 GoldenRatio 黄金分割(Sqrt5-1)/2 Indeterminate 不定值 4. 逻辑运算符 =, !=, , =, , value 将式中x代换为value expr /. x-xval, y-yval 下面就让我们以几个例子来结束本节:(大家还是注意, DOS下的Math, 只要 输入Innum:=后的指令后按回车, 而windows下则是按+回车.) 大 家看看都有什么输出. In1:= 2.7+5.23 In2:= 1/3+2/7 In3
9、:= 1/3+2/7 /N In4:= NPi,100 曾经有人问我, 你是怎么算出Pi的1000位而 没有错误的, 其实很简单, 大家只要把上式的100改为1000即可. In5:= SinPi/2+Exp2+Round1.2 In6:= 10y In10:= t=1+m2 In11:= t /. m-2 In12:= t /. m-5a In13:= t /. m-Pi /N (4)代数变换 上一节我们已经学习了Math里的基本运算及逻辑运算, 常用数学函数, 几 个常见的常数, 以及变量的使用. 这一节, 我们来学学基本代数变换: Apart, Cancel, Coefficient,
10、Collect, Denominator, Expand, ExpandAll, Exponent, Factor, Numerator, Short, Simplify, Together. Expandexpr 多项式expr按项展开 Factorexpr 因子形式 Simplifyexpr 最简形式 In1:= Expand(1+x)2 In2:= Factor% 我们以前说过的哦, %是上一个输出, %是上上个, %是上上上个, ., %n是第n个输出(即Outn) In3:= Simplify% In4:= Integratex2/(x4-1),x 这是积分运算, 详情后叙 In5:
11、= D%,x 求导 In6:= Simplify% ExpandAllexpr 所有项均展开 Togetherexpr 通分 Apartexpr 分离成具有最简分母的各项 Cancelexpr 约去分子,分母的公因子 Collectexpr 合并 In1:= e=(x-1)2 (2+x)/(1+x)(x-3)2) In2:= Expande In3:= ExpandAlle In4:= Togethere In5:= Apart% In6:= Factor% Coefficientexpr, form 表达式中form项的系数 Exponentexpr, form form的最高幂次 Nume
12、ratorexpr 取分子 Denominatorexpr 取分母 expr /Short 以简短形式输出 In1:= e=Expand(1+3x+4y2)2 In2:= Coefficiente, x In3:= Exponente, y In4:= q=(1+x)/(2(2-y) In5:= Denominator% In6:= Expand(x+5y+10)4 In7:= %/Short 把上式输出, 中间项省去, 以表示 省去的项数. 最后, 我们以例子来看看用符号名做客体的标志的好处 In1:= 12meters In2:= %+5.3meters In3:= %/(25second
13、s) In4:= %/.meters-3.78084feet 一下子就把米制变为英尺了. (5)微积分运算(2-1) 学到上一节, 大家会发现怎么还停留在中学的计算中呢, 这一节, 大家就会看到微分D, Dt; 积分Integrate, NIntegrage; 和与积Sum, Product, NSum, NProduct. 下一节我们 介绍解方程Solve, Eliminate, Reduce, NRoot, FindRoot, FindMinimum; 幂级数Series, Normal; 极限Limit; 特殊函数Fourier, InverseFourier, . 微分 Df, x f
14、对x求导 Df, x_1, x_2, . f对x_1, x_2, .求导 Df, x, n f对x求n次导 Dtf 全微分df Dtf, x 全微商df/dx In1:= Dxn,x In2:= Dfx,x In3:= D2x fx2,x In4:= Dxn, x, 3 In5:= Dx2 y3, x, y In6:= Dtxn In7:= Dtx y, x 积分 Integratef,x f对x积分 Integratef, x, xmin, xmax, y, ymin, ymax, . 定积分 NIntegratef, x, xmin, xmax, y, ymin, ymax, . 计算积分
15、的数值解 In1:= IntegrateSinSinx,x 嘻嘻, 无法计算, 原样输出 In2:= IntegrateLogx, x,0,6 啊, 广义积分也一样算 In3:= Integratex2+y2, x,0,1, y,0,1 In4:= In3/N 如果你的上一条输入不是In3, 注意 调整这一条的输入哦 In5:= IntegrateSinSinx, x,0,1 怎么还没法计算啊 In6:= N% 或 NIntegrateSinSinx, x,0,1 呵, 终于可以计算了. 和与积 Sumf, i, imin, imax, j, jmin, jmax, . f对i, j, .分别
16、从imin到imax,jmin到jmax,.求和 Sumf, i, imin, imax, di 求和的步长为di Productf, i, imin, imax, j, jmin, jmax, . 求积 NSum 数值解 NProduct 数值解 In1:= Sumxi/i, i,1,4 In2:= Sumxi/i, i,1,5,2 In3:= Suma/i3, i,1,10 In4:= N% 或 NSuma/i3, i,1,10 In5:= Sum1/i3, i,1,Infinity 可能原样输出, 也可能输出Zeta3 (依math的版本不同而异) In6:= N% In7:= Sumx
17、i*yj, i,1,3, j,1,i 注: 如果想要求带符号上下限的Sum, 在math3.0中, 直接使用Sum函数即可: In8:= Sum1/Sini, i,1,n 而如果在旧版本的math, 则可能需要调入包(package) gospersu.m, 调入 格式一般为 In8:= x0 expr中x趋于x0 In1:= t=Sinx/x In2:= t/.x-0 错了吧. 0不能当分母的 In3:= Limitt,x-0 求极限总可以了吧 特殊函数 Fourier 傅利叶变换 InverseFourier 反傅利叶变换 In1:= 1,1,1,1,-1,-1,-1,-1 In2:= F
18、ourier% In3:= InverseFourier% RungeKutta, . 等函数定义函数如下 In1:= fx_:=x2+1 math中定义函数:变量后跟_, 然后用:= In2:= fx_, y_:=x+y 以上两个定义同时存在并不矛盾, 当f仅使用一个参数, 自动用一式; 为两个参数, 则用二式 In3:= f3 In4:= f3,2 定义别名 In1:= para:=ParametricPlot 用:=来定义别名 In2:= paraCost,t, t,0,Pi In3:= Alaspara 查看para是什么的别名 (7)矩阵/表的运算 矩阵的定义Table, Array
19、, IdentityMatrix, DiagonalMatrix; 输出 输入TalbeForm, ColumnForm, MatrixForm, list(其他输出TeXForm, FortranForm, CForm); 及运算: 数乘, 矩阵乘法, Inverse, Transpose, Det, MatrixPower, Eigenvalues, Eigenvectors, 矩阵定义使用的一点 说明. 矩阵的定义 Tablef, imax 包含imax个f的元素(f是规则) Tablef, i, imin, imax, istep, j, ., . istep=1可省, imin=1也
20、等于1可再省 Arraya, n 建立向量a1, a2, ., an Arraya, m, n 建mxn矩阵a Arraya, m1, m2, ., mn n维张量 IdentityMatrixn 生成n维单位矩阵 DiagonalMatrixlist list元素为对角元 In1:= Tablex, 4 In2:= Tablei2, i, 1, 4 In3:= x%-1 看看表在运算符作用后的结果 In4:= D%, x 求导也可以 In5:= % /. x-3 代入值看看 In6:= Arraya, 3, 2 看个2维的(3x2)矩阵 In7:= DiagonalMatrix1,2,3 生
21、成对角元是1,2,3的方阵 矩阵的输出/输入 TableFormlist 以表列格式显示一个表 ColumnFormlist 写成一列 MatrixFormlist 按矩阵形式 listi 第i个元素(一维); 第i行元素(二维) listi,j list的第i行, 第j列元素. In1:= a=Tablei+2*j, i, 1, 3, j, 1, 2 In2:= TableForm% 看看表格式 In3:= ColumnForm% 写成一列 In4:= MatrixForm% 再看看矩阵形式 In5:= %2 把上面的矩阵的第二行(是一维的表了哦)去来 In6:= %2,1 取第二行第一列元
22、素(是一个数) 注: In5,In6也可用a2和a2,1的典型写法. 其他输出格式 TeXForm, FortranForm, CForm TeX(数学排版)格式, Fortran语言, C语言格式输出 In1:= (Sqrtx3-1+Expy)/Logx In2:= TeXForm% 注意TeX中T和X是大写, e是小写 In3:= CForm% 矩阵的数学运算 cm 数乘(c标量, m是Table或Array定义的矩阵) a.b 矩阵相乘(注意矩阵乘法的规则) Inversem 逆矩阵(当然要对方阵来说了) Transposem 转置 Detm m(方阵)的行列式 MatrixPowerm
23、,n m(方阵)的n次幂 Eigenvaluesm m(方阵)的特征值 Eigenvectorsm m(方阵)的特征向量 EigenvaluesNm, EigenvectorsNm 数值解 In1:= a=Tablei+2*j, i, 1, 3, j, 1, 2 In2:= 5a 看看乘积 In3:= b=Table3*i-2j, i, 1, 3, j, 1, 3 In4:= b.a 矩阵乘法(注意,此例a.b没有意义) In4:= Transpose% 转置 In5:= Inverseb 求一下矩阵的逆(天哪, 是方阵还不行, 还要行列式不为0) In6:= Detb 果然行列式为0 In7
24、:= c=b+1,0,0,0,0,0,0,0,0 In8:= Inversec 终于可以求逆了 In9:= MatrixPowerb,3 b的3次方 In10:= Eigenvaluesb 特征值 In11:= Eigenvectorsb 特征向量 一点说明: 矩阵可以先使用, 再定义; 局部定义和整体定义的顺序也自由. 如: In1:= d1,1=w; d1,2=e; d2,1=21; d2,2=22; In2:= Arrayd,3,3 你就会发现, 定义过的有值了, 没定义的还没有值.(8)表的运算.2 表的结构VertorQ, MatrixQ, MemberQ, FreeQ, Lengt
25、h, 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 计算表的有关结构 VectorQlist 检验list是否为向量结
26、构 MatrixQlist 检验list是否为矩阵结构 MemberQlist, form 检验form是否为list的元素 FreeQlist, form 检验form是否不是list的元素 Lengthlist list中元素的数目 TensorRanklist list的深度(看成张量的秩) Dimensionslist list作为向量或矩阵的维数 Countlist, form form在list中出现的次数 Positionlist, form form在list中的位置 In1:= t=1,2,3 t是一个表 In2:= VectorQt 不是向量 In3:= MemberQt,
27、3 3是它的元素 In4:= MemberQt,2 2不是它的元素 In5:= Lengtht t的长度是2 In6:= TensorRankt t的深度是1 In7:= Dimensionst 作为向量,是2维: 1,2和3 In8:= Positiont,3 3在表t中的位置是2 在表中取部分元素 Firstlist list的首元素 Lastlist list的最后一个元素 listn list的第n个元素 list-n list的倒数第n个元素 (以后二者合写为n/-n) listn1,n2,.,nm 相当listn1n2.nm listn1,n2,.,nm list第n1,n2,.,
28、nm元组成新表 listi1,i2,.,j1,j2,. list的i1,i2.行,j1,j2,.列 Takelist, n/-n 取list的前/后n个元素 Restlist 去掉首元的list Droplist, n/-n 去掉前/后n个元素的list Selectlist, crit 从list中选出满足crit的元素 In1:= t=2,1,1; In2:= VectorQt 函数名最后字母为Q,其值为True/False In3:= aa=a,b,c,d,e,f,g,h,i,j,k,l; In4:= aa1 看看以下几个, 体会一下取元素/子表 In5:= aa12 In6:= aa1
29、,2 In7:= aa1,2 In8:= aa1,2 In9:= Selecta,23,12,0,3.5,EvenQ 看看Select怎么用 这里EvenQexpr判断expr是否偶数; OddQ.奇数?; NumberQ.数?; IntegerQ.整数?; PrimeQ.素数? AtomQ.简单表达式?. 表中插入元素 Prependlist, elem 表头加elem(PrependTo函数修改list) Appendlist, elem 在表尾加elem(AppendTo修改list) Insertlist, elem, n/-n 在正/倒数第n个位置插入elem Joinlist1,
30、list2, . 连接list1, list2, . In1:= Prependa,b,c,x 在a,b,c前加x元素 In2:= Inserta,b,c,x,2 在a,b,c的第2个位置插入x In3:= Join1,2,3,xy,m,2,3,3 看看Join 集合函数 Unionlist1, list2, . 去掉重复元并排序后的Join Intersectionlist1, list2, . 取各list的公共元 Complementt, list1, list2, . 在t中, 不在各list中的元素 In4:= Union1,2,3,xy,m,2,3,3 看看Union In5:= Complementa,b,c,d,e,a,d,e,f 看看Complement 表的重排 Sortlist 将list排序 Unionlist 去掉重复元 Reverselist 倒序 RotateLeftlist, n/-n 将list向左/右转n个元素(n=1可省) RotateRightlist, n/-n 将list向右/左转n个元素(n=1可省) Transposelist