第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:函数的输出参数个数.