- o- p0 x5 `) G) ~
| 2 ^3 d: r. g- J6 Z4 y0 f, C, u. i, k
Mathematica的基本语法特征) z" n4 e* O6 ^6 D! I
如果你是第一次使用Mathematica,那么以下几点请你一定牢牢记住:0 o& h! j2 _' K4 a m
Mathematica中大写小写是有区别的,如Name、name、NAME等是不同的变量名或函数名。
& C( ^! J( _1 W! Q( h" P/ m& z9 E- J$ V5 I0 o
系统所提供的功能大部分以系统函数的形式给出,内部函数一般写全称,而且一定是以
6 C: s' x N, D0 ^4 b/ h大写英文字母开头,如Sin[x],Conjugate[z]等。3 k5 {) x! V' F% I
乘法即可以用*,又可以用空格表示,如2 3=2*3=6 ,x y,2 Sin[x]等;乘幂可以用“1 s3 ~1 I0 L7 r' A) `
^”表示,如x^0.5,Tan[x]^y。" b9 s' p2 b" |2 q
自定义的变量可以取几乎任意的名称,长度不限,但不可以数字开头。5 I Q: ]4 f( d" P5 i9 I( h& c4 F
当你赋予变量任何一个值,除非你明显地改变该值或使用Clear[变量名]或“变量名=.”& [- \0 }. {1 N: A1 I, {: U& M( y5 s
取消该值为止,它将始终保持原值不变。) M" Z8 h& L% k' ]( f, a& {' o
一定要注意四种括号的用法:()圆括号表示项的结合顺序,如(x+(y^x+1/(2x)));[]方括8 N+ z& S2 |$ K8 S
号表示函数,如Log[x],BesselJ[x,1];{}大括号表示一个“表”(一组数字、任意表达8 `- ~" X. j t& s+ W+ P5 h: D
式、函数等的集合),如{2x,Sin[12 Pi],{1+A,y*x}};[[]]双方括号表示“表”或“表
) B& B R9 Y+ \7 w, t# T. i7 s达式”的下标,如a[[2,3]]、{1,2,3}[[1]]=1。" J8 T7 P. Z/ J' W: k9 n
Mathematica的语句书写十分方便,一个语句可以分为多行写,同一行可以写多个语句(
. Y: P0 E9 O [$ g" Y# f# W但要以分号间隔)。当语句以分号结束时,语句计算后不做输出(输出语句除外),否" n& i, j3 h, b5 V6 X
则将输出计算的结果。+ P9 G- S( T* H+ d2 H) z
8 G/ |* J( v. y/ l! R3 x
9 H4 J0 Y. a: o9 T3 c, e一.数的表示及计算
8 z Q4 e# Y. s7 z, s
5 i, G' v v# ?1.在Mathematica中你不必考虑数的精确度,因为除非你指定输出精度,Mathematica总
' s8 Z* X( |1 H) s2 g7 g' ^会以绝对精确的形式输出结果。例如:你输入
1 M+ i* Y, B7 DIn[1]:=378/123,系统会输出Out[1]:=126/41,如果想得到近似解,则应输入
3 ^7 ]2 k7 t1 }7 h0 CIn[2]:=N[378/123,5],即求其5位有效数字的数值解,系统会输出Out[2]:=3.073: G/ H, O- j+ C
2,另外Mathematica还可以根据你前面使用的数字的精度自动地设定精度。$ f; R' L( u# s# w* W# Q
Mathematica与众不同之处还在于它可以处理任意大、任意小及任意位精度的数值,
5 j* E2 e! [' U4 Z如100^7000,2^(-2000)等数值可以很快地求出,但在其他语言或系统中这是不可想象的
4 `) j$ |( P- p C,你不妨试一试N[Pi,1000]。( R1 ]% X( k- U, ~ m
Mathematica还定义了一些系统常数,如上面提到的Pi(圆周率的精确值),还有E(自然对
6 U B3 c9 _! s3 \: _2 I. N, U数的底数)、I(复数单位),Degree(角度一度,Pi/180),Infinity(无穷大)等,不要小
8 Q: r; ^5 F- y* U. [/ f: X& V* D看这些简单的符号,它们包含的信息远远大于我们所熟知的它们的近似值,它们的精度: \ F- R7 l0 ?' U
也是无限的。! E' o( g$ `& M$ j
二.“表”及其用法6 r5 ~( Y7 T; }8 v
“表”是Mathematica中一个相当有用的数据类型,它即可以作为数组,又可以作为矩阵
" }! }: @$ `: ^7 ]9 e6 B0 Y f+ X;除此以外,你可以把任意一组表达式用一个或一组{}括起来,进行运算、存储。可以7 m) c; @) ~0 }8 l0 c/ g
说表是任意对象的一个集合。它可以动态地分配内存,可以方便地进行插入、删除、排6 [( a& [! w; \
序、翻转等等几乎所有可以想象到的操作。
9 U5 }* _2 }9 J, x 如果你建立了一个表,你可以通过下表操作符[[]](双方括号)来访问它的每一个元
& `# B7 X- A5 v- B6 G1 Q素,如我们定义table={2,Pi,Sin[x],{aaa,A*I}}为一个表,那么table[[1]]就为2,ta
$ {: N& ?; O4 @" z$ f/ ?ble[[2]]就是Pi,而table[[3,1]]表示嵌套在table中的子表{aaa,A*I}的第一个元素即/ a& z. x( w+ u8 `2 H$ X
aaa,table[[3,2]]表示{aaa,A*I}第二个元素即A*I。总之,表每一层次上并列的部分用' X x( u' h8 f: p/ D5 W- i
逗号分割,表可以无穷嵌套。
8 \" Q# F6 A2 H8 K1 h你可以通过Append[表,表达式]或Prepend[表,表达式]把表达式添加到表的最前面或最后
0 q2 A0 J9 d9 V: b9 O6 d% p. a面,如Append[{1,2,3},a]表示{1,2,3,a}。你还可以通过Union[表1,表2,......],Ji- `" y/ M9 b9 ~. b) J8 b6 Y
on[表1,表2,......]来把几个表合并为一个表,二者不同在于Union在合并时删除了各表. v! v7 a/ w3 z; l
中重复的元素,而后者仅是简单的合并;你还可以使用Flatten[表]把表中所有子表"抹 P* d% Q) E' U' U* d
平"合并成一个表,而Patition[表,整数n]把表按每n个元素分段作为子表,集合成的表
+ w* _) Y5 e# x。如Flatten[{1,2,{Sin[x],dog},{{y}}}]表示{1,2,Sin[x],y},而Partition[{1,2,Sin
. B. U/ H# Z' G6 o+ b4 m! w# v[x],y},2]把表每两个分段,结果为{{1,2},{Sin[x],y}};还可以通过Delete[表,位置+ A# y4 w/ r$ A# E$ B
]、Insert[表,位置]来向表中按位置插入或删除元素,如要删除上面提到的table中的
$ e: p, {8 u2 Waaa,你可以用Delete[table,{3,1}]来实现;Sort[表]给出了表中各元素的大小顺序,R+ `3 z# {7 F) M6 B) Y. h! C
everse[表]、RotateLeft[表,整数n]、RotateRight[表,整数n]可以分别将一个表进行- P$ L: @6 T, v$ v
翻转、左转n个元素、右转n个元素等操作,Length[表]给出了表第一个层次上的元素个 n) T$ ?' P6 P) x7 k7 y. Y5 E1 H
数,Position[表,表达式]给出了表中出现该表达式的位置,Count[表,表达式]则给出
% y4 s. N+ }: C9 i. R# Y+ X表达式出现的次数。各种表的操作函数还有很多,这里就不再一一介绍了。
: L J( k" q* m. e/ G) ~" w9 p" [4 g! Q7 N8 Q* U/ S( |) |
三.图形函数0 W4 @# h+ w9 t4 }6 w4 M) ?' @
Mathematica的图形函数十分丰富,用寥寥几句就可以画出复杂的图形,而且可以通过变
9 j7 }2 a6 M q7 i5 j量和文件存储和显示图形,具有极大的灵活性。5 P/ A3 E! N5 b. ]! O" ]. ^$ U$ d9 A
图形函数中最有代表性的函数为Plot[表达式,{变量,下限,上限},可选项],(其
3 [5 m8 L, ]3 h中表达式还可以是一个"表达式表",这样可以在一个图里画多个函数);变量为自变量;1 e; H a6 b" F
上限和下限确定了作图的范围;可选项可要可不要,不写系统会按默认值作图,它表示
* C% C, b; _. |6 ]! [5 X6 V9 t对作图的具体要求。例如Plot[Sin[x],{x,0,2*Pi},AspectRatio-1]表示在0<X<2PI的范7 m3 U* d! r, |, q* u# O' B
围内作函数Sin[x]的图象,AspectRatio为可选项,表示图的x向y向比例,AspectRatio
2 q+ n: @5 B5 B0 N5 m4 S-1表示纵横比例为1:1,如果不写这一项,系统默认比例为1:GodenRatio,即黄金分割的- {4 x3 ?' R- b! M" e0 B, X
比例(注意,可选项的写法为可选项名-可选项值),Plot还有很多可选项,如PlotRange% f' Q/ ?9 V* q n' R
表示作图的值域,PlotPoint表画图中取样点的个数,越大则图越精细,PlotStyle来确
b4 U# v4 N4 A6 H* }' S+ Q定所画图形的线宽、线型、颜色等特性,AxesLabel表式在坐标轴上作标记等等。
7 {* v; D' z# @4 z% _3 f# \, g; a.二维函数作图- A1 ^- J* L+ @
Plot[函数f,{x,xmin,xmax},选项]
0 @6 S4 n6 _2 l7 x0 {8 B在区间{x,xmin,xmax}上,按选项的要求画出函数f的图形
2 B' r% x2 q o4 a8 p6 Y5 |; n& m b0 kPlot[{函数1,函数2},{x,xmin,xmax},选项]! Y8 ^2 r& q/ f
在区间{x,xmin,xmax}上,按选项的要求画出几个函数的图形
: ?3 g- f# t: c3 q( V$ ]# b.二维参数画图函数' M$ B" m% c8 I" _6 J
ParametricPlot[{x[t],y[t]},{t,t0,t1},选项] 画一个X轴,Y轴坐标为{x[t],y[t]},参
" ]4 t: k$ F9 ], U4 R# J) ^7 w" b变量t在[t0,t1]中的参数曲线
% C& R' P7 r; \; c. z) v; b1 S% s.三维函数作图$ v9 R/ ^0 U) u
Plot3D[f[x,y],{x,x0,x1},{y,y0,y1},选项]
, r/ N4 t+ { v+ W: J在区域上,画出空间曲面f[x,y].% E* q8 w u2 ]4 x
除Plot,二维参数方程作图的ParametricPlot[{x(t),y(t)},{t,下限,上限},可选项]、) h9 ^4 h- A/ a' l7 W& C! m
三维作图的Plot3D[二维函数表达式,{变量1,下限,上限}, {变量2,下限,上限},可. {, |* g. F4 [0 c
选项}]、三维参数方程作图的ParametricPlot3D[{x(u,v),y(u,v),z(u,v)},{u,下限,上; m* T- w; I! M' \
限},{v,下限,上限},可选项]外,还有画二维等高线图ContourPlot[二元表达式,{变量0 z5 ` V, D9 X0 Q, m+ U: U
1,下限,上限}, {变量2,下限,上限},可选项}]、画二维密度图的DensityPlot[二元
7 _; e- w! ~1 r5 a1 ^, k+ j9 z表达式,{变量1,下限,上限}, {变量2,下限,上限},可选项}]等等不一而足。 + v. R1 O0 [3 z2 e; }+ `+ ?; T4 E* C
除使用上述函数作图以外,Mathematica还可以象其他语言一样使用图形元语言作图
- J# m M. N9 {1 K% f% o,如画点函数Point[x,y],画线函数Line[x1,y1,x2,y2],画圆的Circle[x,y,r],画矩形' ]5 X& O3 g" f5 N
和多边形的Rectangle和Polygon,字符输出的Text[字符串,输出坐标],还有颜色函数RG
- I1 N9 R8 I, R. D+ c' D- c# S: |BColor[red,green,blue]、Hue[],GrayLevel[gray]来描述颜色的亮度、灰度、饱和度,+ g( [' k- p! L; y3 Z: R
用PointSize[相对尺度]、Thickness[相对尺度]来表示点和线的宽度。总之Mathematic
, [2 M6 ?1 O0 ra可以精确地调节图形的每一个特征 |