2. 给变量赋值
在Mathmatica中用等号=(或: =)为变量赋值。同一个变量可以表示一个数值,一个数组,一个表达式,甚至一个图形。变量=表达式 或 变量1=变量2=表达式 批注[微软用户1]: ”=”称为立即赋值,”:=”称为延迟赋值
如: In[1]:=x=3 Out[1]=3 In[2]:=x^2+2*x Out[2]=15 In[3]:=x=%+1 Out[3]=16
对不同的变量可同时赋不同的值,例如: In[4]:={u,v,w}={1,2,3} Out[4]={1,2,3} In[5]:=2u+3v+w Out[5]=11
对于已定义的变量,当你不再使用它是,为防止变量值的混淆,可以随时用=.清除它的值,如果变量本身也要清除用函数Clear[var],例如: In[6]:=u=. In[7]:=2u+v (上面已定义了u,v的值) Out[7]=2+2u 3. 变量的替换 在给定一个表达式时其中的变量可能取不同的值,这是可用变量替换来计算表达式的不同值。方法为用expr/.x->xval,例如: In[1]:=f=x/2+1 Out[1]= 1+x2 In[2]:=f/.x->1 Out[2]=
32
In[3]:=f/.x->2 Out[3]=3
如果表达式中有多个变量,也可同时替换,方法为:expr/.{x->xval,y->yval,...}
11
In[4]:=(x+y)(x-y)^2/.{x->3,y->1-a} Out[4]=(4-a)(2+a)
2
2.3 函数
1. 系统函数
在Mathmatic中定义了大量的数学函数可以直接调用,这些函数其名称一般表达了一定的意义,可以帮助我们理解。下面是几个常用的函数:
Sqrt[x] 开平方
Floor[x] 不比x大的最大整数 Ceiling[x] 不比x小的最小整数 Sign[x] 符号函数 Round[x] 接近x的整数 Abs[x] x绝对值
Max[x1,x2,x3……..] x1 ,x2,x3…….中的最大值 Min[x1,x2,x3……..] x1,x2,x3…….中的最小值 Random[] 0~1之间的随机函数
Random[R,xmax] 0~xmax之间的随机函数(R为Real,Integer,Complex之一) Random[R,{xmin,xmax}] xmin~xmax之间的随机函数(R为Real,Integer,Complex之一) Exp[x] 指数函数e
x
Log[x] 自然对数函数lnx
Log[b,x] 以b为底的对数函数logbx Sin[x],Cos[x],Tan[x],Csc[x],Sec[x],Cot[x] 三角函数(变量是以弧度为单位的) ArcSin[x],ArcCos[x],ArcTan[x],ArcCsc[x],ArcSec[x],ArcCot[x] 反三角函数 Sinh[x],Cosh[x],Tanhx[x],Csch[x],Sech[x],Coth[x] 双曲函数 ArcSinh[x], ArcCosh[x], ArcTanhx[x], ArcCsch[x],ArcSech[x],ArcCoth[x] 反双曲函数 Mod[m,n] m被n整除的余数,余数与n同号 Quotient[m,n] m/n的整数部分
GCD[n1,n2,n3……]或GCD[s] n1,n2,… 或s的最大公约数,s为数据集合 LCM[n1,n2……]或LCM[s] n1,n2… 或s的最小公倍数,s为数据集合 N! N的阶程 N!! N的双阶程
12
Mathematica中的函数与数学上的函数有些不同的地方,Mathematica中函数是一个具有独立功能的程序模块,可以直接被调用。同时每一函数也可以包括一个或多个参数,也可以没有参数。参数的的数据类型也比较复杂。更加详细的可以参看系统的帮助,了解各个函数的功能和使用方法是学习Mathematica软件的基础。
2. 函数的定义
(1) 函数的立即定义
立即定义函数的语法如下f[x_]=expr函数名为f,自变量为x,expr是表达式。在执行时会把expr 中的x都换为f的自变量x (不是x_ )。函数的自变量具有局部性,只对所在的函数起作用。函数执行结束后也就没有了,不会改变其它全局定义的同名变量的值。
请看下面的例子,定义函数f(x)=xsinx+x,对定义的函数我们可以求函数值,也可绘制它的图形。 In[1]:=f[x_]=x*Sin[x]+x^2 Out[1]=x 2 +xSin[x] In[2]:=f[1] Out[2]=1+Sin[1] In[3]:=Plot[f[x],{x,-3,3}] 2
8642-3-2-112 Out[3]= -Graphics- 对于定义的函数我们可以使用命令Clear[f]清除掉,而Remove[f]则从系统中删除该函数。
(2) 多变量函数的定义 也可以定义多个变量的函数,格式为f[x_,y_,z_,…]=expr自变量为x,y,z…,相应的expr中的自变量会被替换。例如定义函数f(x,y)=xy+ycosx。 In[1]:=f[x_,y_ ]=x*y+y*Cos[x] Out[1]=xy+yCos[x] In[2]:=f[2,3] Out[2]=6+3Cos[2]
(3) 延迟定义函数
延迟定义函数从定义方法上与即时定义的区别为 “=” 与“:=”延迟定义的格式为f[x_]:=expr其他操作基本相同。那么延迟定义和即时定义的主要区别是什么?即时定义函数在输入函数后立即定义函数并存放在内存中并可
13
直接调用。延时定义只是在调用函数时才真正定义函数。
(4) 使用条件运算符定义和If命令定义函数
?x?1 x?02如果要定义如:f(x)??? x 0?x??1 ?? sinx x??1这样的分段函数应该如何定义,显然要根据x 的不同值给出不同的表达式。一种办法是使用条件运算符,基本格式为:f[x_]:=expr/;condition ,当condition条件满足时才把expr赋给f(x) 。下面定义方法,通过图形可以验证所定义函数的正确性。
In[1]:=f[x_]:=x-1/;x>=0
f[x_]:=x^2/;(x>-1)&&(x<0) f[x_]:=x-1/;x<= -1 In[4]:=Plot[f[x],{x,-2,2}]
10.5-2-11-0.5-1 Out[4]= -Graphics- 当然使用If命令也可以定义上面的函数,If语句的格式为If[条件,值1,值2],如果条件成立取“值1”,否则取“值2”,用If语句的定义结果如下: In[5]:=g[x_]:=If[x>=0,x-1,If[x<= -1,Sin[x],x^2]] In[6]:=Plot[g[x],{x,-2,2}] 10.5-2-11-0.5-1 Out[6]= -Graphics-
可以看出用If定义的函数g(x)和前面函数f(x)相同,这里使用了两个If嵌套,逻辑性比较强。关于其他的条件命令的进一步讨论请看后面的章节。
14
2.4 表
将一些相互关联的元素放在一起,使它们成为一个整体。既可以对整体操作,也可以对整体中的一个元素单独进行操作。在Mathematica中这样的数据结构就称作表(List)。表{a,b,c}表示一个向量;表{{a,b},{c,d}}表示一个矩阵。
1. 建表
在表中元素较少时,可以采取直接列表的方式列出表中的元素,如{1,2,3},请看下面的操作: In[1]:={1,2,3} Out[1]={1,2,3}
下面是符号表达式的列表: In[2]:=1+%x+x^%
Out[2]={1+2x,1+2x+x2,1+3x+x3} 下面是把Out[2]列表中的表达式对x求导: In[3]:=D[%,x] Out[3]={2,2+2x,3+3x2} In[4]:=%/.x->1 Out[4]={2,4,6}
如果表中的元素较多时,可以用建表函数进行建表:
Table[f,{i,min,max,step}] 以step为步长给出f的数值表,i由min变到max Table[f,{min,max}] 给出f的数值表,i由min变到max 步长为1 Table[f,max] 给出max个f的表
Table[f,{i,imin,imax},{j,jmin,jmax},….] 生成一个多维表 TableForm[list] 或list//TableForm 以表格格式显示一个表 Range[n] 生成一个{1,2,……,n}的列表 Range[n1,n2,d] 生成{n1,n1+d,n1+d,….,n2}的列表 下面给出x乘i的值的表,i的变化范围为[2,6]: In[1]:=Table[x*i,{i,2,6}] Out[1]={2x,3x,4x,5x,6x} In[2]:=Table[x^2,{4}] Out[2]={x2,x2,x2,x2}
用Range函数生成一个序列数: In[3]:=Range[10]
Out[3]={1,2,3,4,5,6,7,8,9,10}
15