MATLAB:矩阵(基础知识)

2023-11-09

一、数组的创建和操作

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:舒尔分解
                               

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MATLAB:矩阵(基础知识) 的相关文章

  • Matlab 中的多行匿名函数? [复制]

    这个问题在这里已经有答案了 是否可以在 Matlab 中创建多行匿名函数 没有合适的例子在文档中 http www mathworks com help matlab matlab prog anonymous functions html
  • Matlab 中是否有相当于 R 的 dput() 的函数?

    Matlab 中是否有相当于 R 的 dput 的函数 dput 将 R 对象的 ASCII 文本表示形式写入文件或连接 UPDATE 1 添加了递归和对单元格的支持 UPDATE 2 添加了对结构的支持 UPDATE 3 增加了对逻辑 整
  • Matlab-如何在曲线上绘制切线

    我在 matlab 中绘制了一个图表 plot x y 我的图表有不同的斜率 我如何在每个斜率上绘制切线并计算斜率的系数 如果您没有用于绘制点的显式函数 您可以使用有限差分 http en wikipedia org wiki Finite
  • 在 3d 空间中的两个平面之间进行插值

    我正在开发一种工具 可以让您在 3D 体积 上圈出 包围事物 我想通过标记 切片 1 和 3 并从该信息 填充 切片 2 来节省时间 两个简单的解决方案是 1 slice2 slice1 AND slice3 gets the overla
  • 如何在 MATLAB 中可视化球体的交集?

    似乎这个问题在一些地方被问过 包括SO https stackoverflow com questions 35130336 draws the intersecting volume of two spheres in matlab 我最
  • 使用 GPU 进行 Matlab 卷积

    我用gpuArray尝试了matlab的卷积函数conv2 convn 例如 convn gpuArray rand 100 100 10 single gpuArray rand 5 single 并将其与 cpu 版本 convn ra
  • 按元素出现的频率对数组元素进行排序

    是否可以在 matlab octave 中使用sort函数根据元素的相对频率对数组进行排序 例如数组 m 4 4 4 10 10 10 4 4 5 应该产生这个数组 5 10 10 10 4 4 4 4 4 5是出现频率较低的元素 位于顶部
  • Matlab Mex文件编译

    我正在尝试编译一个 mex 文件以在 matlab 中使用套接字连接 问题是它总是说我没有安装sdk或编译器 但我已经安装了 Visual Studio 2010 Express Visual Studio 2012 Express Vis
  • Matlab中转换数据类型的有效方法(double vs. im2double)

    我想将真彩色图像转换为双精度 据我所知有两种方法可以做到这一点 double rgb img im2double rgb img 哪一种效率更高 谢谢 他们都是不同的 im2double将图像的范围转换为0 1如果数据类型是uint8 or
  • MATLAB 中最有效的矩阵求逆

    在 MATLAB 中计算某个方阵 A 的逆矩阵时 使用 Ai inv A should be the same as Ai A 1 MATLAB 通常会通知我这不是最有效的求逆方法 那么什么是更有效率的呢 如果我有一个方程系统 可能会使用
  • 如何使用matlab生成不同频率的正弦波?

    对于我的项目 我需要使用 matlab 生成一个正弦波 它有 100 000 个样本 并且频率在每 10 000 个样本后随机变化 采样率和频率可以根据方便而定 matlab中有没有函数可以生成这个 好的另一个例子 生成 5 个随机频率 r
  • 不等间隔时间序列的移动平均线

    我有一个证券交易所股票价格的数据集 时间 价格 但数据点之间的间隔并不相等 从 1 到 2 分钟不等 在这种情况下计算移动平均值的最佳实践是什么 如何在Matlab中实现呢 我倾向于认为 点的权重应该取决于自上一个点以来的最后时间间隔 Ma
  • Simulink 仿真引擎如何工作?

    我想了解 Simulink 仿真引擎的工作原理 它是否使用离散事件模拟机制 那么如何处理连续时间 它是否依赖于基于静态循环的代码生成 或者 在第一个周期之前 它会计算出块的执行顺序 从不需要任何其他块输入的块开始 每个周期 它都会根据输入和
  • 什么是 ANN 中的纪元以及它如何转换为 MATLAB 中的代码?

    我试图理解 并可视化 训练人工神经网络的时代到底是什么 我们有一个包含约 7000 个产品的训练集 其中有 10 个特征 输入 这些产品必须根据这 10 个输入分为 7 个类别 我们的 ANN 有 10 个输入 这些输入进入由 10 个神经
  • 如何将二进制值列表转换为int32类型?

    我在 MATLAB 工作区中有一个小端格式的二进制数列表 我想将它们转换为 int32 a是由 0 和 1 组成的双向量 如下所示 a 0 0 0 1 1 0 0 1 1 1 1 0 1 0 1 0 0 0 0 1 1 0 0 0 1 1
  • matlab中类库的全局变量

    我有一些matlab声明的类 我如何声明所有类中都可见的常量 例如 这些常量可以是在所有类的方法中使用的物理常量 首先想到的是使用全局变量 还有更好的办法吗 最好在单独的文件中声明这些常量 包含常量的类是执行此操作的一种很好的干净方法 请参
  • 黑白随机着色的六角格子

    我正在尝试绘制一个 10 000 x 10 000 随机半黑半白的六边形格子 我不知道如何将该格子的六边形随机填充为黑色和白色 这是我真正想要从这段代码中得到的示例 但我无法做到 https i stack imgur com RkdCw
  • 如何在放置颜色条后保持子图大小不变

    假设我们有一个 1 2 子图 我们在其中绘制了一些图形 如下所示 subplot 1 2 1 surf peaks 20 subplot 1 2 2 surf peaks 20 然后我们要添加一个颜色条 colorbar 我不希望结果中的正
  • 如何在 matlab 中创建由多个 3d 图像数据数组组成的数组

    我正在阅读 15 张图片imagedata imread imagename jpg 它的大小总是320 by 320 by 3 如何将数据放入数组中 使用 for for 循环 以便在访问新数组的第一个元素时获得输入的第一个图像的 RGB
  • 访问图像的 Windows“标签”元数据字段

    我正在尝试进行一些图像处理 所以现在我正在尝试读取图像 exif 数据 有 2 个内置函数可用于读取图像的 exif 数据 问题是我想读取图像标签 exifread and imfinfo这两个函数都不显示图像标签 Is there any

随机推荐