1 h) }5 H# z7 K5 C
|
' A* J* J4 l4 P! j Mathematica的基本语法特征. p7 t! s6 n2 j p) h
如果你是第一次使用Mathematica,那么以下几点请你一定牢牢记住:
' F9 j& G; `5 k5 P' bMathematica中大写小写是有区别的,如Name、name、NAME等是不同的变量名或函数名。
3 }9 N3 `) [+ y3 b" l* G' x
: i3 o4 f, o5 @: Z8 Z系统所提供的功能大部分以系统函数的形式给出,内部函数一般写全称,而且一定是以
! U7 w& e0 l" l6 t大写英文字母开头,如Sin[x],Conjugate[z]等。9 g5 N& U7 ?, }+ i, x; o
乘法即可以用*,又可以用空格表示,如2 3=2*3=6 ,x y,2 Sin[x]等;乘幂可以用“; t$ Y2 W. F3 R, p) U% l
^”表示,如x^0.5,Tan[x]^y。' g8 j$ e5 p. e
自定义的变量可以取几乎任意的名称,长度不限,但不可以数字开头。
0 ?* e( Y- M$ P* l5 T+ }% l当你赋予变量任何一个值,除非你明显地改变该值或使用Clear[变量名]或“变量名=.”
3 _4 o% C& Z0 E0 b9 D7 S2 f取消该值为止,它将始终保持原值不变。
/ L* u q" F. j5 [' H1 ^+ l一定要注意四种括号的用法:()圆括号表示项的结合顺序,如(x+(y^x+1/(2x)));[]方括# W- ?+ }; I: a" q$ m; {. A
号表示函数,如Log[x],BesselJ[x,1];{}大括号表示一个“表”(一组数字、任意表达. k9 S2 Z ?% _4 s/ X
式、函数等的集合),如{2x,Sin[12 Pi],{1+A,y*x}};[[]]双方括号表示“表”或“表
8 j* T, g* L5 I( M- x* r: j7 m达式”的下标,如a[[2,3]]、{1,2,3}[[1]]=1。1 \ @) J. k, z6 ]' \! V0 r9 _- b
Mathematica的语句书写十分方便,一个语句可以分为多行写,同一行可以写多个语句(0 M2 n; W% e6 v. w
但要以分号间隔)。当语句以分号结束时,语句计算后不做输出(输出语句除外),否
3 q/ G1 s! ]$ j8 j1 P% p' L则将输出计算的结果。3 \! @; ]7 n8 Z8 d) d" Q
! y; F) k5 H. a8 u' u0 ?
& `% C# ` f9 V }8 ^一.数的表示及计算
5 x$ B6 I8 o5 X5 S# { - J( R! [: j7 q* U/ F( x. ?
1.在Mathematica中你不必考虑数的精确度,因为除非你指定输出精度,Mathematica总
3 B9 z! R% d# E7 S: `( ~. U会以绝对精确的形式输出结果。例如:你输入/ S y, f) j. _1 S
In[1]:=378/123,系统会输出Out[1]:=126/41,如果想得到近似解,则应输入
& d$ g/ c4 r! V# r \) mIn[2]:=N[378/123,5],即求其5位有效数字的数值解,系统会输出Out[2]:=3.073
# p/ _3 ]8 K4 H. T2 h2,另外Mathematica还可以根据你前面使用的数字的精度自动地设定精度。( e) B5 Z7 l7 a
Mathematica与众不同之处还在于它可以处理任意大、任意小及任意位精度的数值,/ }( b4 w1 f8 ^$ ? @
如100^7000,2^(-2000)等数值可以很快地求出,但在其他语言或系统中这是不可想象的
5 l; l$ K& m6 Y% F% @5 d,你不妨试一试N[Pi,1000]。
5 _% l/ F8 o# A: PMathematica还定义了一些系统常数,如上面提到的Pi(圆周率的精确值),还有E(自然对
) M( o( M/ u; _" L$ o2 L数的底数)、I(复数单位),Degree(角度一度,Pi/180),Infinity(无穷大)等,不要小
6 ?: d; u& E; @2 ?' r1 e7 v看这些简单的符号,它们包含的信息远远大于我们所熟知的它们的近似值,它们的精度
3 ?2 s! H; L( u; a1 |3 B也是无限的。
, T/ W6 r0 e3 |! Q" Q, S- R# M二.“表”及其用法1 G, y7 |. ^. f& S; m
“表”是Mathematica中一个相当有用的数据类型,它即可以作为数组,又可以作为矩阵
6 e# v0 \+ h3 x! Q1 U7 p;除此以外,你可以把任意一组表达式用一个或一组{}括起来,进行运算、存储。可以% C. r. w5 k' F) L
说表是任意对象的一个集合。它可以动态地分配内存,可以方便地进行插入、删除、排
( i* J* X0 |7 ^, ~+ F序、翻转等等几乎所有可以想象到的操作。
. R1 W! J0 Q$ ~" Q; k& W0 \& ] 如果你建立了一个表,你可以通过下表操作符[[]](双方括号)来访问它的每一个元
0 C. v$ L7 |0 y1 b素,如我们定义table={2,Pi,Sin[x],{aaa,A*I}}为一个表,那么table[[1]]就为2,ta
2 i$ x& [6 `9 \$ @ble[[2]]就是Pi,而table[[3,1]]表示嵌套在table中的子表{aaa,A*I}的第一个元素即
T: r2 B+ `% {7 [aaa,table[[3,2]]表示{aaa,A*I}第二个元素即A*I。总之,表每一层次上并列的部分用* U; U; e) H& {4 K `' L
逗号分割,表可以无穷嵌套。4 i- X2 k, e' \$ Z' E5 h
你可以通过Append[表,表达式]或Prepend[表,表达式]把表达式添加到表的最前面或最后
) ~: \9 Q* g' K$ B9 l: ^5 w- W! }0 N5 C面,如Append[{1,2,3},a]表示{1,2,3,a}。你还可以通过Union[表1,表2,......],Ji
; P' g$ S) S* S8 V& fon[表1,表2,......]来把几个表合并为一个表,二者不同在于Union在合并时删除了各表+ V5 M/ y5 T# i% r+ p% `
中重复的元素,而后者仅是简单的合并;你还可以使用Flatten[表]把表中所有子表"抹
' i( K; f; @* D7 f2 R! e0 |3 ?6 \平"合并成一个表,而Patition[表,整数n]把表按每n个元素分段作为子表,集合成的表
) R1 m0 E/ J# s6 h- a, j。如Flatten[{1,2,{Sin[x],dog},{{y}}}]表示{1,2,Sin[x],y},而Partition[{1,2,Sin T1 t# a Z4 x" {
[x],y},2]把表每两个分段,结果为{{1,2},{Sin[x],y}};还可以通过Delete[表,位置
) ?' X* h6 ~1 S5 u]、Insert[表,位置]来向表中按位置插入或删除元素,如要删除上面提到的table中的$ ]! P* s( @4 [5 n+ ~. N3 ^& H7 W
aaa,你可以用Delete[table,{3,1}]来实现;Sort[表]给出了表中各元素的大小顺序,R: t. M- i- F1 b* s% s7 k
everse[表]、RotateLeft[表,整数n]、RotateRight[表,整数n]可以分别将一个表进行
, M6 m( t; W$ H; Y3 t5 S- s翻转、左转n个元素、右转n个元素等操作,Length[表]给出了表第一个层次上的元素个
( O# b# T7 R6 K& n# |$ b8 T( a数,Position[表,表达式]给出了表中出现该表达式的位置,Count[表,表达式]则给出
: t4 o4 @8 x) G5 w0 T表达式出现的次数。各种表的操作函数还有很多,这里就不再一一介绍了。' L5 F$ v9 v! U
5 S$ t$ V. d+ j6 k# W三.图形函数- k* a! ?. F& |
Mathematica的图形函数十分丰富,用寥寥几句就可以画出复杂的图形,而且可以通过变0 ~' k) D2 ^0 Y) n$ i( o$ b9 q
量和文件存储和显示图形,具有极大的灵活性。
& p/ P" o' d( s7 W. h9 t 图形函数中最有代表性的函数为Plot[表达式,{变量,下限,上限},可选项],(其; j8 n9 a( Q% |) r
中表达式还可以是一个"表达式表",这样可以在一个图里画多个函数);变量为自变量;
, ~/ ?7 p4 F+ `9 H. ^3 b上限和下限确定了作图的范围;可选项可要可不要,不写系统会按默认值作图,它表示2 ?+ C. [% N. Q# \6 G
对作图的具体要求。例如Plot[Sin[x],{x,0,2*Pi},AspectRatio-1]表示在0<X<2PI的范
, e, W# M" G# O围内作函数Sin[x]的图象,AspectRatio为可选项,表示图的x向y向比例,AspectRatio
; a2 v6 k; \; y+ m' R-1表示纵横比例为1:1,如果不写这一项,系统默认比例为1:GodenRatio,即黄金分割的
I( y9 }( O' d+ m比例(注意,可选项的写法为可选项名-可选项值),Plot还有很多可选项,如PlotRange
& w4 Q( Y2 S0 @* O/ z. c% r表示作图的值域,PlotPoint表画图中取样点的个数,越大则图越精细,PlotStyle来确
7 }1 i/ c; }3 H1 _定所画图形的线宽、线型、颜色等特性,AxesLabel表式在坐标轴上作标记等等。
7 L( M. p# L' u0 j.二维函数作图
# n) }! {3 V( ~4 ~9 |6 b- f ePlot[函数f,{x,xmin,xmax},选项]8 s+ q& t) Z) [& K# Y, B7 p) X+ R: E
在区间{x,xmin,xmax}上,按选项的要求画出函数f的图形
% L# S- `6 d5 Q8 D/ m9 }Plot[{函数1,函数2},{x,xmin,xmax},选项]& l9 n& ~2 j! Y3 _4 h o! I
在区间{x,xmin,xmax}上,按选项的要求画出几个函数的图形
+ z: n4 @( q8 B. n/ Y' C$ a! j.二维参数画图函数
+ ^, O) P4 {' M- M: m- fParametricPlot[{x[t],y[t]},{t,t0,t1},选项] 画一个X轴,Y轴坐标为{x[t],y[t]},参) H% w- [0 H" U
变量t在[t0,t1]中的参数曲线
7 c8 l6 `3 T, }( y8 f9 R4 ]3 `6 P2 x.三维函数作图) k" m5 g& m8 \& J7 G1 @3 v) @1 J; ^
Plot3D[f[x,y],{x,x0,x1},{y,y0,y1},选项]* v7 }: B& q- x5 S- O ?
在区域上,画出空间曲面f[x,y].
% ], _( T6 x5 }$ Z; A6 O& n6 A除Plot,二维参数方程作图的ParametricPlot[{x(t),y(t)},{t,下限,上限},可选项]、; @3 z9 X8 X& B2 k, n
三维作图的Plot3D[二维函数表达式,{变量1,下限,上限}, {变量2,下限,上限},可& Y, _6 w3 T- p6 Q1 Z# ?
选项}]、三维参数方程作图的ParametricPlot3D[{x(u,v),y(u,v),z(u,v)},{u,下限,上1 E: _- F/ ~% K- ?
限},{v,下限,上限},可选项]外,还有画二维等高线图ContourPlot[二元表达式,{变量# ?# @) X6 Z; R) z
1,下限,上限}, {变量2,下限,上限},可选项}]、画二维密度图的DensityPlot[二元
z$ G8 Q9 P% d _7 w* u: T2 v表达式,{变量1,下限,上限}, {变量2,下限,上限},可选项}]等等不一而足。
) F# a+ _0 e4 B" x& P 除使用上述函数作图以外,Mathematica还可以象其他语言一样使用图形元语言作图
* K4 E& D, ?- ]0 M C,如画点函数Point[x,y],画线函数Line[x1,y1,x2,y2],画圆的Circle[x,y,r],画矩形4 H6 W" a: F; }) Q7 b& \. e+ N4 \. }
和多边形的Rectangle和Polygon,字符输出的Text[字符串,输出坐标],还有颜色函数RG3 S$ R5 p2 Z. K3 f( l
BColor[red,green,blue]、Hue[],GrayLevel[gray]来描述颜色的亮度、灰度、饱和度,7 R- D+ v( {; T3 J5 L
用PointSize[相对尺度]、Thickness[相对尺度]来表示点和线的宽度。总之Mathematic
6 r6 o) y4 J( G9 @- w; x! a- Q sa可以精确地调节图形的每一个特征 |