matlab 共轭转置_Matlab系列之矩阵秀

72ea1afb28a91f4363b7aa30c71eb66a.gif

1

前言

上次讲完了数组的基本操作,不知道是否熟悉使用了,本篇将要对矩阵部分的操作再进行介绍,这部分的内容我觉得蛮有意思的,不过你们觉不觉得我就不知了,但还是想让你们可以感受到它的有趣之处。

~Show Time~

2

矩阵秀

对于矩阵的操作,通俗点说就是行列之间变来变去,当然这只是很浅面的一个体现,学过线性代数相关课程的,我想,你对矩阵的内容应该都有所了解,其在MATLAB中的精髓就等我一一揭开了~

1、转置

转置是个很好理解的东西,就是相当于将原本的行列转了一下,行列之间的关系做了对调,还没懂?那直接看实例来了解了解:

f59edddfdef55152e12d5b34864a21a7.png

看到了吧,简单来看,转置就是把横着的行变成了竖的,MATLAB中的转置,就是直接在变量后加一个单引号,就如例子里面的A',如果A是一个复数矩阵,那么这时候的A'就相当于是共轭矩阵,来个例子看看效果

代码:

re=[1:5];im=[6:10];A=re+i*imB=A'

运行结果:

8eab95cde4f2e2e2dfd548ca760ea154.png

如果要弄成非共轭矩阵,就需要采用 A.' 这种形式,更改代码后,运行结果:

39207924e36890744261c2b9acd67369.png

矩阵转置的部分就讲到这,接着开始说下矩阵重排的操作。

094c6033d094ed22230da1b9a7f533ab.gif

2、重排

对于矩阵重排这个名字,你可能会有点陌生,但是讲完后,你就肯定可以知道这个名字为什么要叫这个名了。

对于已经存在的矩阵,都可以根据存储的方式进行重排,就是将原本的行列按照自己设定的行列数进行重新排列,但是也需要按照规则进行,直接上实例,看图:

802a932ca15ad4cbf74b01d8f28879c0.png

先是直接产生一个3行2列的矩阵A,然后使用冒号的功能,直接变成了只有一列的矩阵B,最后使用reshape函数将矩阵A变成了2行3列的新矩阵C,且从中都可以看到,他们都是按列的顺序进行重新排列,第一列排完了才接着下一列的数据。

注意:reshape不能改变原矩阵的元素数目。

顺便来秀一个小操作,重新赋值感觉有点用,也相当于是构成新矩阵了,直接看图进行了解吧,我就不分析了,学会了已经记录的文章,分析就很简单了:

11fcee0b7d08b69795c43e038663a543.png

当然,除了这种粗暴的赋值以外,还有一种温柔的赋值,可以对矩阵的单个元素进行重新赋值的操作,比如将刚刚的A的5变成555,看操作:

9808f770c677c9ce9b79604c610c7cbb.png

这种基本上就是直接按照自己的意愿来改变原矩阵中特定行列的值,假如你想说,改变不在矩阵中的行列,行不行?

可以很肯定的告诉你,行!

来看下运行结果:

97aba66516c9383db180461bdb98d717.png

看到结果,是不是猜到作用了,就是很粗暴的将原矩阵进行扩展,直到实现了你想要改变的值,其余扩展部分的值就全部赋为0。

094c6033d094ed22230da1b9a7f533ab.gif

3、拆分

看到标题名字,你也应该猜到要讲的内容是怎样的了,很明显,就是将一个大的矩阵拆掉,然后获得一个子矩阵,在进行拆分之前还需要了解一个比较重要的点,就是要清楚的了解元素的序号,该序号和下标是一一对应的,上次文章中的寻址已经有所介绍,这次再进行说明一番,和刚刚的重排一个样,都是按列进行的,序号是按列进行编号,先第一列,再第二列,依此类推,例如:

b7e6968fc0b2d27db1dd1f881dad1f83.png

序号和下标的对应关系也已经说过,以一个m x n 的矩阵A为例,A(i,j)表示第i行j列的元素,其序号就是:(j-1)*m+i,当然你也可以直接一列一列的数b0d170fb65f329c5db94eef37763c134.pngb0d170fb65f329c5db94eef37763c134.pngb0d170fb65f329c5db94eef37763c134.pngb0d170fb65f329c5db94eef37763c134.pngb0d170fb65f329c5db94eef37763c134.png

不过很显然,还有更快进行关系转换的工具,两个函数,分别用于下标转序号(sub2ind)和序号转下标(ind2sub),看下使用结果:

1c5f01fde2c1a78605077648d31de3f9.png

简单说下结果,A是一个3行2列的矩阵,然后用sub2ind将A矩阵2行2列的元素的下标转换成序号,再用ind2sub将矩阵A中序号为4的元素下标表示出来,并分别用i和j存该序号对应元素的行列标号。

回到本标题的正式内容,拆分~

拆分的形式主要可与分成两种;

第一种

第一种已经出现过很多次了,就是使用冒号来获得子矩阵。

A(i,:)表示取矩阵A第i行的全部元素;

A(:,j)表示取矩阵A第j列的全部元素;

A(i:i+m,:)表示取矩阵A第i~i+m行的全部元素;

A(:,k:k+n)表示取矩阵A第k~k+n列的全部元素;

A(i:i+m,k:k+n)表示取矩阵A第i~i+m行,第k~k+n列的全部元素。

直接演示几个看下结果:

9b756ea3954c143398b3a1f0d673a870.png

刚刚开始讲到的A(:)直接将矩阵中的元素排成一个列向量也属于拆分的一种形式,如果忘了就翻到上面再看看。

除了以上几种使用具体的维数,来获得子矩阵的方法外,还可以和end运算符结合起来获取子矩阵,end在以前的篇章中也有过介绍,就是代表所在维的最后一行或者最后一列,继续用这个A矩阵来简单看下使用后的结果:

d3a12416863c8f08f787c044b9da51b5.png

094c6033d094ed22230da1b9a7f533ab.gif

第二种

在MATLAB中,[ ]代表一个空矩阵,如果给某个变量X直接赋值为空矩阵,则只需要X=[ ],这种矩阵的维度是0,因此可以使用这种方法将某个大矩阵中的一些元素删除,但然后得到一个新的矩阵,直接看操作:

90e127102dae44c2130bd1a451467496.png

094c6033d094ed22230da1b9a7f533ab.gif

4、拼接

既然矩阵有拆分,当然也可以有拼接,即将多个矩阵拼成一个矩阵,拼接的方法就是使用[ ],比如要将B和C拼成A,就可以这样:A=[B,C];也可以A=[B; C];这两个的区别就是拼接的方向不同,前面的是水平方向拼接即行方向,后面的是垂直方向拼接即列方向;因此要注意对应方向的维度要一致。

举个简单的实例对比下就知道了,先产生两组列数相同,行数不同的矩阵。

b2a69c5d3b2df866bd4db2660c172b66.png

然后进行拼接:

a2321d4a6fe228e096c075438e6d4e26.png

很显然,列方向进行拼接就可以,行方向拼接就不行。

此外还要一些函数也可以实现拼接的功能,如cat,调用格式:C=cat(dim,A,B)

其中dim就是拼接方向,A和B就是待拼接的矩阵,C就是拼接后的矩阵,当然也可以使用多个矩阵进行,比如C=cat(dim,A,B,D,....)

简单演示下:

ac6b31392704f1d5470676a3e2121052.png

从结果看得出来,dim为1是按列拼接,为2是按行拼接。

以下列出一些拼接相关的函数,不过感觉不太常用,可以自己摸索下使用:

函数

功能

cat

拼接矩阵

horcat

水平方向拼接多个矩阵

vercat

垂直方向拼接多个矩阵

remat

复制一个矩阵到另一个矩阵

blkdiag

对角连接多个矩阵

094c6033d094ed22230da1b9a7f533ab.gif

5、变换

在MATLAB中还提供了一些变换函数,可以将矩阵变成想要的形式的,如rot90,tril,triu,fliplr,flipud等,做一两个演示,先产生一个3维的矩阵,然后对其做指定的变换:

f7f19a4951b89254afc410a0aeb0544a.png

9450b46ca3b00a193f848a2b15436765.png

094c6033d094ed22230da1b9a7f533ab.gif

图片里有些数据多的,图片的内容就弄得比较小了,应该是不影响阅读感d3a2d7027132a2f5b791d95012648a2d.pngd3a2d7027132a2f5b791d95012648a2d.pngd3a2d7027132a2f5b791d95012648a2d.pngd3a2d7027132a2f5b791d95012648a2d.pngd3a2d7027132a2f5b791d95012648a2d.png

7a1c8d254b816534bdc9d0861937cf78.gif

阅读本文共使用 b2745df89d12e804003024170e565f84.gif 45344f64db35c81747a14e1c859d18f2.gif d60b5a0d9b16369e043e81b74c5999fc.gif 44a0ae6206f0ff98b5397f0e0bfd9ce9.gif

60e40aca1e9bf4a0a15093f85bed6cb3.gif

8f8711ed871644cdc7f0993fe2141680.gif

5fc351cf9104d55451337101c825fd7b.png

60e40aca1e9bf4a0a15093f85bed6cb3.gif

3b10c98fcd7a462d963be28688427b36.gif

电子知识

一些电路设计与DIY作品

电子设计技巧与经验

FPGA

System Generator系列教程

算法介绍

通信协议分析

资料分享

Matlab系列记录

建设中~

1c383b1e9da4605fbe40d11d1396b1b4.gif

点个赞

230671ad41de0ee89c4c9ff77ed1a288.gif

再走吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值