数学建模与MATLAB-7
前言
上一篇文章,我们看了矩阵是如何创建的。今天我们来看看矩阵的一些基本的操作!
事情仿佛逐渐有趣起来了。。。
矩阵的基本操作
在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整体都是非常简单的,困难的是如何熟练的运用和对于繁杂而强大的工具箱的运用!!而克服困难的关键则在于日复一日的记忆和使用,所谓熟能生巧!!
都这么暗示了,还不赶紧点赞收藏
本文将于近期不断更新,欢迎大家交流指正吐槽!!
- 留学生作业代写 编程代写 有偿代写 python matlab数学建模 机器学习 深度学习 c# c++ 数学 算法 论文程序代写
- 数学建模 matlab 数据建模基础
- 【数学建模集训系列】公交查询系统的matlab实现-只含公交的查询
- 【数学建模集训系列】Matlab相机标定工具箱TOOLBOX_calib翻译-TOOLBOX_calib简介
- Matlab--数学建模
- 2017年研究生数学建模竞赛-E题 MATLAB 作战区域道路示意图
- 数学建模 matlab 数据的拟合和回归
- 2011年数学建模B题 遗传算法优化平台设置matlab实现
- 大数据分析/数学建模-MATLAB多套视频教程合集+200多本MATLAB技术文档+电子书
- 【数学建模】图与网络 提纲 & matlab代码
- 数学建模(matlab)学习笔记--线性规划
- 数学建模与MATLAB-10
- 数学建模专栏 | 开篇:如何备战数学建模竞赛之 MATLAB 编程
- 【数学建模】MATLAB学习笔记——函数式文件
- 数学建模 MATLAB MATLAB全局优化算法
- 数学建模 - 01背包问题多种解法 | C语言、Matlab、Lingo
- matlab gui--数学建模长江水质的查询
- 【转载】数学建模——MATLAB寻找最短路径(Dijkstra算法和Floyd算法)
- 数学建模常用Matlab/Lingo/c代码总结系列——最小费用最大流问题
- 数学建模常用Matlab/Lingo/c代码总结系列——非线性拟合