-
1 文档
-
2 PPT
-
3 视频
-
4 小测试
Matlab矩阵主要分三类,包括数值矩阵、符号矩阵和特殊矩阵。建立矩阵,采取多种方式。
1. 逐个元素输入法
直接逐个元素从键盘敲入,同一行元素用逗号或空格分隔,不同行用分号分隔,例如,在命令窗口中输入以下命令,回车后,则立刻显示输出结果。
>> a=[1,2,3;4,5,6;7,8,9]
a =
1 2 3
4 5 6
7 8 9
矩阵元素可以是复数,如图1-4中所示的命令及其结果。
2. 冒号生成法
采用冒号生成法产生一维向量的通用格式:
x=a:step(increase):b
说明:step(increase)为步长,例如:
>> b=1:2:10
显示输出:
b =
1 3 5 7 9
3.“全下标”元素赋值法
例如:输入以下命令,输出结果如下:
>> c(1,10,2)=10
c(:,:,1) =
0 0 0 0 0 0 0 0 0 0
c(:,:,2) =
0 0 0 0 0 0 0 0 0 10
此语句可以理解为产生的新矩阵共有2页,第1页1行10列,第2页同样1行10列,对第2页第1行第10列的元素赋值等于10,其余元素值均为0。
4. 利用函数生成
常用生成矩阵的函数包括:ones、zeros、rand、randn、linspace等。rand函数可产生均匀分布0-1之间的随机数,randn函数用于产生均值为0,方差为1服从正态分布随机数,linspace生成线性等分向量,logspace生成按对数等分向量。例如:
>> a=zeros(3,3); %产生3行3列全0矩阵
a =
0 0 0
0 0 0
0 0 0
>> b=fix(rand(1,10)*100); %产生1行10列0-100之间的随机数,并取整
b =
70 75 27 67 65 16 11 49 95 34
>> c=randn(2,4); %产生2行4列正态分布均值为0,方差为1随机数
c =
0.3714 1.1174 0.0326 1.1006
-0.2256 -1.0891 0.5525 1.5442
>> d=linspace(0,10,11); %生成从0-10,线性等分的含有11个元素的向量
d =
0 1 2 3 4 5 6 7 8 9 10
>> e=logspace(0,2,3); %生成从100 -102按对数等分的3个元素的行向量
e =
1 10 100
>> f=magic(3); %生成3阶魔方矩阵,行、列、对角线上元素的和相等
f =
8 1 6
3 5 7
4 9 2
>> g=eye(3); %生成3阶单位矩阵
g =
1 0 0
0 1 0
0 0 1
>> h=[1 2 3];h=diag(h); %生成向量元素为对角线元素的矩阵
h =
1 0 0
0 2 0
0 0 3
5 .矩阵合并与矩阵行列的删除
矩阵合并是将两个或两个以上的矩阵连接成一个新矩阵,矩阵合并要符合维数的约束。要删除矩阵某行或某列,只需将该行或该列赋予“[]”即可。举例如下:
a=ones(2,3); b=[4 5 6]; c=[a;b]
c =
1 1 1
1 1 1
4 5 6
>> c(2,:)=[] %删除第二行
c =
1 1 1
4 5 6
>> c(:,1)=[] %删除第一列
c =
1 1
5 6
常用改变矩阵结构与矩阵排序函数见表1-2所示。
表1-2 常用改变矩阵结构函数
| 函数名 | 功能 | 函数 | 功能 |
| fliplr | 矩阵左右翻转 | reshape | 重塑矩阵 |
| flipud | 矩阵上下翻转 | transpose | 矩阵的转置 |
| flipdim | 矩阵沿特性维翻转 | ctranspose | 矩阵的共轭转置 |
| rot90 | 逆时针旋转矩阵 | sort | 元素排序 |
下面举例说明函数的使用。
>> a=[1 2 3;4 5 6]
a =
1 2 3
4 5 6
>> fliplr(a)
ans =
3 2 1
6 5 4
>> flipud(a)
ans =
4 5 6
1 2 3
>> flipdim(a,2) %以竖直方向为轴进行镜像
ans =
3 2 1
6 5 4
>> rot90(a,1) %旋转90度
ans =
3 6
2 5
1 4
>> rot90(a,3) %旋转3×90度
ans =
4 1
5 2
6 3
>> reshape(a,3,2) %a重新排列为3×2矩阵
ans =
1 5
4 3
2 6
>>b=[1+i,2+2i,3+3i;4+4i,5+5i,6+6i];
>> transpose(b)
ans =
1.0000 + 1.0000i 4.0000 + 4.0000i
2.0000 + 2.0000i 5.0000 + 5.0000i
3.0000 + 3.0000i 6.0000 + 6.0000i
>> ctranspose(b) %与b'进行比较
ans =
1.0000 - 1.0000i 4.0000 - 4.0000i
2.0000 - 2.0000i 5.0000 - 5.0000i
3.0000 - 3.0000i 6.0000 - 6.0000i
此外,利用“:”将矩阵元素按列取出并排成一列。
>> a(:)'
ans =
1 4 2 5 3 6
排序函数sort可以实现沿矩阵不同维,以升序排列元素。元素如果含有复数,其元素按其模的大小进行排列,模相等时,按区间
上相角进行排序,[a,index]=sort(x),返回矩阵x各列的排序结果及各列上元素的原下标位置值,举例如下:
>> x=[4 1 7 6 9;3 4 7 1 3;7 4 2 1 5;7 6 6 4 2];
x =
4 1 7 6 9
3 4 7 1 3
7 4 2 1 5
7 6 6 4 2
>> [a,index]=sort(x)
a =
3 1 2 1 2
4 4 6 1 3
7 4 7 4 5
7 6 7 6 9
index =
2 1 3 2 4
1 2 4 3 2
3 3 1 4 3
4 4 2 1 1
下面列举几例矩阵元素的赋值与寻访。
>> a=zeros(3,3); %产生3行3列全0矩阵
>> a(2,:)=1; %将第2行全部元素赋值为1
>> a(:,1)=9; %将第1列全部元素赋值为9
>> a(:,3)=[7 8 9]' %将列向量赋给a第3列,“'”表示转置
a =
9 0 7
9 1 8
9 0 9
%显示矩阵a第八个元素,排序按先排第一列元素,再排第二列元素,类推
>> b=a(8)
b =
8
>> c=a(2,3) %显示矩阵a第2行第3列元素
c =
8
>> a(3:end)
ans =
9 0 1 0 7 8 9
>> a([1 2])=6 %给a的第1、2个元素赋值
a =
6 0 7
6 1 8
9 0 9
>> e=[2 0 1 0];
>> find(e) %返回非零元素的下标值
ans =
1 3
>> e(find(e>0.1)) %寻访e中大于0.1的元素
ans =
2 1
下面再介绍一组寻访元素的函数。
>> a=fix(rand(3,3)*10)
a =
2 3 5
6 8 9
4 5 2
>> diag(a) %diag(v,k),省略k 或k= 0代表取主对角线元素
ans =
2
8
2
>> diag(a,1)' %k > 0取主对角线上方对角线元素
ans =
3 9
>> diag(a,-2) % k < 0取主对角线下方对角线元素
ans =
4
>> tril(a) % tril (a),返回下三角阵
ans =
2 0 0
6 8 0
4 5 2
>> tril(a,1) % k > 0取主对角线上方对角线以下元素。
ans =
2 3 0
6 8 9
4 5 2
>> triu(a) % 返回上三角阵
ans =
2 3 5
0 8 9
0 0 2
矩阵运算是按照线性代数运算法则定义的,矩阵作为整体进行运算,有着明确而严格的数学规则。
1. 向量的运算
向量的点积运算函数dot(a,b);向量的叉积运算函数cross(a,b)。例如:
>> a=[2 2 3];b=[4 5 6];c=[9 4 2];
>>dot(a,b),cross(a,b)
ans =
36
ans =
-3 0 2
>> dot(a,cross(b,c)) %向量的混合积
ans =
-23
当向量运算函数的输入变量是矩阵形式时,运算针对列向量进行运算。
>> a=magic(3),b=ceil(randn(3,3))
a =
8 1 6
3 5 7
4 9 2
b =
1 0 0
1 1 1
2 1 -1
>> dot(a,b)
ans =
19 14 5
2. 矩阵的加减乘除运算
矩阵的基本运算包括加、减、乘、除,转置等。矩阵的转置是共轭转置。举例如下:
>> a=ones(3,3); b=magic(3)
b =
8 1 6
3 5 7
4 9 2
>> c=a+b
c =
9 2 7
4 6 8
5 10 3
>> d=a*b %按矩阵相乘的定义进行相乘运算
d =
15 15 15
15 15 15
15 15 15
>> e=[1+i,2+2i,3+3i;4+4i,5+5i,6+6i]
e =
1.0000 + 1.0000i 2.0000 + 2.0000i 3.0000 + 3.0000i
4.0000 +4.0000i 5.0000 + 5.0000i 6.0000 + 6.0000i
>> f=e'
f =
1.0000 -1.0000i 4.0000 - 4.0000i
2.0000 -2.0000i 5.0000 - 5.0000i
3.0000 -3.0000i 6.0000 - 6.0000i
矩阵的除法运算有左除“\”与右除“/”两种,当方程组的矩阵形式为
,如果A是非奇异矩阵,左除A\B是
的解,A\B等于A的逆乘以B。类似,右除A/B是方程组
的解,A/B等于A乘以B的逆。

>> A=[2 1 -5 1;1 -3 0 -6;0 2 -1 2;1 4 -7 6]; B=[8;9;-5;0] ;
>> X=A\B
X =
3.0000
-4.0000
-1.0000
1.0000
>> X=B/A
错误使用 /
矩阵维度必须一致。
矩阵运算A\B与B/A不相同。同样,矩阵运算A/B与B\A也不相同。
3. 矩阵关系运算与逻辑运算
矩阵关系运算符包括:“>”、“>=”、“<”、“<=”、“==”、“~=”。逻辑运算包括:&(与)、|(或)、~(非)。常用逻辑函数有xor、any、all。应用举例如下。
>> a=rand(1,5)
a =
0.7094 0.7547 0.2760 0.6797 0.6551
>> r1=(a>0.5)&(a<0.8)
r1 =
1 1 0 1 1
>> r3=~r1
r3 =
0 0 1 0 0
% all(x),当向量x所有元素非零时,返回1。
>> x=all([1 1 0;1 0 0;1 1 0]) %当x为矩阵时,计算各列向量是否所有元素非零。
x =
1 0 0
%any(x),当向量x中任意元素非零时,返回1。
>> x=any([1 1 0;1 0 0;1 1 0]) %当x为矩阵时,计算各列向量是否有非零元素。
x =
1 1 0
4. 矩阵的基本性质分析
矩阵的性质分析包括:向量和矩阵的范数、矩阵的秩、矩阵的行列式值、矩阵的迹、零空间正交基等。例如:
>> a=ceil(randn(3)) %产生3×3正态分布随机数并取整
a =
2 -2 -1
0 0 1
1 0 1
>>b=norm(a) %计算a的最大奇异值,相当于b=max(svd(a))
b =
3.0381
>> det(a) %求矩阵a行列式值
ans =
-2
>> trace(a) %求矩阵a的迹,即主对角线上元素的和
ans =
3
>> rank(a) %求矩阵a的秩
ans =
3

