MATLAB:矩阵(基础知识)

一、数组的创建和操作

1.矩阵的输入

>> A=[]A =[]>> B=[6 5 3]B =6     5     3>> C=B'C =653

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     5A =1     2     5     4     5A =1     2     5     1     5

 二、MATLAB常用矩阵函数

1. 矩阵的构造与操作

zeros 生成元素全为0的矩阵

>> zeros(3:3)ans =0     0     00     0     00     0     0

ones 生成元素全为1的矩阵

>> ones(2:2)ans =1     11     1

eye 生成单位矩阵

>> eye(2:2)ans =1     00     1

rand 生成随机矩阵

>> rand(3:3)ans =0.8147    0.9134    0.27850.9058    0.6324    0.54690.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==BA =1     2     3     5     7B =2     3     5     5     8ans =1×5 logical 数组1   1   1   1   0ans =1×5 logical 数组0   0   0   0   0F =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   1D =1×5 logical 数组1   1   1   1   1E =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.33330.5000    0.3333    0.25000.3333    0.2500    0.2000>> B=invhilb(3)B =9   -36    30-36   192  -18030  -180   180

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

(3)范德蒙行列式

>> A=vander([1 2 3 4])A =1     1     1     18     4     2     127     9     3     164    16     4     1
>> B=vander([1;2;3;4])B =1     1     1     18     4     2     127     9     3     164    16     4     1
>> C=vander(1:.5:3)C =1.0000    1.0000    1.0000    1.0000    1.00005.0625    3.3750    2.2500    1.5000    1.000016.0000    8.0000    4.0000    2.0000    1.000039.0625   15.6250    6.2500    2.5000    1.000081.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     83     2     4     64     3     2     45     4     3     2
>> a=ones(3,4)b=zeros(3,4)c=[a;b]d=[a b]a =1     1     1     11     1     1     11     1     1     1b =0     0     0     00     0     0     00     0     0     0c =1     1     1     11     1     1     11     1     1     10     0     0     00     0     0     00     0     0     0d =1     1     1     1     0     0     0     01     1     1     1     0     0     0     01     1     1     1     0     0     0     0

2.矩阵行列的删除

如果想删除矩阵的第二行

>> A=rand(4,4)A =0.7922    0.8491    0.7431    0.70600.9595    0.9340    0.3922    0.03180.6557    0.6787    0.6555    0.27690.0357    0.7577    0.1712    0.0462>> A(2,:)=[]%删除矩阵的第二行A =0.7922    0.8491    0.7431    0.70600.6557    0.6787    0.6555    0.27690.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     03     1     09     2     4>> B=find(A)%矩阵中非零元素的下标B =1234569>> C=find(A>=1)C =1234569
>> D=A(A>=1)%矩阵中大于等于1的元素D =1393124>> A(find(A==0))=10%矩阵中等于0的元素改为10A =1     3    103     1    109     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     33     2     0     0     1     39     3     4     2     4     99     3     4     3     1     03     2     0     3     1     01     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     4C =4415D =1     3     04     4     013     6     4E =1     4     43     4     49    11    15F =23

九、矩阵元素的求积

>> clear all;A= magic(3)B=prod (A)%矩阵各列元素的积
C=prod (A,2)%矩阵各行元素的积
D=cumprod (A)%矩阵各列元素的积
E=cumprod(A,2)%矩阵各行元素的积A =8     1     63     5     74     9     2B =96    45    84C =4810572D =8     1     624     5    4296    45    84E =8     8    483    15   1054    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:舒尔分解
                               

Published by

风君子

独自遨游何稽首 揭天掀地慰生平