Matlab基础之矩阵的创建,操作和运算

Matlab基础之矩阵的创建,操作和运算

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

相关数据

炉石传说芬利爵士怎么用?百搭卡牌!
28365365体育官网

炉石传说芬利爵士怎么用?百搭卡牌!

📅 07-10 👁️ 7763
什么烟可以扫码领积分茅台,云南印象烟可以积分吗
28365365体育官网

什么烟可以扫码领积分茅台,云南印象烟可以积分吗

📅 08-09 👁️ 6792