数理统计及其在数学建模中的实践(使用MATLAB)
上QQ阅读APP看书,第一时间看更新

第1章 MATLAB基础知识

1.1 基本运算与函数

用MATLAB进行基本数学运算,只需将运算式直接输入提示符(>>)之后,并按<Enter>键即可.例如:

>>(5∗2+1.3-0.8)∗10/25

ans=4.2000

MATLAB会将运算结果直接存入一变量ans中,代表MATLAB运算后的结果将在屏幕上显示其数值.

小提示:">>"是MATLAB的提示符(Prompt),但在PC中文视窗系统下,由于编码方式不同,此提示符常会隐藏,但这并不影响MATLAB的运算结果.

也可将上述运算式的结果设定给另一个变量x:

x=(5∗2+1.3-0.8)∗10^2/25

x=42

此时MATLAB会直接显示x的值.由上例可知,MATLAB内包含一般常用的加(+)、减(-)、乘(∗)、除(/)、幂次运算(^)等数学运算符号.

小提示:MATLAB将所有变量均存成double的形式,所以不需经过变量声明(Varia-ble declaration).

MATLAB同时也会自动进行内存的分配和回收,而不必像C语言那样,必须由用户一一指定.这些功能使得MATLAB易学易用,用户可专心致力于编写程序,而不必被软件本身的枝节问题所干扰.

若不想让MATLAB每次都显示运算结果,只需在运算式最后加上分号(;)即可,如:

y=sin(10)∗exp(-0.3∗4^2);

若要显示变量y的值,直接键入y即可:

>>y

y=-0.0045

在上例中,sin是正弦函数,exp是指数函数,这些都是MATLAB中经常用到的数学函数.

小整理:MATLAB中常用的基本数学函数

abs(x):标量的绝对值或向量的长度;

angle(z):复数z的相角(Phase angle);

sqrt(x):开平方;

real(z):复数z的实部;

imag(z):复数z的虚部;

conj(z):复数z的共轭复数;

round(x):四舍五入至最近整数;

fix(x):无论正负,舍去小数至最近整数;

floor(x):向下取整函数,即舍去正小数至最近整数;

ceil(x):向上取整函数,即加入正小数至最近整数;

rat(x):将实数x化为分数表示;

rats(x):将实数x化为多项分数展开;

sign(x):符号函数(Signum function).

当x<0时,sign(x)=-1;

当x=0时,sign(x)=0;

当x>0时,sign(x)=1.

小整理:MATLAB常用的三角函数

sin(x):正弦函数;

cos(x):余弦函数;

tan(x):正切函数;

asin(x):反正弦函数;

acos(x):反余弦函数;

atan(x):反正切函数;

atan2(x,y):四象限的反正切函数;

sinh(x):双曲正弦函数;

cosh(x):双曲余弦函数;

tanh(x):双曲正切函数;

asinh(x):反双曲正弦函数;

acosh(x):反双曲余弦函数;

atanh(x):反双曲正切函数.

变量也可用来存放向量或矩阵,并进行各种运算,如列向量运算:

x=[1352];

y=2∗x+1

y=37115

小提示:变量命名的规则

(1)第一个字母必须是英文字母;

(2)字母间不留空格;

(3)最多只能有19个字母,MATLAB会自动忽略多余字母.

可以随意更改、增加或删除向量的元素:

y(3)=2 %更改第三个元素

y=3 7 2 5

y(6)=10 %加入第六个元素

y=3 7 2 5 0 1 0

y(4)=[] %删除第四个元素

y=3 7 2 0 1 0

在上例中,MATLAB会忽略所有在百分号(%)之后的文字,因此百分号之后的文字均为程序的注释(Comments).MATLAB亦可取出向量的一个元素或一部分元素来做运算:

x(2)∗3+y(4) %取出x的第二个元素和y的第四个元素来做运算

ans=9

y(2:4)-1% 取出y的第二至第四个元素来做运算

ans=61-1

在上例中,2:4代表一个由2、3、4组成的向量.

若对MATLAB函数用法有疑问,可随时使用help来寻求线上支持(on-line help):help linspace

小整理:MATLAB的查询命令

help:用来查询已知命令的用法.例如已知inv用来计算逆矩阵,输入help inv即可得知有关inv命令的用法.(输入help help则显示help的用法,请试试看!)

lookfor:用来寻找未知的命令.例如要寻找计算逆矩阵的命令,可输入lookfor inverse,MATLAB即列出所有和关键字inverse相关的指令,找到所需的命令后,可用help进一步找出其用法.(lookfor事实上是对所有在搜寻路径下的M文件进行关键字匹配,详见后叙).

小整理:适用于向量的常用函数有:

min(x):向量x的元素的最小值;

max(x):向量x的元素的最大值;

mean(x):向量x的元素的平均值;

median(x):向量x的元素的中位数;

std(x):向量x的元素的标准差;

diff(x):向量x的相邻元素的差;

sort(x):对向量x的元素进行排序(Sorting);

length(x):向量x的元素个数;

norm(x):向量x的欧几里得(Euclidean)长度;

sum(x):向量x的元素总和;

prod(x):向量x的元素总乘积;

cumsum(x):向量x的累计元素总和;

cumprod(x):向量x的累计元素总乘积;

dot(x,y):向量x和y的内积;

cross(x,y):向量x和y的外积.

若要输入矩阵,则必须在每一行结尾加上分号(;),如:

A=[1 2 3 4;5 6 7 8;9 10 11 12];

A=

1 2 3 4

5 6 7 8

9 10 11 12

同样地,我们可以对矩阵进行各种处理:

A(2,3)=5 %改变矩阵中位于第二行,第三列的元素值

A=

1 2 3 4

5 6 5 8

9 10 11 12

B=A(2,1:3) %取出部分矩阵B

B=5 6 5

A=[AB ] %将B转置后以列向量并入A

A=

1 2 3 4 5

5 6 5 8 6

9 10 11 12 5

A(:,2)=[] %删除第二列(:代表所有行)

A=

1 3 4 5

5 5 8 6

9 11 12 5

A=[A;4321] %加入第四行

A=

1 3 4 5

5 5 8 6

9 11 12 5

4 3 2 1

A([14],:)=[]%删除第一行和第四行(:代表所有列)

A=

5 5 8 6

9 11 12 5

小提示:在MATLAB的内部数据结构中,每一个矩阵都是一个以列为主(Column-o-riented)的数组(Array),因此对于矩阵元素的存取,我们可用一维或二维的索引(Index)来寻址.举例来说,在上述矩阵A中,位于第二行、第三列的元素可写为A(2,3)(二维索引)或A(6)(一维索引,即将所有值进行堆叠后的第六个元素).

此外,若要重新安排矩阵的形状,可用reshape命令:

B=reshape(A,4,2)%4是新矩阵的行数,2是新矩阵的列数

B=

5 8

9 12

5 6

11 5

小提示:A(:)就是将矩阵A的每一行堆叠起来,成为一个列向量,而这也是MATLAB变量的内部储存方式.以前例而言,reshape(A,8,1)和A(:)同样都会产生一个8×1的矩阵.

MATLAB可同时执行数个命令,只需用逗号或分号将命令隔开:

x=sin(pi/3);y=x^2;z=y∗10,

z=7.5000

若一个数学运算式太长,可用三个句点将其延伸到下一行:

z=10∗sin(pi/3)∗…

sin(pi/3);

若要检察现存于工作空间(Workspace)的变量,可输入who:

若要了解这些变量的详细资料,可输入:whos

使用clear可以删除工作空间的变量:

clearA

A

???Undefined function or variable A .

另外MATLAB有些永久常数(Permanent constants),虽然在工作空间中不显示,但用户可直接使用,例如:

pi

ans=3.1416

小整理:MATLAB的永久常数

i或j:基本虚数单位;

eps:系统的浮点(Floating-point)精确度;

inf:无穷大,例如1/0nan或NaN:非数值(Not a number),例如0/0;

pi:圆周率(π=3.1415926…);

realmax:系统所能表示的最大数值;

realmin:系统所能表示的最小数值;

nargin:函数的输入参数个数;

nargin:函数的输出参数个数.