考虑线性方程组
A
x
=
b
Ax=b
Ax=b,其中A可以做Cholesky分解,使得
A
=
R
′
?
R
A=R'\cdot R
A=R′?R,这样线性方程组就可以改写成
R
′
?
R
?
x
=
b
R'\cdot R\cdot x=b
R′?R?x=b,由于左除算符( \ )可以快速处理三角矩阵,因此得出:
x
=
R
\
(
R
′
\
b
)
x=R\backslash (R'\backslash b)
x=R\(R′\b)如果A是方阵
n
×
n
n×n
n×n的方阵,则chol(A)的计算复杂度
O
(
n
3
)
O(n^3)
O(n3),而左除算符的计算复杂度只有
O
(
n
2
)
O(n^2)
O(n2)
R=cholinc(X,DROPTOL): 其中X和R的含义与函数chol( )中的变量相同,DROPTOL为不完全Cholesky分解的丢失容限。当DROPTOL设为0时,退化为完全Cholesky分解 R=cholinc(X,OPTS): 其中OPTS为结构体,它有3个属性,即DROPTOL、MICHOL、RDIAG 1.DROPTOL为不完全Cholesky分解的丢失容限 2.MICHOL为1时采用改进算法的不完全Cholesky分解,否则不采用改进算法 3.RDIAG为1时R的对角元素中的零值替换成为DROPTPL的平方根,R=0时不做此替换 R=cholinc(X,‘0’):完全Cholesky分解 [R,p]=cholinc(X,‘0’):返回两个参数,并且不会返回出错信息。 当X是正定矩阵时,返回的上三角矩阵R满足
X
=
R
′
?
R
X=R'\cdot R
X=R′?R,且p=0; 当X是非正定矩阵时,返回值p是正整数,R是上三角矩阵其阶数p-1,且满足X(1:p-1,1:p-1)=R’
?
\cdot
?R R=cholinc(X,‘inf’):采用Cholesky-Infinity分解。此种分解是基于Cholesky分解的,但它可以处理实半正定矩阵
在MATLABR2018a中函数cholinc已经被删除,用ichol()函数替换
稀疏矩阵Cholesky分解示例:
1.2.1 一般方阵的高斯消去法分解(LU分解)
LU分解可将任意一个方阵A分解为一个下三角矩阵L和一个上三角矩阵U的乘积,即
A
=
L
U
A=LU
A=LU (Lower Matrix,Upper Matrix)
[L,U]=lu(X): X是一个方阵,L是一个"心理"下三角矩阵,U为上三角矩阵,满足
X
=
L
?
U
X=L\cdot U
X=L?U [L,U,P]=lu(X): X是一个方阵,L是一个下三角矩阵,U为上三角矩阵,P为置换矩阵,满足
P
?
X
=
L
?
U
P\cdot X=L\cdot U
P?X=L?U Y=lu(X): X是一个方阵,把上三角矩阵和下三角矩阵合并在矩阵Y中,矩阵Y的对角元素为上三角矩阵的对角元素,即
Y
=
L
+
U
?
I
Y=L+U-I
Y=L+U?I,置换矩阵P的信息丢失
考虑线性方程组
A
x
=
b
Ax=b
Ax=b其中对矩阵A可以做LU分解,使得
A
=
L
?
U
A=L\cdot U
A=L?U这样的线性方程组可以写成
L
?
U
?
x
=
b
L\cdot U\cdot x=b
L?U?x=b,由于左除算符( \ )可以快速处理三角矩阵,因此可快速解出:
x
=
U
\
(
L
\
b
)
x=U\backslash (L\backslash b)
x=U\(L\b)
利用LU分解来计算行列式的值和矩阵的逆
det(A)=det(L)*det(U) inv(A)=inv(U)*inv(L)
进行LU分解示例:
对于稀疏矩阵,函数luinc( )来做不完全LU分解 (Incomplete LU decomposition)
QR分解把一个
m
×
n
m×n
m×n的矩阵A分解为一个正交矩阵Q和一个上三角矩阵R的乘积,即
A
=
Q
?
R
A=Q\cdot R
A=Q?R
[Q,R]=qr(A):其中矩阵R为与矩阵A具有相同大小的上三角矩阵,Q为正交矩阵,它们满足
A
=
Q
?
R
A=Q\cdot R
A=Q?R。该调用方式适用于满矩阵和稀疏矩阵 [Q,R]=qr(A,0):为"经济"方式的QR分解 设矩阵A是一个
m
×
n
m×n
m×n的矩阵 若
m
>
n
m>n
m>n,则只计算矩阵Q的前n列元素,R为
n
×
n
n×n
n×n矩阵 若
m
≤
n
m≤n
m≤n,则与[Q,R]=qr(A)效果一致。该调用方式适用于满矩阵和稀疏矩阵 [Q,R,E]=qr(A):R是上三角矩阵,Q为正交矩阵,E为置换矩阵 三者满足的关系:
A
?
E
=
Q
?
R
A\cdot E=Q\cdot R
A?E=Q?R 程序选择一个合适的矩阵E使得abs(diag( R ))是降序排列的。该调用方式适用于满矩阵 [Q,R,E]=qr(A,0):"经济"方式的QR分解,其中E是一个置换矢量。 它们满足A(:,E)=
Q
?
R
Q\cdot R
Q?R,该调用方式适用于满矩阵 R=qr(A):返回上三角矩阵R,这里R=chol(
A
′
?
A
A' \cdot A
A′?A)。该调用方式适用于稀疏矩阵 R=qr(A,0):以"经济"方式返回上三角矩阵R [C,R]=qr(A,B): 其中矩阵B必须与矩阵A具有相同的行数,矩阵R是上三角矩阵,
C
=
Q
′
?
B
C=Q'\cdot B
C=Q′?B
通过QR分解分析矩阵的秩示例:
1.2.3 舒尔分解
舒尔分解定义式
A
=
U
?
S
?
U
′
A=U\cdot S\cdot U'
A=U?S?U′其中A必须是一个方阵(Square Matrix), U是一个酉矩阵(或幺正矩阵)(图中共轭转置符号
?
\dagger
? dagger,匕首) S是一个块对角化矩阵,由对角线上的1×1和2×2块组成 特征值(eigenvalue)可以由矩阵S的对角块给出,而矩阵U给出比特征向量更多的数值特征。 此外,对缺陷矩阵也可以进行舒尔分解
假设A是一个
n
×
n
n×n
n×n的矩阵,A的特征值问题就是找到下面方程组的解:
A
?
V
=
λ
?
V
A\cdot V=\lambda\cdot V
A?V=λ?V其中,
λ
\lambda
λ为标量,
V
V
V为矢量
若把矩阵A的n个特征值放在矩阵P的对角线上,相应的特征向量按照特征值对应的顺序排列,作为矩阵V的列,特征值问题可改写为:
A
?
V
=
V
?
D
A\cdot V=V\cdot D
A?V=V?D如果
V
V
V是非奇异的,该问题可认为是一个特征值分解问题,关系式如下:
A
=
V
?
D
?
V
?
1
A=V\cdot D\cdot V^{-1}
A=V?D?V?1
广义特征值问题是指方程
A
?
X
=
λ
?
B
?
x
A\cdot X=\lambda\cdot B\cdot x
A?X=λ?B?x的非平凡解问题,其中A、B都是
n
×
n
n×n
n×n的矩阵,
λ
\lambda
λ是标量。满足此方程的
λ
\lambda
λ为广义特征值,对应的向量
x
x
x为广义特征向量 如果
X
X
X是一个列向量
a
?
\vec{a}
a 的特征向量的矩阵,并且它的秩为n,那么特征向量线性相关。 如果不是这样,则称矩阵为缺陷阵 如果
X
′
?
X
=
I
X'\cdot X=I
X′?X=I,则特征向量正交,这对于对称矩阵是成立的
1.3.1 特征值和特征向量的相关函数
eig(A):求包含矩阵A的特征值的向量 [X,D]=eig(A):产生一个矩阵A的特征值在对角线上的对角矩阵D和矩阵X,它们的列是相应的特征向量,满足
A
?
X
=
X
?
D
A\cdot X=X\cdot D
A?X=X?D,为了得到有更好条件特征值的矩阵,要进行相似变换 [T,B]=balance(A):找到一个相似变换矩阵T和矩阵B,使得它们满足
B
=
T
?
A
?
T
B=T-A\cdot T
B=T?A?T,B是用balance命令求得的平衡矩阵 eig(A,‘nobalance’):不经过平衡处理求得矩阵A的特征值和特征向量,也就是不进行平衡相似变换 eigs(A):返回一个由矩阵A的部分特征值组成的向量,和eig命令一样,但不返回全部的特征值。如果不带有参量,则计算出最大的特征值,当计算所有特征值时,如果矩阵A的秩不小于6,则计算出6个特征值 eigs(f,n):求出矩阵A的部分特征值。在使用一个矩阵列的线性运算符时,字符串f中包含的是M文件的文件名,n指定问题的阶次。用这种方法来求特征值比开始就用运算符来求要快 eigs(A,B,k,sigma) 求矩阵A的部分特征值,矩阵B的大小和A相同; 如果没有给出B=eye(size(A)),那么k就是要计算的特征值的个数; 如果k没有给出,就用小于6的数或者A的秩 sigma是一个实数或复数的移位参数,或下列文本字符串中的一个 文本字符串指明的是特征值的属性: lm:为最大的特征值 sm:为最小的特征值 lr:为最大的实数部分 sr:最小的实数部分 be:为同时求的最大和最小的实数部分 condeig(A):返回一个由矩阵A的特征值条件数组成的向量 [V,D,s]=condeig(A):返回[V,D]=eig(A)和s=condeig(A)