本博客讲述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