草庐IT

Matlab-矩阵

FYBZ2020 2023-07-27 原文

目录

(一)矩阵的操作

1、创建矩阵

​(1)建立简单矩阵

(2)建立特殊矩阵

(3)希尔伯特(Hilbert)矩阵

(4)托普利兹(Toeplitz)矩阵

(5)0~1间均匀分布的随机矩阵

 (6)标准正态分布随机矩阵

(7)魔方矩阵

(8)帕斯卡矩阵

(9)范德蒙(Vandermonde)矩阵

2、矩阵下标的引用

3、改变矩阵的大小和结构

(1)矩阵的合并

(2)矩阵行列的删除

 


(一)矩阵的操作

1、创建矩阵

对矩阵的基本操作,主要有矩阵的构造、矩阵大小及结构的改变、矩阵下标引用、矩阵信息的获取等。对于这些操作,MATLAB中都有固定指令或相应的库函数与之相对应。

矩阵和数组在MATLAB中存在很多方面的区别,主要有以下几个方面:
● 矩阵是数学上的概念,而数组是计算机程序设计领域的概念。
● 作为一种变换或者映射运算符的体现,矩阵运算有着明确而严格的数学规则;而数组运算是MATLAB软件定义的规则,其目的是使数据管理方便,操作简单,命令形式自然,执行计算有效。
        两者间的联系主要体现在:在MATLAB中,矩阵是以数组的形式存在的。因此,一维数组相当于向量,二维数组相当于矩阵,所以矩阵是数组的子集。

矩阵的构造方式有两种,一种与单元数组相似,可以对变量直接进行赋值;

另一种是使用MATLAB中提供的构造特殊矩阵的函数,

 (1)建立简单矩阵

简单矩阵采用矩阵构造符号——方括号“[]”,将矩阵元素置于方括号内,同行元素之间用空格或逗号隔开,行与行之间用分号“;”隔开,格式如下:

分别构造一个二维矩阵、一个行向量、一个列向量

(2)建立特殊矩阵

特殊矩阵是指非零元素或零元素的分布有一定规律的矩阵,常见的特殊矩阵有对称矩阵、三角矩阵和对角矩阵等。 

向量、标量和空矩阵
通常情况下,矩阵包含m行n列,即m×n。当m和n取一些特殊值时,得到的矩阵具有一些特殊的性质。
当m=1或n=1,即1×n或m×1时,建立的矩阵称为向量。例如输入: 当m=n=1时,建立的矩阵称为标量。任意以1×1的矩阵形式表示的单个实数、复数都是标量。 单个实数或复数在MATLAB中都是以矩阵的形式存储的;在MATLAB中,单个数据或由单个数据构造的矩阵都是标量。 

当m=n=0,或者m=0,或者n=0,即0×0、0×n、m×0时,创建的矩阵称为空矩阵。空矩阵可以通过赋值语句建立。例如输入:

空矩阵和0矩阵的本质区别在于:空矩阵内没有任何元素,因此不占用任何存储空间;而0矩阵表示该矩阵中的所有元素全部为0,需要占用一定的存储空间。  

MATLAB中生成特殊矩阵的指令集 

(3)希尔伯特(Hilbert)矩阵

希尔伯特矩阵,也称H阵,其元素为Hij=1/(i+j-1)。由于它是一个条件数差的矩阵,所以将它用来作为试验矩阵。
关于希尔伯特矩阵的指令函数如下。
● hilb(n):用于生成一个n×n的希尔伯特矩阵。
● invhilb(n):用于生成一个n×n的希尔伯特矩阵的逆矩阵整数矩阵。
希尔伯特矩阵生成示例:希尔伯特矩阵和它的逆矩阵都是对称矩阵。 

(4)托普利兹(Toeplitz)矩阵

托普利兹矩阵,它由两个向量定义,即一个行向量和一个列向量。对称的托普利兹矩阵由单一向量来定义。
关于托普利兹矩阵的指令函数如下。
● toeplitz(k,r):用于生成非对称托普利兹矩阵,第1列为k,第1行为r,其余元素等于其左上角元素。
● toeplitz(c):用于用向量c生成一个对称的托普利兹矩阵。
托普利兹矩阵函数示例:

(5)0~1间均匀分布的随机矩阵

在MATLAB中常用rand()函数产生0~1间均匀分布的随机矩阵,其调用格式如下。
● r=rand(n):产生维数为n×n的0~1间均匀分布的随机矩阵。
● r=rand(m,n):产生维数为n×m的0~1间均匀分布的随机矩阵。
● r=rand(m,n,p,...):产生维数为n×m×p的0~1间均匀分布的随机矩阵。
● r=rand(size(A)):产生维数为n×m×p与矩阵A相同的0~1间均匀分布的随机矩阵。
创建0~1间均匀分布的随机矩阵示例:

 (6)标准正态分布随机矩阵

在MATLAB中常用randn()函数产生均值为0、方差为1的随机矩阵,其调用格式如下。
● r=randn(n)。
● r=randn(m,n)。
● r=randn(m,n,p,...)。
● r=randn([m,n,p,...])。
● r=randn(size(A))。
其格式可参考上述rand()函数。
创建标准正态分布随机矩阵示例

(7)魔方矩阵

在MATLAB中常用magic()函数产生魔方矩阵。

魔方矩阵中每行、每列和两条对角线上的元素和相等,其调用格式如下。

● M=magic(n)。

创建魔方矩阵示例:

(8)帕斯卡矩阵

在MATLAB中常用pascal()函数产生帕斯卡矩阵,其调用格式如下。
● A=pascal(n):返回n阶的对称正定Pascal矩阵,其中的元素是由Pascal三角组成的,其逆矩阵的元素都是整数。

 ●    A=pascal(n,1):返回由下三角的Cholesky因子组成的Pascal矩阵,它是对称的,所以它是自己的逆。
● A=pascal(n,2):返回pascal(n,1)的转置和交换形式。A是单位矩阵的立方根。
创建帕斯卡矩阵示例:

(9)范德蒙(Vandermonde)矩阵

在MATLAB中常用vander()函数产生范德蒙矩阵,其调用格式如下。
● A=vander(v):生成范德蒙矩阵,矩阵的列是向量v的幂,即A(i,j)=v(i)^(n-j),其中n=length(v)。
生成范德蒙矩阵示例: 

使用vander()函数产生范德蒙矩阵,输入向量可以是行向量或列向量。

2、矩阵下标的引用

在MATLAB中,普通二维数组元素的数字索引分为双下标索引和单下标索引

双下标索引是通过一个二元数组对来对应元素在矩阵中的行列位置,例如A(2,3)表示矩阵A中第2行第3列的元素。

单下标索引的方式是采用列元素优先的原则,对m行n列的矩阵按列排序进行重组,成为一维数组,再取新的一维数组中的元素位置对应的值作为元素在原矩阵中的单下标。例如对于4×4的矩阵,A(7)表示矩阵A中第3行第2列的元素,而A(13)表示矩阵A中第1行第4列的元素。

 矩阵中某一元素的单下标索引值和双下标索引值之间,可以通过MATLAB内部函数进行转换,其句法形式为:

其功能为将双下标索引值转换为单下标索引值,其中siz是一个包含两个元素的数组,代表了转换矩阵的行列数,一般可以直接用size(A)表示;i与j分别是双下标索引中的行、列值;IND是转换后的单下标索引值。 

访问多个矩阵元素
设A=magic(4),如果需要计算第4列元素的和,按照前面介绍的方法则可以用以下表达式来实现:
A(1,4)+A(2,4)+A(3,4)+A(4,4)
在下标表达式中,可以用冒号来表示矩阵的多个元素。例如,A(1:k,j)表示矩阵第j列的前k个元素。利用冒号,计算第4列元素的和可以用更为简洁的式子,代码设置如下:

因为冒号本身可以表示一列或一行的所有元素,所以上式还可以写为: 

在MATLAB中提供了一个关键字end,用于表示该维中的最后一个元素,所以上式还可以改写成:  

3、改变矩阵的大小和结构

根据运算时的不同情况和需要,矩阵大小及结构的改变方式主要有旋转矩阵、改变矩阵维度、删除矩阵元素等。

(1)矩阵的合并

 

矩阵的合并就是把两个或者两个以上的矩阵数据连接起来得到一个新的矩阵。

针对二维矩阵A、B:
(1)[A,B]表示按列存储合并矩阵,即将B矩阵接到A矩阵的列后面;

          [A;B]表示按行存储合并矩阵,即将B矩阵接到A矩阵的行后面。
(2)cat(1,A,B)表示[A;B],即以行存储;cat(2,A,B)表示[A,B];
          cat(3,A,B)表示以第3维组合A、B,组合后变成三维矩阵。

前面介绍的矩阵构造符[]不仅可用于构造矩阵,同时还可以作为一个矩阵合并操作符。

表达式C=[A B]在水平方向上合并矩阵A和B,而表达式C=[A;B]在竖直方向上合并矩阵A和B。

可以用矩阵合并符来构造任意大小的矩阵。不过需要注意的是,在矩阵合并的过程中一定要保持矩阵的形状是方形,否则矩阵合并将无法进行。

图1表明具有相同高度的两个矩阵可以在水平方向上合并为一个新的矩阵。而图2则表明不具有相同高度的两个矩阵不允许合并为一个矩阵。

 

(2)矩阵行列的删除

要删除矩阵的某一行或某一列,只要将该行或该列赋予一个空矩阵“[]”即可。

如果想删除矩阵A的第2行,则可以使用如下语句:

 矩阵重构的两个比较重要的运算是转置和共轭转置,在MATLAB中,用在函数后面加撇号“'”来表示。在线性代数的专业书籍中,这种运算经常用*和H表示。

如果A是一个实数矩阵,那么它被转置时,第1行变成第1列,第2行变成第2列……以此类推,一个m×n矩阵变为一个n×m矩阵。如果矩阵是方阵,那么这个矩阵在主对角线上反映出来。如果矩阵A的元素aij是复数,那么所有元素也是共轭的。

如果仅希望转置,则在撇号“'”之前输入一个点号,即成为“.'”,A.'表示转置,其结果与conj(A')相同。如果A是实数矩阵,那么A'与A.'相同。

 


 

 

有关Matlab-矩阵的更多相关文章

  1. Matlab imread()读到了什么 (浅显 当复习文档了) - 2

    matlab打开matlab,用最简单的imread方法读取一个图像clcclearimg_h=imread('hua.jpg');返回一个数组(矩阵),往往是a*b*cunit8类型解释一下这个三维数组的意思,行数、数和层数,unit8:指数据类型,无符号八位整形,可理解为0~2^8的数三个层数分别代表RGB三个通道图像rgb最常用的是24-位实现方法,即RGB每个通道有256色阶(2^8)。基于这样的24-位RGB模型的色彩空间可以表现256×256×256≈1670万色当imshow传入了一个二维数组,它将以灰度方式绘制;可以把图像拆分为rgb三层,可以以灰度的方式观察它figure(1

  2. 旋转矩阵的几何意义 - 2

    点向量坐标矩阵的几何意义介绍旋转矩阵的几何含义之前,先介绍一下点向量坐标矩阵的几何含义点:在一维空间下就是一个标量,如同一条直线上,以任意某一个位置为0点,以一定的尺度间隔为1,2,3...,相反方向为-1,-2,-3...;如此就形成了一维坐标系,这时候任何一个点都可以用一个数值表示,如点p1=5,即即从原点出发沿着x轴正方向移动5个尺度;点p2=-3,负方向移动3个尺度;     在一维坐标系上过原点做垂直于一维坐标系的直线,则形成了二维坐标系,此时描述一个点需要两个数值来表示点p3=(3,2),即从原点出发沿着x轴正方向移动3个尺度,在此基础上沿着y轴正方向移动两个尺度的位置就是点p3。

  3. MIMO-OFDM无线通信技术及MATLAB实现(1)无线信道:传播和衰落 - 2

     MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO

  4. 华为OD机试真题 C++ 实现【带传送阵的矩阵游离】【2023 Q2 | 200分】 - 2

            所有题目均有五种语言实现。C实现目录、C++实现目录、Python实现目录、Java实现目录、JavaScript实现目录题目n行m列的矩阵,每个位置上有一个元素你可以上下左右行走,代价是前后两个位置元素值差的绝对值.另外,你最多可以使用一次传送阵(只能从一个数跳到另外一个相同的数)求从走上角走到右下角最少需要多少时间。输入描述:第一行两个整数n,m,分别代表矩阵的行和列。后面n行,每行m个整数,分别代表矩阵中的元素。输出描述:一个整数,表示最少需要多少时间。

  5. 建模分析 | 平面2R机器人(二连杆)运动学与动力学建模(附Matlab仿真) - 2

    目录0专栏介绍1平面2R机器人概述2运动学建模2.1正运动学模型2.2逆运动学模型2.3机器人运动学仿真3动力学建模3.1计算动能3.2势能计算与动力学方程3.3动力学仿真0专栏介绍?附C++/Python/Matlab全套代码?课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);曲线优化(贝塞尔曲线、B样条曲线等)。?详情:图解自动驾驶中的运动规划(MotionPlanning),附几十种规划算法1平面2R机器人概述如图1所示为本文的研究本体——平面2R机器人。对参数进行如下定义:机器人广义坐标

  6. ABB-IRB-1200运动学分析MATLAB RVC工具分析+Simulink-Adams联合仿真 - 2

    一、机器人介绍        此处是基于MATLABRVC工具箱,对ABB-IRB-1200型号的微型机械臂进行正逆向运动学分析,并利Simulink工具实现对机械臂进行具有动力学参数的末端轨迹规划仿真,最后根据机械模型设计Simulink-Adams联合仿真。 图1.ABBIRB 1200尺寸参数示意图ABBIRB 1200提供的两种型号广泛适用于各作业,且两者间零部件通用,两种型号的工作范围分别为700 mm 和 900 mm,大有效负载分别为 7 kg 和5 kg。 IRB 1200 能够在狭小空间内能发挥其工作范围与性能优势,具有全新的设计、小型化的体积、高效的性能、易于集成、便捷的接

  7. 欧拉角表示的姿态矩阵(313和312转序) - 2

    一、习惯约定图片来自PSINS(高精度捷联惯导算法)PSINS工具箱入门与详解.pptx二、基本旋转矩阵绕x轴逆时钟旋转α\alphaα角度Rx(α)=[ 1000cos⁡αsin⁡α0−sin⁡αcos⁡α]R_x(\alpha)=\begin{bmatrix}\1&0&0\\0&\cos\alpha&\sin\alpha\\0&-\sin\alpha&\cos\alpha\end{bmatrix}Rx​(α)=​ 100​0cosα−sinα​0sinαcosα​​绕y轴逆时钟旋转α\alphaα角度Ry(α)=[ cos⁡α0−sin⁡α010sin⁡α0cos⁡α]R_y(\alpha

  8. 欧拉角、旋转矩阵及四元数 - 2

    欧拉角、旋转矩阵及四元数1.简介2.欧拉角2.1欧拉角定义2.2右手系和左手系2.3转换流程3.旋转矩阵4.四元数4.1四元数与欧拉角和旋转矩阵之间等效变换4.2测试Matlab代码5.总结1.简介常用姿态参数表达方式包括方向余弦矩阵、欧拉轴/角参数、欧拉角、四元数以及罗德里格参数等。高分辨率光学遥感卫星主要采用欧拉角与四元数对姿态参数进行描述。这里着重讲解欧拉角、旋转矩阵和四元数。2.欧拉角2.1欧拉角定义欧拉角是表征刚体旋转的一种方法之一,由莱昂哈德·欧拉引入的三个角度,用于描述刚体相对于固定坐标系的方向。在摄影测量、空间科学或其它技术领域,一般用一组(三个)欧拉角描述两个空间坐标之间的旋

  9. ruby - 如何修改矩阵(Ruby std-lib Matrix 类)? - 2

    我理解RubystdlibMatrix是不可修改的,也就是说,例如。m=Matrix.zero(3,4)不会写m[0,1]=7但我非常想做...我可以用笨拙的编程来做,比如defmodify_value_in_a_matrix(matrix,row,col,newval)ary=(0...m.row_size).map{|i|m.rowi}.map(&:to_a)ary[row][col]=newvalMatrix[*ary]end...或者作弊,比如Matrix.send:[]=,0,1,7但我想知道,这一定是人们一直遇到的问题。有没有一些标准的、习惯的方法可以做到这一点,而不必使用

  10. 线性代数让我想想:快速求三阶矩阵的逆矩阵 - 2

    快速求三阶矩阵的逆矩阵前言一般情况下,我们求解伴随矩阵是要注意符号问题和位置问题的(如下所示)A−1=1[  ][−[  ]−[  ]−[  ]  −[  ]]=A−1=1[  ][   M11−[M12]   M13−[M21]   M22−[M23]     M31−[M32]   M33]⊤\begin{aligned}&A^{-1}=\frac{1}{[\\]}\left[\begin{array}{cccccc}&-[\\]&\\-[\\]&&-[\\]\\\\&-[\\]&\\\end{array}\right]=\\\\&A^{-1}=\frac{1}{[\\]}\left[\b

随机推荐