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 中拟合具有扭曲时基的正弦波的最佳方法 时间失真由 n 阶多项式 n 10 给出 其形式为t distort P t 例如 考虑失真t distort 8 12t 6t 2 t 3 这只是幂级数展开 t 2 3 这将
  • Matlab strcat 不返回字符串?

    imgstr 无法识别 strcat 的输出字符串 homedir C Users images for img 01 bmp 02 bmp 03 bmp imgstr strcat homedir img I imread imgstr
  • Matlab下降低图像质量

    问候 我正在尝试找到一种简单的方法来处理图像 以便将其质量从 8 位降低到 3 位 实现这一目标的最简单方法是什么 干杯 如果要线性缩放 只需将每个像素值除以 255 7 即 如果原始图像存储在矩阵 I 中 则让低分辨率图像 J I 255
  • 使用 scipy.io 将 python pandas dataframe 转换为 matlab 结构

    我正在尝试使用 scipy io 将 pandas 数据帧保存到 matlab mat 文件 我有以下内容 array1 np array 1 2 3 array2 np array a b c array3 np array 1 01 2
  • 在 numpy/scipy 中查找 matlab 函数

    是否有一个等价的函数find A gt 9 1 来自 numpy scipy 的 matlab 我知道有nonzeronumpy 中的函数 但我需要的是第一个索引 以便我可以在另一个提取的列中使用第一个索引 Ex A 1 2 3 9 6 4
  • MATLAB - 从目录读取文件?

    我希望从目录中读取文件并对每个文件迭代执行操作 此操作不需要更改文件 我知道我应该为此使用 for 循环 到目前为止我已经尝试过 FILES ls path to folder for i 1 size FILES 1 STRU pdbre
  • 如何从一个清晰的例子计算二维图像中的吉布斯能量

    我有一个关于矩阵的有趣问题 在吉布斯分布中 吉布斯能量U x 可以计算为 这是所有可能的派系 C 上的派系势 Vc x 的总和 右图 团 c 被定义为 S 中站点的子集 x 蓝色像素的邻域是左图中黄色像素的邻居 其中每对不同的站点都是邻居
  • 如何在 MATLAB 中为 4 个子图创建一个通用图例?

    如何在 MATLAB 中为 4 个子图创建一个通用图例 如下所示 又快又脏 hSub subplot 3 1 1 plot 1 1 1 1 1 1 1 1 hLegend legend hello i am legend subplot 3
  • 如何使用神经网络保存 Sift 特征向量进行分类

    SIFT 特征的 Matlab 实现发现于http www cs ubc ca lowe keypoints http www cs ubc ca lowe keypoints 在 stackoverflow 的帮助下 我想将功能保存到 m
  • 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
  • 在 Matlab 中保存当前运行的脚本

    有没有办法保存Matlab中当前运行的脚本 我有一个脚本 它会自动备份一组脚本 但如果我更改了当前脚本 则保存的版本将过期 也许可以调用一些java Thanks 在 Yair Altman 网站上的某个地方 请参阅我的其他答案中的链接 他
  • 对多个属性使用一种设置方法 MATLAB

    我有几个属性基本上使用相同的属性set method classdef MyClass properties A B end methods function mc MyClass a b Constructor mc A a mc B b
  • 如何在 MATLAB 中可视化球体的交集?

    似乎这个问题在一些地方被问过 包括SO https stackoverflow com questions 35130336 draws the intersecting volume of two spheres in matlab 我最
  • 在 Excel 中打印 MATLAB 图窗并调整其大小

    我在 MATLAB 中有两个带有手柄的图形hFig1 and hFig2 我想将它们打印到 Excel 中的特定单元格 单元格 E3 和 I3 并将它们重新调整为 2 英寸 x 3 英寸 我尝试过使用 AddPictures对象处理程序和使
  • 如何让MCR启动时间快

    我将 matlab 程序转换为 net 程序集 即 dll 文件 我制作了一个控制台 C 应用程序 添加了 dll 文件并从 php 调用它 每次调用 exe 时都会调用 MCR 如何使 MCR 在服务器启动时初始化 并且即使在一段时间后调
  • MATLAB中如何画水平线和垂直线?

    我目前正在尝试在 MATLAB 中绘制简单的垂直线和水平线 例如 我想绘制线 y 245 我该怎么做呢 MATLAB 根据您提供的向量逐点进行绘图 因此 要创建一条水平线 您需要改变x同时保持y对于垂直线恒定 反之亦然 xh 0 10 yh
  • Matlab PARFOR 循环可以通过编程方式打开/关闭吗?

    有一个关于 MATLAB 中 parfor 的简单问题 我想在程序中设置一个标志 以便在 parfor 和常规 for 循环之间进行更改 基本上 我需要此功能 以便我的代码的某些部分可以在 调试 模式下更新图形 然后当关闭该标志时 使用 p
  • 扩展 MATLAB 函数名称的最大长度

    我编写了一个 MATLAB 程序 可以动态创建自定义 MATLAB 函数 并使用以下命令在其他 MATLAB 实例中启动它们unix命令 我使用这个程序来自动化 fMRI 神经影像分析 使用 SPM8 for MATLAB 一切正常 但是
  • 两个 y 轴与相同的 x 轴[重复]

    这个问题在这里已经有答案了 可能的重复 在单个图中绘制 4 条曲线 具有 3 个 y 轴 https stackoverflow com questions 1719048 plotting 4 curves in a single plo

随机推荐