矩阵和标量相乘是矩阵中的每个元素与此标量相乘。
3. 矩阵除法
在MATLAB中有两种矩阵除法运算:\\和/,分别表示左除和右除。如果A矩阵是非奇异方阵,则A\\B和B/A运算可以实现。A\\B等效于A的逆左乘B矩阵,也就是inv(A)*B,而B/A等效于A矩阵的逆右乘B矩阵,也就是B*inv(A)。对于矩阵运算,一般A\\B≠B/A。
4. 矩阵的乘方
一个矩阵的乘方运算可以表示成A^x,要求A为方阵,x为标量。例如: A=[1,2,3;4,5,6;7,8,0]; A^2 ans=
30 36 15 66 81 42 39 54 69 显然,A^2即A*A。
5. MATLAB的常用矩阵运算函数 (1)size()函数
size()函数用于计算矩阵的行数和列数,其调用格式为: [m,n]=size(a) 将矩阵a的行数赋值给m、列数赋值给n 例如,运行如下命令: a=[1 3 5 7 9
2 4 6 8 10];
[m,n]=size(a) 运行结果为: m= 2 n= 5
(2)length()函数
length()函数用于计算矩阵的长度(列数),调用格式为: a=length(b) 将矩阵b的列数赋值给变量a
例如,运行如下命令: b=ones(1,100); a=length(b) 运行结果为: a= 100
14
3. prod()函数
prod()函数用于实现矩阵元素的求积运算,其调用格式为: ? prod(a) 若a为向量,则该调用格式将计算出向量a所有元素之积。若a为矩阵,则该调用格式将产生一行向量,其元素分别为矩阵a的各列元素之积。
? prod(a,k) 该调用格式将对矩阵a按k定义的方向进行求积运算,若k=1则按列的方向求积,若k=2则按行的方向求积。
例如,运行如下命令: b=[1 1 1 1 2 2 2 2
3 3 3 3]; p1=prod(b) p2=prod(b,2) 运行结果为: p1=
6 6 6 6 p2= 1 16 81
4. sum()函数
sum()函数用于实现矩阵元素的求和运算,其调用格式与prod()函数类似。 5. max()函数
max()函数用于求出矩阵元素的最大值,其调用格式为:
? max(a) 若a为向量,则该调用格式将求出向量a所有元素中的最大值。若a为矩阵,该调用格式将产生一行向量,其元素分别为矩阵a的各列元素的最大值。
? max(a,k) 该调用格式将对矩阵a按k定义的方向求最大值,若k=1则按列的方向求最大值,若k=2则按行的方向求最大值。
另外,与max()相类似的函数还有min()(求最小值)和mean()(求平均值)函数,它们的调用格式与max函数完全相同。
(6)fliplr()函数
fliplr()函数用于实现矩阵的反折运算,即调用格式为: a=fliplr(b)
该命令将产生维数与矩阵b相同的矩阵a,其元素是由矩阵b的元素按列的方向进行反折而得。例如,执行:
b=0:10 a=fliplr(b) 则结果为: b=
15
0 1 2 3 4 5 6 7 8 9 10 a=
10 9 8 7 6 5 4 3 2 1 0
2.6 数组运算
在MATLAB中,数组和矩阵是两个完全不同的概念,它们遵循着不同的运算规则。MATLAB中数组运算符由矩阵运算符前面加一点“.”来表示,如.*、./、.^等。
1. 数组的加和减
数组的加减运算与矩阵的加减运算相同。
2. 数组的乘和除
数组的乘法用符号.*表示。如果A、B两数组具有相同的维数,则A.*B表示A和B单个元素之间的对应相乘。例如:
x=[1 2 3];y=[4 5 6]; z=x.*y z=
4 10 18
数组的除法用符号./或.\\表示。如果A、B两数组具有相同的维数,则A./B表示A数组的元素除以B数组的对应元素。B.\\A等价于A./B。例如:
x=[1 2 3];y=[4 5 6]; z1=x./y z2=y.\\x 输出分别为:
z1=
0.2500 0.4000 0.5000 z2=
0.2500 0.4000 0.5000 3. 数组的乘方
数组的乘方用符号“.^”表示。若两个数组的维数一致,则两数组对应元素进行乘方运算,例如:
x=[1 2 3];y=[4 5 6]; z=x.^y z=
1 32 729
指数可以是标量,底也可以是标量。例如: x=[1 2 3]; z=x.^2
16
z=
1 4 9
x=[1 2 3];y=[4 5 6]; z=2.^[x y] z=
2 4 8 16 32 64
2.7 多项式及其运算
MATLAB提供了标准多项式的常用函数,包括求根、相乘、相除等。 1.多项式的表达与创建
MATLAB采用将多项式系数按降幂次序排列形成的行向量来表征一多项式。设多项式为:
A(S)=anSn+an-1Sn-1+?+a1S+a0
则表征该多项式的行向量为:P=[an an-1 ? a1 a0]。
因此,在MATLAB中,创建多项式即可用创建行向量的方法,直接输入按顺序排列的多项式系数即可。例如,输入语句:
A=[2 2 1 1];
即表示创建多项式2S3+2S2+S+1, 并赋值给变量A。
2.多项式求根
MATLAB提供的roots函数用于求多项式的全部根。其调用格式为:X=roots(A)。 例:试用roots函数求多项式x4+8x3-10的根。 其MATLAB命令为: A=[1 8 0 0 –10]; X=roots(A) X=
-8.0194
-0.5075+0.9736i -0.5075-0.9736i 1.0344
3. 由指定根求多项式
函数poly用于由指定根求多项式系数向量,调用格式为: A=poly(p)
其中p为多项式根(行或列向量表示),A为返回的多项式系数(行向量表示)。例如
p=[2 1]; %指定多项式的根为2和1 poly(p) %求满足指定根的多项式 ans=
17
1 -3 2
可见roots()与poly()互为逆运算。
4.多项式相乘(卷积)
函数conv()用于求两个多项式的乘积多项式,其调用格式为: R=conv(A,B)
其中A、B分别为表征两个多项式的行向量,R为返回的乘积多项式的系数向量(按降幂次序排列)。例如:
A=[1 3 2]; %创建多项式S2+3S+2 B=[1 2 1]; %创建多项式S2+2S+1
R=conv(A,B) %求多项式A与B的乘积多项式 R=
1 5 9 7 2
5.多项式相除(解卷积)
函数deconv()用于进行两个多项式的相除运算,它是相乘运算(conv)的逆运算,其调用格式为:
[B,t]=deconv(R,A)
其中R为被除多项式,A为除数多项式,B为商多项式,t为余多项式。即多项式R除以多项式A后得商多项式B和余多项式t。例如:
R=[1 5 9 7 2]; %创建多项式s4+5s3+9s2+7s+2 A=[1 2 3]; %创建多项式s2+2s+3
[B,t]=deconv(R,A) %求多项式R除以多项式A后的商多项式B和余多式
t
B=
1 3 0 t=
0 0 0 -2 2
若余多项式系数向量为零向量,则表示R能被A除尽。
18