草庐IT

MATLAB:矩阵(基础知识)

muyierfly 2023-11-27 原文

一、数组的创建和操作

1.矩阵的输入

>> A=[]

A =

     []

>> B=[6 5 3]

B =

     6     5     3

>> C=B'

C =

     6
     5
     3

2.调用矩阵

>> A=[1 2 3 4 5]

A =

     1     2     3     4     5

>> a1=A(1)%访问数组第一个元素

a1 =

     1

>> a2=A(1:3)%访问数组第1、2、3个元素

a2 =

     1     2     3

>> a3=A(3:end)%访问数组第3个到最后一个元素

a3 =

     3     4     5

>> a4=A(end:-1:1)%数组元素反序输出

a4 =

     5     4     3     2     1

>> a5=A([1 5])%访问数组第1个及第5个元素

a5 =

     1     5

3.子数组的赋值

>>
A=[1 2 3 4 5]
A(3)=5
A([1 4])=[1 1]

A =

     1     2     3     4     5


A =

     1     2     5     4     5


A =

     1     2     5     1     5

 二、MATLAB常用矩阵函数

1. 矩阵的构造与操作

zeros 生成元素全为0的矩阵

>> zeros(3:3)

ans =

     0     0     0
     0     0     0
     0     0     0

ones 生成元素全为1的矩阵

>> ones(2:2)

ans =

     1     1
     1     1

eye 生成单位矩阵

>> eye(2:2)

ans =

     1     0
     0     1

rand 生成随机矩阵

>> rand(3:3)

ans =

    0.8147    0.9134    0.2785
    0.9058    0.6324    0.5469
    0.1270    0.0975    0.9575
fliplr矩阵左右翻转
flipud矩阵上下翻转
triu 矩阵的上三角部分
tril矩阵的下三角部分
diag对角矩阵
full将稀疏矩阵化为普通矩阵
sparse生成稀疏矩阵
randn生成正态分布随机矩阵

2. 矩阵运算函数

subspace计算两个子空间的夹角
rref矩阵的行最简形(初等行变换求解线性方程组)
orth正交规范化
null求基础解系(矩阵的零空间)
trace方阵的迹%特征值的和等于迹
det方阵的行列式
rank矩阵的秩
normest稀疏矩阵(或大规模矩阵)的2-范数估计
norm矩阵或向量范数

3. 与线性方程有关的矩阵运算函数

pinv矩阵的广义逆
qr矩阵的正交三角分解
luinc稀疏矩阵的不完全LU分解
ilu稀疏矩阵的不完全LU分解
lu矩阵的LU分解
linsolve矩阵方程组的求解
cholinc稀疏矩阵的不完全Cholesky分解
chol矩阵的Cholesky分解(矩阵的平方根分解)
condest稀疏矩阵1-范数的条件数估计
cond方阵的条件数
inv方阵的逆

4. 与特征值或奇异值有关的矩阵函数

eig方阵的特征值与特征向量
svd矩阵的奇异值分解
eigs稀疏矩阵的一些(默认6个)最大特征值与特征向量
svds矩阵的一些(默认6个)最大奇异值与向量
hess方阵的Hessenberg形式分解
schur方阵的Schur分解

三、数组的常见运算

1.数组的算术运算

dot数组的点积

sum数组元素的乘积之和

>> A=[1 2 3];
>> B=[4 5 6];
>> C=dot(A,B)

C =

    32
>> D=sum(A.*B)

D =

    32

 2.数组的关系运算

关系运算的运算法则如下:
当两个比较量是标量时,直接比较两个数的大小。若关系成立,则返回的结果为1,否则为0。
当两个比较量是维数相等的数组时,逐一比较两个数组相同位置的元素,并给出比较结果。最终的关系运算结果是一个与参与比较的数组维数相同的数组,其组成元素为0或1。

>> 
A=[1 2 3 5 7]
B=[2 3 5 5 8]
A<6
A>B
F=A==B

A =

     1     2     3     5     7


B =

     2     3     5     5     8


ans =

  1×5 logical 数组

   1   1   1   1   0


ans =

  1×5 logical 数组

   0   0   0   0   0


F =

  1×5 logical 数组

   0   0   0   1   0

3.数组的逻辑运算

在 MATLAB中数组提供了3种数组逻辑运算符,即&(与)、|(或)和~(非)。逻辑运算的运算法则如下:
如果是非零元素则为真,用1表示;反之是零元素则为假,用0表示。
当两个比较量是维数相等的数组时,逐一比较两个数组相同位置的元素,并给出比较结果。最终的关系运算结果是一个与参与比较的数组维数相同的数组,其组成元素为0或1。
与运算(a&b)时,a、b全为非零,则为真,运算结果为1;或运算(ab)时,只要a、b有一个为非零,则运算结果为1;非运算(~a)时,若a为0,运算结果为1,a为非零,运算结果为0。

>>
 C=A&B %与
 D=A|B %或
 E=~B  %非

C =

  1×5 logical 数组

   1   1   1   1   1


D =

  1×5 logical 数组

   1   1   1   1   1


E =

  1×5 logical 数组

   0   0   0   0   0

 四、矩阵操作

1.创建矩阵

compan(p):生成一个特征多项式为p的二维矩阵
hadamard(k):返回一个阶数为n=2k的Hadamard矩阵,只有当n能被4整除时Hadamard矩阵才存在
hankel(x):返回一个由向量x定义的 Hankel方阵。该矩阵是一个对称矩阵,其元素为h一x+j-a,第1列为向量x,反三角以下的元素为0
hankel(x,y):返回一个mXn的Hankel矩阵,它的第1列为向量x,最后一行为向量y
magic(n):返回一个nXn的魔方矩阵
pascal(n):返回一个n×n的Pascal矩阵
rosser:给出Rosser 矩阵,这是一个经典对称特征测试问题,它的大小是8×8
vander(x):返回一个Vandermonde矩阵,其元素为v,=x"',n为向量x的长度
wilkinson(n):返回一个m×n的-Wilkinson特征值测试矩阵

(1)希尔伯特矩阵

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

>> A=hilb(3)

A =

    1.0000    0.5000    0.3333
    0.5000    0.3333    0.2500
    0.3333    0.2500    0.2000

>> B=invhilb(3)

B =

     9   -36    30
   -36   192  -180
    30  -180   180

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

(3)范德蒙行列式

>> A=vander([1 2 3 4])

A =

     1     1     1     1
     8     4     2     1
    27     9     3     1
    64    16     4     1
>> B=vander([1;2;3;4])

B =

     1     1     1     1
     8     4     2     1
    27     9     3     1
    64    16     4     1
>> C=vander(1:.5:3)

C =

    1.0000    1.0000    1.0000    1.0000    1.0000
    5.0625    3.3750    2.2500    1.5000    1.0000
   16.0000    8.0000    4.0000    2.0000    1.0000
   39.0625   15.6250    6.2500    2.5000    1.0000
   81.0000   27.0000    9.0000    3.0000    1.0000

五、改变矩阵的大小

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

1.矩阵的合并

>> C=toeplitz(2:5,2:2:8)

C =

     2     4     6     8
     3     2     4     6
     4     3     2     4
     5     4     3     2
>> a=ones(3,4)
 b=zeros(3,4)
 c=[a;b]
 d=[a b]

a =

     1     1     1     1
     1     1     1     1
     1     1     1     1


b =

     0     0     0     0
     0     0     0     0
     0     0     0     0


c =

     1     1     1     1
     1     1     1     1
     1     1     1     1
     0     0     0     0
     0     0     0     0
     0     0     0     0


d =

     1     1     1     1     0     0     0     0
     1     1     1     1     0     0     0     0
     1     1     1     1     0     0     0     0

2.矩阵行列的删除

如果想删除矩阵的第二行

>> A=rand(4,4)

A =

    0.7922    0.8491    0.7431    0.7060
    0.9595    0.9340    0.3922    0.0318
    0.6557    0.6787    0.6555    0.2769
    0.0357    0.7577    0.1712    0.0462

>> A(2,:)=[]%删除矩阵的第二行

A =

    0.7922    0.8491    0.7431    0.7060
    0.6557    0.6787    0.6555    0.2769
    0.0357    0.7577    0.1712    0.0462

六:矩阵元素的查找

1.ind=find(X) :查找矩阵X中的非零元素,函数返回这些元素的单下标。

>> A=[1 3 0;3 1 0;9 2 4]

A =

     1     3     0
     3     1     0
     9     2     4

>> B=find(A)%矩阵中非零元素的下标

B =

     1
     2
     3
     4
     5
     6
     9

>> C=find(A>=1)

C =

     1
     2
     3
     4
     5
     6
     9
>> D=A(A>=1)%矩阵中大于等于1的元素

D =

     1
     3
     9
     3
     1
     2
     4

>> A(find(A==0))=10%矩阵中等于0的元素改为10

A =

     1     3    10
     3     1    10
     9     2     4

七、矩阵元素的排序

>>  A=[1 3 0;3 1 0;9 2 4];
B=sort(A);
A=[1 3 0;3 1 0;9 2 4];
B=sort(A);%矩阵元素按照列进行升序排序
C=sort(A,2);%矩阵元素按照行进行升序排序
D=sort(A,'descend');%矩阵元素按照列进行降序排序
E=sort(A,2,'descend');%矩阵元素按照行进行降序排序
>> BCDE=[B C;D E]

BCDE =

     1     1     0     0     1     3
     3     2     0     0     1     3
     9     3     4     2     4     9
     9     3     4     3     1     0
     3     2     0     3     1     0
     1     1     0     9     4     2

八、矩阵元素的求和 

>> clear all;
A=[1 3 0;3 1 0;9 2 4];
B=sum(A)%矩阵中元素按照列进行求和
C=sum(A,2)%矩阵中元素按照行进行求和
D=cumsum (A)%矩阵中各列元素的和
E=cumsum (A,2)%矩阵中各行元素的和
F=sum(sum (A))%矩阵中所有元素的和
B =

    13     6     4


C =

     4
     4
    15


D =

     1     3     0
     4     4     0
    13     6     4


E =

     1     4     4
     3     4     4
     9    11    15


F =

    23

九、矩阵元素的求积

>> clear all;

A= magic(3)

B=prod (A)%矩阵各列元素的积
C=prod (A,2)%矩阵各行元素的积
D=cumprod (A)%矩阵各列元素的积
E=cumprod(A,2)%矩阵各行元素的积

A =

     8     1     6
     3     5     7
     4     9     2


B =

    96    45    84


C =

    48
   105
    72


D =

     8     1     6
    24     5    42
    96    45    84


E =

     8     8    48
     3    15   105
     4    36    72

十、矩阵的分析

norm 矩阵或向量范数

normest 稀疏矩阵(或大规模矩阵)的2-范数估计

rank 矩阵的秩

det 方阵的行列式

trace 方阵的迹%特征值的和等于迹

null 求基础解系(矩阵的零空间)

orth 正交规范化

rref 矩阵的行最简形(初等行变换求解线性方程组)

subspace 计算两个子空间的夹角

十一、矩阵的分析

chol:Cholesky分解:对称正定矩阵的 Cholesky 分解
Cholesky分解在MATLAB中用函数chol()来实现,其常用的调用方式如下:
R = chol(X):其中X为对称正定矩阵,R是上三角矩阵,使得 X=R'·R。如果X是非正定的,则结果将返回出错信息。
[R,p] = chol(X):返回两个参数,并且不会返回出错信息。当X是正定矩阵时,返回的上三角矩阵R满足X=-R'·R,且p=0;当X是非正定矩阵时,返回值p是正整数,R是上三角矩阵,其阶数为p-1,且满足X(1:p-1,1:p-1)=R -R    
cholinc:稀疏矩阵的不完全 Cholesky分解
lu:矩阵LU分解
luinc:稀疏矩阵的不完全LU分解
qr:正交三角分解
svd:奇异值分解
gsvd:一般奇异值分解
schur:舒尔分解
                               

有关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. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  4. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

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

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

  6. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  7. ruby - 我怎样才能更好地了解/了解更多关于 Ruby 的知识? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?

  8. 【网络】-- 网络基础 - 2

    (本文是网络的宏观的概念铺垫)目录计算机网络背景网络发展认识"协议"网络协议初识协议分层OSI七层模型TCP/IP五层(或四层)模型报头以太网碰撞路由器IP地址和MAC地址IP地址与MAC地址总结IP地址MAC地址计算机网络背景网络发展        是最开始先有的计算机,计算机后来因为多项技术的水平升高,逐渐的计算机变的小型化、高效化。后来因为计算机其本身的计算能力比较的快速:独立模式:计算机之间相互独立。    如:有三个人,每个人做的不同的事物,但是是需要协作的完成。    而这三个人所做的事是需要进行协作的,然而刚开始因为每一台计算机之间都是互相独立的。所以前面的人处理完了就需要将数据

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

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

  10. 建模分析 | 平面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机器人。对参数进行如下定义:机器人广义坐标

随机推荐