您的位置:首页 > 编程语言 > MATLAB

数学建模与MATLAB-7

2020-07-14 10:18 260 查看

前言

上一篇文章,我们看了矩阵是如何创建的。今天我们来看看矩阵的一些基本的操作!
事情仿佛逐渐有趣起来了。。。

矩阵的基本操作

在MATLAB中矩阵是重要的计算单元,所以有着很多的矩阵操作相关的函数。今天我们今天来看矩阵常用的矩阵扩展、块操作、转置、旋转及翻转还有改变矩阵的大小等。

一、矩阵的扩展

在MATLAB中,可以通过数组的扩展,将多个小矩阵转换为大矩阵。实现数组连接的函数有cat(),vertcat(),horzcat()。

C=cat(DIM,A,B):该函数实现AB两个矩阵在DIM维度上的连接,返回值为连接后的矩阵。

C=vertcat(A,B):该函数在水平方向上连接数组AB,相当于cat(1,A,B)

C=horzcat(A,B): 该函数在垂直方向上连接数组AB,相当于cat(2,A,B)

我们来看一下相关的例题:

clear all;
A=[1:4;5:8]
B=[1:2;3:4]
C=cat(2,A,B)
D=horzcat(A,B)
E=vertcat(A,B)

结果为:
A =

1     2     3     4
5     6     7     8

B =

1     2
3     4

C =

1     2     3     4     1     2
5     6     7     8     3     4

D =

1     2     3     4     1     2
5     6     7     8     3     4

错误使用 vertcat
要串联的数组的维度不一致。

出错 chap3_30 (line 9)
E=vertcat(A,B)

C和D的结果是完全一样的,
而E由于AB两矩阵的列数不满足相同,所以会报错。

二、矩阵的块操作

在MATLAB中,通过函数repmat()、函数blkdiag()和函数kron()进行矩阵的块操作。下面我们会分别进行介绍!

1、函数repmat()

在MATLAB中,通过repmat()进行数据块的复制,该函数的调用形式为:
B=repmat(A,m,n):该函数产生大的矩阵B,把矩阵A当成单个元素,组成由m行n列A组成的大矩阵B。
B=repmat(A,m):该函数产生大的矩阵B,把矩阵A当成单个元素,组成由m行m列构成的大矩阵B。

我们来看一个示例:

clear all;
A=magic(3)
B=repmat(A,2,3)
C=repmat(A,[2,3])

运行结果为:

由A建立三行三列的魔术矩阵,然后B以A为基本元素构成一个两行三列的矩阵,B和C是完全相同的。

2、函数blkdiag()

在MATLAB中,使用blkdiag()将多个矩阵作为对角块产生新的矩阵。该函数的调用格式为:
Y=blkdiag(A,B):该函数将矩阵AB作为对角块,产生新的矩阵Y。
Y=blkdiag(A,B,…):该函数将多个矩阵作为对角块,产生新的矩阵Y。

这里我们来看一个示例:

clear all;
A=magic(3)
B=[1:2;3:4]
C=blkdiag(A,B)
D=blkdiag(B,A)

其结果为:
A =

8     1     6
3     5     7
4     9     2

B =

1     2
3     4

C =

8     1     6     0     0
3     5     7     0     0
4     9     2     0     0
0     0     0     1     2
0     0     0     3     4

D =

1     2     0     0     0
3     4     0     0     0
0     0     8     1     6
0     0     3     5     7
0     0     4     9     2

由上面示例及其结果,我们可以清楚的明白,除了对角块其他的地方赋值为“0”。

三、矩阵中元素的删除

在MATLAB中利用空矩阵来删除矩阵中的元素。在MATLAB中,空矩阵为一对方括号。矩阵赋值为空矩阵的语句是x=[]。注意x=[]和clear x不同, clear x是将x从工作空间中删除,而空矩阵存在于工作空间中,只是维数为“0”。

我们给出一个例子来看一下:

clear all;
A=rand(4,4)
A([1 3],:)=[]
A(:,end)=[]

其结果为

第二行的代码实际上是创建了一个四行四列的矩阵,而第三行的代码的意识是将矩阵A中第一行和第三行的代码为空。第四行代码是将矩阵中的最后一列进行删除。

四、矩阵的转置

在MATLAB中进行矩阵的转置,最简单的方法是采用转置操作符(’),从而实现矩阵A的Hermitian(厄米特共轭的)转置为A’。如果矩阵中含有复数,则进行转置后,复数转化为共轭复数。
矩阵真正的转置为A.’ ,即便为复数,也不转换为共轭。也可采用函数transpose(A)来实现,两者完全一致。

我们来看一个示例:

clear all;
A=rand(2,4)
A1=A'
A2=transpose(A)
B=[2+3i,4+5i,3;2 4+i 5+3*i]
B1=B'
B2=B.'
B3=ctranspose(B)

结果为:
A =

0.2769    0.0971    0.6948    0.9502
0.0462    0.8235    0.3171    0.0344

A1 =

0.2769    0.0462
0.0971    0.8235
0.6948    0.3171
0.9502    0.0344

A2 =

0.2769    0.0462
0.0971    0.8235
0.6948    0.3171
0.9502    0.0344

B =

2.0000 + 3.0000i 4.0000 + 5.0000i 3.0000 + 0.0000i
2.0000 + 0.0000i 4.0000 + 1.0000i 5.0000 + 3.0000i

B1 =

2.0000 - 3.0000i 2.0000 + 0.0000i
4.0000 - 5.0000i 4.0000 - 1.0000i
3.0000 + 0.0000i 5.0000 - 3.0000i

B2 =

2.0000 + 3.0000i 2.0000 + 0.0000i
4.0000 + 5.0000i 4.0000 + 1.0000i
3.0000 + 0.0000i 5.0000 + 3.0000i

B3 =

2.0000 - 3.0000i 2.0000 + 0.0000i
4.0000 - 5.0000i 4.0000 - 1.0000i
3.0000 + 0.0000i 5.0000 - 3.0000i

这个看起来很长很麻烦,但是只要细心地去观察,我们还是能够很好地理解这个知识点的

五、矩阵的旋转

在MATLAB中,矩阵的旋转可以用转置的方式,也可以采用函数rot90(),该函数的调用格式为:

B=rot90(A):该函数将矩阵逆时针旋转90度。
B=rot90(A,k):该函数将矩阵逆时针旋转90度的k倍,k的默认值为1。

我们来给出一个示例参考一下:

clear all;
A=rand(3,4)
B=rot90(A)
C=rot90(A,2)
D=rot90(A,4)

结果为:
A =

0.4387    0.7952    0.4456    0.7547
0.3816    0.1869    0.6463    0.2760
0.7655    0.4898    0.7094    0.6797

B =

0.7547    0.2760    0.6797
0.4456    0.6463    0.7094
0.7952    0.1869    0.4898
0.4387    0.3816    0.7655

C =

0.6797    0.7094    0.4898    0.7655
0.2760    0.6463    0.1869    0.3816
0.7547    0.4456    0.7952    0.4387

D =

0.4387    0.7952    0.4456    0.7547
0.3816    0.1869    0.6463    0.2760
0.7655    0.4898    0.7094    0.6797

这个应该是非常好理解的!

六、矩阵的翻转

对矩阵实施左右翻转是将矩阵的第一列与最后一列进行调换,第二列与倒数第二列进行调换,以此类推。在MATLAB中,对矩阵实行左右翻转使用函数fliplr(A)。
对矩阵进行上下翻转是将矩阵的第一行和最后一行进行调换,第二行与倒数第二行进行调换,以此类推。在MATLAB中,对矩阵实行上下调换使用函数flipud(A)。
此外还可以使用函数flipdim(A)进行矩阵的翻转,该函数的调用格式为flipdim(A,k),该函数在指定方向进行矩阵调换,例如k=1时,就像相当于flipud(A),k=2时,就相当于fliplr(A)。

下面我们来看一个示例:

clear all;
A=rand(3,4)
B=fliplr(A)
C=flipud(A)
D=flipdim(A,1)
E=flipdim(A,2)

结果为:
A =

0.6551    0.4984    0.5853    0.2551
0.1626    0.9597    0.2238    0.5060
0.1190    0.3404    0.7513    0.6991

B =

0.2551    0.5853    0.4984    0.6551
0.5060    0.2238    0.9597    0.1626
0.6991    0.7513    0.3404    0.1190

C =

0.1190    0.3404    0.7513    0.6991
0.1626    0.9597    0.2238    0.5060
0.6551    0.4984    0.5853    0.2551

D =

0.1190    0.3404    0.7513    0.6991
0.1626    0.9597    0.2238    0.5060
0.6551    0.4984    0.5853    0.2551

E =

0.2551    0.5853    0.4984    0.6551
0.5060    0.2238    0.9597    0.1626
0.6991    0.7513    0.3404    0.1190

通过上面的讲解,这个示例应该是非常好理解的!

七、矩阵尺寸的改变

在矩阵总元素保持不变的情况下,在MATLAB中,我们才使用函数reshape()来改变矩阵的尺寸。该函数的调用格式为Y=reshape(A,m,n),将矩阵转换为m行n列的二维矩阵,矩阵的总元素不变。

下面我们用一个简单的示例来看一下

clear all;
X=[1:4;5:8]
Y1=reshape(X,1,8)
Y2=reshape(Y1,[4,2])
Y3=reshape(X,size(Y2))

结果为
X =

1     2     3     4
5     6     7     8

Y1 =

1     5     2     6     3     7     4     8

Y2 =

1     3
5     7
2     4
6     8

Y3 =

1     3
5     7
2     4
6     8

通过上面的示例,我想我们应该看出,矩阵是按“列”进行排列的

总结

本文我们主要谈了矩阵的一些基本操作,难度也不大。其实就我来看吧,MATLAB整体都是非常简单的,困难的是如何熟练的运用和对于繁杂而强大的工具箱的运用!!而克服困难的关键则在于日复一日的记忆和使用,所谓熟能生巧!!

都这么暗示了,还不赶紧点赞收藏

本文将于近期不断更新,欢迎大家交流指正吐槽!!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: