本博客讲述matlab矩阵的创建,操作和各种运算,作为本人学习总结和今后编码的查阅文档,文中所述为本人见解,因作者水平原因,可能有不妥之处,请谅解!
矩阵的创建方法
使用方括号,逗号用于分隔每一行中的元素,分号表示换行:
代码:
a=[1,2,3;4,5,6;7,8,9];
结果:
>> a=[1,2,3;4,5,6;7,8,9]
a =
1 2 3
4 5 6
7 8 9
使用冒号方法生成:
代码:
% mat=start:step:end,结果包括end,step如果是1的话,可以省略
b=1:1:10;
% 或者可以写成:
b=1:10;
结果:
>> b=1:1:10
b =
1 2 3 4 5 6 7 8 9 10
使用matlab提供的一系列函数生成对应矩阵
linspace(开始,结束,元素个数),用于等差生成一维数组,默认生成100个。eye(dim),生成特定维度的单位矩阵zeros(size1,size2),生成对应size的全零矩阵ones(size1,size2),生成全1矩阵rand(dim),生成特定维度的随机矩阵,元素的值范围为(0,1)randn(dim),生成特定维度的服从正态分布的随机矩阵。
代码:
e=eye(4); %生成4维单位矩阵
z=zeros(1,4); % 生成1行4列的全零矩阵
o=ones(4,1); % 生成4行1列的全1矩阵
r=rand(4); % 生成4*4的0-1范围内的随机矩阵
rn=randn(4); % 生成4*4的均值为0,方差为1的高斯分布随机矩阵。
结果:
>> e=eye(4)
e =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
>> z=zeros(1,4)
z =
0 0 0 0
>> o=ones(4,1)
o =
1
1
1
1
>> r=rand(4)
r =
0.8147 0.6324 0.9575 0.9572
0.9058 0.0975 0.9649 0.4854
0.1270 0.2785 0.1576 0.8003
0.9134 0.5469 0.9706 0.1419
>> rn=randn(4)
rn =
-0.1241 0.6715 0.4889 0.2939
1.4897 -1.2075 1.0347 -0.7873
1.4090 0.7172 0.7269 0.8884
1.4172 1.6302 -0.3034 -1.1471
矩阵的访问与修改
获取矩阵的相关信息
size(arr):形状信息length(arr):长度信息,相当于max(size(arr))。
代码:
l=length(a);
size_a=size(a);
结果:
>> l=length(a)
l =
3
>> size_a=size(a)
size_a =
3 3
矩阵元素的访问与修改
matrix(row,col) :访问row行,col列的元素,修改可直接加上赋值号。matrix(num) :按照顺序访问,特别注意,matlab一列一列的访问,与其它语言不同。matrix(row,:) :访问第row行的所有元素。matrix(row,:)=[1,2,……] :修改第row行,直接赋值覆盖原值。matrix(row,:)=[] :删除第row行。matrix(:,col) :表示第col列的相关操作,和行一致。
代码:
matrix=[1,2,3,4;5,6,7,8]
matrix(1)
matrix(2)
matrix(3)
matrix(2,4)
matrix(1,:)
matrix(:,1)
matrix(1,1)=100
temp=matrix;
temp(1,:)=[]
temp=matrix;
temp(:,2)=[]
结果:
>> matrix=[1,2,3,4;5,6,7,8]
matrix =
1 2 3 4
5 6 7 8
>> matrix(1)
ans =
1
>> matrix(2)
ans =
5
>> matrix(3)
ans =
2
>> matrix(1,2)
ans =
2
>> matrix(2,4)
ans =
8
>> matrix(1,:)
ans =
1 2 3 4
>> matrix(:,1)
ans =
1
5
>> matrix(1,1)=100
matrix =
100 2 3 4
5 6 7 8
>> temp=matrix;
>> temp(1,:)=[]
temp =
5 6 7 8
>> temp=matrix;
>> temp(:,2)=[]
temp =
100 3 4
5 7 8
矩阵相关操作和运算
矩阵相关操作
矩阵转置:加一个英文的‘即可。diag(a,k):表示a矩阵主对角线上第k条线的元素组成的列向量。tril(a,1):tril(a,k)和triu(a,k+)分别表示下三角矩阵和上三角矩阵,后面的k和上面一致。pinv(a):当a不是方阵的时候,结果是广义逆矩阵。当a是可逆方阵,结果与逆矩阵inv(a) 相同。[v,D]=eig(a):v是特征向量组成的矩阵,D为特征值组成的对角阵,其中av=Dv。det(a):求矩阵a的行列式。rank(a):求矩阵的秩。compan(b):求向量的伴随矩阵。
代码和结果:
>> a=[1,2,3;4,5,6;7,8,9]
a =
1 2 3
4 5 6
7 8 9
>> b=1:5
b =
1 2 3 4 5
>> a'
ans =
1 4 7
2 5 8
3 6 9
>> diag(a,1)
ans =
2
6
>> diag(a,-1)
ans =
4
8
>> diag(a,0)
ans =
1
5
9
>> tril(a,1)
ans =
1 2 0
4 5 6
7 8 9
>> tril(a,0)
ans =
1 0 0
4 5 0
7 8 9
>> triu(a,0)
ans =
1 2 3
0 5 6
0 0 9
>> rank(a)
ans =
2
>> compan(b)
ans =
-2 -3 -4 -5
1 0 0 0
0 1 0 0
0 0 1 0
>> arr=[1,2;3,4]
arr =
1 2
3 4
>> inv(arr)
ans =
-2.0000 1.0000
1.5000 -0.5000
>> pinv(arr)
ans =
-2.0000 1.0000
1.5000 -0.5000
>> det(arr)
ans =
-2
>> [v,D]=eig(arr)
v =
-0.8246 -0.4160
0.5658 -0.9094
D =
-0.3723 0
0 5.3723
矩阵数值相关运算
矩阵乘法,矩阵除法,矩阵加法,矩阵减法,矩阵乘方: matrix*matrix,matrix/matrix,matrix+matrix,matrix-matrix,matrix^2。矩阵对应位置的乘法,除法,乘方: 在*,/,^号的前面加一个.即可。
代码和结果:
>> a=[1,2,3;4,5,6;,7,8,9]
a =
1 2 3
4 5 6
7 8 9
>> a*a
ans =
30 36 42
66 81 96
102 126 150
>> a+a
ans =
2 4 6
8 10 12
14 16 18
>> a-a
ans =
0 0 0
0 0 0
0 0 0
>> a^2
ans =
30 36 42
66 81 96
102 126 150
>> a.*a
ans =
1 4 9
16 25 36
49 64 81
>> a./a
ans =
1 1 1
1 1 1
1 1 1
>> a.^2
ans =
1 4 9
16 25 36
49 64 81
>> arr=[1,2;3,4]
arr =
1 2
3 4
>> arr/arr
ans =
1 0
0 1
多维矩阵和其它操作
矩阵拼接
cat(dim,arr1,arr2):在dim维度上拼接。vertcat(arr,arr):相当于cat(1,arr,arr)。horzcat(arr,arr):相当于cat(2,arr,arr)。[arr;arr]:相当于cat(1,arr,arr)。[arr,arr]:相当于cat(2,arr,arr)。
代码和展示:
>> arr=[1,2,3;4,5,6]
arr =
1 2 3
4 5 6
>> cat(1,arr,arr)
ans =
1 2 3
4 5 6
1 2 3
4 5 6
>> cat(2,arr,arr)
ans =
1 2 3 1 2 3
4 5 6 4 5 6
>> [arr,arr]
ans =
1 2 3 1 2 3
4 5 6 4 5 6
>> [arr;arr]
ans =
1 2 3
4 5 6
1 2 3
4 5 6
>> vertcat(arr,arr)
ans =
1 2 3
4 5 6
1 2 3
4 5 6
>> horzcat(arr,arr)
ans =
1 2 3 1 2 3
4 5 6 4 5 6
维度变换
reshape(matrix,dim1,dim2……):变换matrix的维度,其中dim的乘积为matrix元素的个数,否则会报错squeeze(matrix):压缩矩阵的维度,长度为1的维度会被压缩。
代码和展示:
>> a
a =
1 2 3
4 5 6
7 8 9
>> rs=reshape(a,1,3,3)
rs(:,:,1) =
1 4 7
rs(:,:,2) =
2 5 8
rs(:,:,3) =
3 6 9
>> size(rs)
ans =
1 3 3
>> squeeze(rs)
ans =
1 2 3
4 5 6
7 8 9
多维矩阵创建
直接创建。已有数组上扩展。使用cat对矩阵进行拼接。
代码和展示:
% 直接创建
>> mul_1(:,:,1)=[1,2,3;2,3,4]
mul_1 =
1 2 3
2 3 4
>> mul_1(:,:,2)=[3,4,5;4,5,6]
mul_1(:,:,1) =
1 2 3
2 3 4
mul_1(:,:,2) =
3 4 5
4 5 6
% 在已有数组上扩展
>> mul_2 = [1,2,3;2,3,4]
mul_2 =
1 2 3
2 3 4
>> mul_2(:,:,2) = [3,4,5;4,5,6]
mul_2(:,:,1) =
1 2 3
2 3 4
mul_2(:,:,2) =
3 4 5
4 5 6
% 使用cat函数
>> arr=[1,2,3;4,5,6]
arr =
1 2 3
4 5 6
>> cat(3,arr,arr)
ans(:,:,1) =
1 2 3
4 5 6
ans(:,:,2) =
1 2 3
4 5 6