2.1数据类型和常数
1.数值类型
在Mathematic中,基本的数值类型有四种:整数、有理数、实数和复数。
如果你的计算机的内存足够大,Mathemateic可以表示任意长度的精确实数,而不受所用的计算机字长的影响。整数与整数的计算结果仍是精确的整数或是有理数。例如2的100次方是一个31位的整数:
ln[1]:=2^100
Out[1]=1267650600228228229401496703205376 在Mathematica中允许使用分数,也就是用有理数表示化简过的分数。当两个整数相除而又不能整除时,系统就用有理数来表示,即有理数是由两个整数的比来组成如:
In[2]:=12345/5555
Out[2]=
2469 1111实数是用浮点数表示的,Mathematica实数的有效位可取任意位数,是一种具有任意精确度的近似实数,当然在计算的时候也可以控制实数的精度。实数有两种表示方法:一种是小数,另外一种是用指数方法表示的。如:
In[3]:=0.239998 Out[3]=0.23998 In[4]:=0.12*10^11 Out[4]=0.12*10^11
实数也可以与整数,有理数进行混合运算,结果还是一个实数。 In[5]:=2+1/4+0.5
Out[5]=2.75 小数表示 复数是由实部和虚部组成,实部和虚部可以用整数、实数、有理数表示。在Mathematica中,用I 表示虚数单位如:
In[6]:=3+0.7I Out[6]=3+0.7i
2.不同类型数的转换
在Mathematica的不同应用中,通常对数字的类型要求是不同的。例如在公式推导中的数字常用整数或有理数表示,而在数值计算中的数字常用实数表示。在一般情况下在输出行Out[n]中,系统根据输入行In[n]的数字类型对计算结果做出相应的处理。如果有一些特殊的要求,就要进行数据类型转换。
在Mathematica中的提供以下几个函数达到转换的目的: N[x] 将x转换成实数
N[x,n] 将x转换成近似实数,精度为n Rationalize[x] 给出x的有理数近似值
Rationalize[x,dx] 给出x的有理数近似值,误差小于dx 举例:
In[1]:=N[5/3,20]
Out[1]=1.6666666666666666667
In[2]:=N[%,10] %表示上一输出结果,即%=1.6666666666666666667。 Out[2]=1.666666667 第二个输出是把上面计算的结果变为10位精度的数字。 In[3]:=Rationalize[%] Out[3]=
5 33.数学常数
Mathematica 中定义了一些常见的数学常数,这些数学常数都是精确数。 Pi 表示π=3.14159„„
E 自然对数的底e=2.71828„„ Degree 1度,π/180弧度 I 虚数单位i Infinity 无穷大∞
-infinity 负无穷大 -∞
GondenRatio 黄金分割数0.61803
数学常数可用在公式推导和数值计算中,在数值计算中表示精确值。如: In[1]:=Pi^2 Out[1]=π2
In[2]:=Pi^2//N Out[2]=9.8696
4.数的输出形式
在数的输出中可以使用转换函数进行不同数据类型和精度的转换。另外对一些特殊要求的格式还可以使用如下的格式函数:
NumberForm[expr,n] 以n位精度的实数形式输出实数expr ScientificFormat[expr] 以科学记数法输出实数expr EngineergForm[expr] 以工程记数法输出实数expr 例如:
In[1]:=N[Pi^30,30]
Out[1]=8.2123304027495815865035834×1014In[2]:=NumberForm[%,10]
Out[2]//NumberForm=8.2123304×1014
下面的函数输出按工程记数法表示的指数可被3整除的实数
In[3]=EngineeringForm[%%] %%表示上两步的输出结果,即Out[1] Out[3]//EngineeringForm=821.23304027495815865035834×1012
2.2变量
1.变量的命名
Mathematica中内部函数和命令都是以大写字母开始的标示符,为了不会与它们混淆,我们自定义的变量应该是以小写字母开始,后跟数字和字母的组合,长度不限。例如:a12,ast,aST都是合法的,而12a,z*a,a b(中间有空格)是非法的。另外在Mathematica
中的变量是区分大小写的。在Mathematica中,变量不仅可以存放一个数值,还可以存放表达式或复杂的算式。
2.给变量赋值
在Mathmatica中用等号=为变量赋值。同一个变量可以表示一个数值,一个数组,一个表达式,甚至一个图形。如:
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+
x 2In[2]:=f/.x->1 Out[2]=
3 2In[3]:=f/.x->2 Out[3]=3
如果表达式中有多个变量,也可同时替换,方法为:expr/.{x->xval,y->yval,...} In[4]:=(x+y)(x-y)^2/.{x->3,y->1-a} Out[4]=(4-a)(2+a)2
2.3 函数
1.系统函数
在Mathmatic中定义了大量的数学函数可以直接调用,这些函数其名称一般表达了一定的意义,可以帮助我们理解。下面是几个常用的函数:
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的双阶程 Mathematica中的函数与数学上的函数有些不同的地方,Mathematica中函数是一个具有功能的程序模块,可以直接被调用。同时每一函数也可以包括一个或多个参数,也可以没有参数。参数的的数据类型也比较复杂。更加详细的可以参看系统的帮助,了解各个函数的功能和使用方法是学习Mathematica软件的基础。
2.函数的定义
(1) 函数的立即定义
立即定义函数的语法如下f[x_]=expr函数名为f,自变量为x,expr是表达式。在执行时会把expr 中的x都换为f的自变量x (不是x_ )。函数的自变量具有局部性,只对所在的函数起作用。函数执行结束后也就没有了,不会改变其它全局定义的同名变量的值。
请看下面的例子,定义函数f(x)=xsinx+x2,对定义的函数我们可以求函数值,也可绘制它的图形。
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}]
82Out[3]= -Graphics- 对于定义的函数我们可以使用命令Clear[f]清除掉,而Remove[f]则从系统中删除该函数。
-3-2-112 (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其他操作基本相同。那么延迟定义和即时定义的主要区别是什么?即时定义函数在输入函数后立即定义函数并存放在内存中并可直接调用。延时定义只是在调用函数时才真正定义函数。
(4) 使用条件运算符定义和If命令定义函数
x1 x02如果要定义如:f(x) x 0x1 sinx x1这样的分段函数应该如何定义,显然要根据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嵌套,逻辑性比较强。关于其他的条件命令的进一步讨论请看后面的章节。
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}
下面这个序列是以步长为2,范围从8到20: In[4]:=Range[8,20,2]
Out[4]={8,10,12,14,16,18,20}
上面的参数变化都是只有一个,也可制成包括多个参数的表,下面生成一个表: In[5]:=Table[2i+j,{i,1,3},{j,3,5}] Out[5]={{5,6,7},{7,8,9},{9,10,11}}
使用函数TableForm可以以表格的方式输出 In[6]:=%//TableForm
Out[6]//TableForm=5 6 7
7 8 9 9 10 11
2.表的元素的操作
当t表示一个表时,t[[i]]表示t中的第i个子表。如果t={1,2,a,b}那么t[[3]]表示“a”。 In[1]:=t=Table[I+2,j{I,1,3},{j,3,5}] Out[1]={{7,9,11},{8,10,12},{9,11,13}} In[2]:=t[[2]]
Out[2]={8,10,12}
对于表的操作Mathematica提供了丰富的函数,详细的可以查阅后面的附录或者系统帮助。
2.5 表达式
1.表达式的含义
Mathematica 能处理数学公式,表以及图形等多种数据形式。尽管他们从形式上看起来不一样,但在Mathematica内部都被看成同种类型,即都把他们当作表达式的形式。Mathematica 中的表达式是由常量、变量、函数、命令、运算符和括号等组成,它最典型的形式是f[x,y]。
2.表达式的表示形式
在显示表达式时,由于需要的不同,有时我们需要表达式的展开形式,有时又需要其因子乘积的形式。在我们计算过程中可能得到很复杂的表达式,这时我们又需要对它们进行化简。常用的处理这种情况的函数就是变换表达式表示形式函数。
Expand[expr] 按幂次升高的顺序展开表达式 Factor[expr] 以因子乘积的形式表示表达式
Simplify[expr] 进行最佳的代数运算,并给出表达式的最少项形式 表达式(x+y) 4 (x+y 2 ) 展开: In[1]:=Expand[(x+y)^4*(x+y^2)]
Out[1]=x 5 +4x 4 y+6x 3 y 2 +x 4 y 2 +4x 2 y 3 +4x 3 y 3 +xy 4 +6x 2 y 4 +4xy5 +y 6 还原上面的表达式为因子乘积的形式: In[2]:=Factor[%]
Out[2]=(x+y) 4 (x+y 2 )
多项式表达式的项数较多,比较复杂,在显示时显得比较杂乱,而且在计算过程中没有必要知道全部的内容;或表达式的项很有规律,没有必要打印全部的表达式的结果,Mathematica提供了一些命令,可将它缩短输出或不输出。
expr//Short 或 Short[expr] 显示表达式的一行形式
Short[expr,n] 显示表达式的n行形式,命令后加一分号“;” 不输出结果 将表达式(1+x) 30展开,并仅显示一行有代表项的式子: In[3]:=Expand[(1+ x)^30]//Short
Out[3]=1+30x+435x 2 +4060x 3 +<<23>>+4060x 2 7 +435x 2 8 +30x 2 9 +x 3 0 将上式分成三行的形式展开: In[4]:=Short[Expand[(1+ x)^30],3]
Out[4]=1+30x+435x 2 +4060x 3 +27405x 4 +
142506x 5 +<<19>>+142506x 2 5 +
27405x 2 6 +4060x 2 7 +435x 2 8 +30x 2 9 +x 3 0
把代数表达式变换到你所需要的形式没有一种固定的模式,一般情况下,最好的办法是进行多次实验,尝试不同的变换并观察其结果,再挑出你满意的表示形式。
3.关系表达式与逻辑表达式
我们已经知道“=”表示给变量赋值。现在我们来学习一些其它的逻辑与关系算子。关系表达式是最简单的逻辑表达式,我们常用关系表达式表示一个判别条件。例如:x>0,y=0。关系表达式的一般形式是:表达式+关系算子+表达式。其中表达式可为数字表达式、字符表达式或意义更广泛的表达式,如一个图形表达式等。在我们实际运用中,这里的表达式常常是数字表达式或字符表达式。下面出Mathematica中的各种关系算子:
x==y 相等 x!=y 不相等 x>y 大于
x>=y 大于等于 x 下面是比较两个表达式的大小: In[3]:=3^2>y+1 上面已设y=9 Out[3]= False 用一个关系式只能表示一个判定条件,要表示几个判定条件胡组合,必须用逻辑运算符将关系表达式组织在一起,我们称表示判定条件的表达式为逻辑表达式。 下面是常用的逻辑运算和它们的意义: ! 非 && 并 || 或 Xor 异或 If 条件 LogicalExpand[expr] 展开逻辑表达式 例如下面的例子说明它们的应用: In[4]:=3*x^2 (term) 圆括号用于组合运算 f[x] 方括号用于函数 { } 花括号用于列表 [[i]] 双括号用于排序 % 代表最后产生的结果 %% 倒数第二次的算结果 %%%(k) 倒数第k次的计算结果 %n 例出行Out[n]的结果(用时要小心) 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- awee.cn 版权所有 湘ICP备2023022495号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务