MATLAB:矩阵(基础知识)

一、数组的创建和操作

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

  • 60
    点赞
  • 468
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值