目录
一,奇异值分解(SVD)
1,奇异值分解
每个实对称矩阵A都可以进行特征值分解: 其中Q是正交矩阵,
是对角矩阵。
据此可推出奇异值分解:
每个矩阵都可以表示成
其中A是m*n的矩阵,U是m*m的正交矩阵,D是m*n的对角矩阵,V是n*n的正交矩阵。
U的列向量叫A的左奇异向量,V的列向量叫A的右奇异向量,D的对角线上元素叫做A的奇异值。
2,性质
(1)如果一个方阵可以进行特征值分解,那么它的特征值分解和奇异值分解是相同的。
(2)非零奇异值的个数就是矩阵的秩。
(3)矩阵的特征值有可能是是复数(即使是实数矩阵,其特征值也有可能是复数),但是矩阵的奇异值一定是非负实数(即使矩阵是复数矩阵,其奇异值也一定是非负实数)。
3,二维SVD
二,伪逆矩阵
1,伪逆矩阵
任意非0矩阵的伪逆矩阵:
用特征值分解可以得到它的等价定义:
其中对角矩阵 D 的伪逆矩阵是D的所有非零元素各自取倒数之后再转置得到的。
如果一个方阵有逆矩阵,那么它的逆矩阵和伪逆矩阵是相同的。
2,python求解
A = [[1,2,3]]
u,d,vt = linalg.svd(A)
print(u)
print(d)
print(vt)
输出;
[[-1.]]
[3.74165739]
[[-0.26726124 -0.53452248 -0.80178373]
[-0.53452248 0.77454192 -0.33818712]
[-0.80178373 -0.33818712 0.49271932]]
即
3,伪逆矩阵的性质
对于m行n列的矩阵A,如果n>=m,则
4,伪逆矩阵的应用——求方程组的解
如果方程组的秩小于变量个数,那么就有无穷多解,
用Ax=b表示方程组,用伪逆矩阵可以求出一个解
而且,这个解是所有解中,欧几里得范数最小的解。
三,向量微分
标量的微分还是标量,列向量的微分还是列向量。
1,标量对向量的微分
假设有一个n维向量x,和一个n元函数y=f(x),y是标量
假设x是列向量,则
即,行向量乘以列向量等于标量。
2,向量对向量的微分
假设有一个n维向量x,和n维向量y,其中y的每个元素都是关于x的n个元素的n元函数,
不妨设x和y都是列向量,则:
即,方阵乘以列向量等于列向量
3,向量微分的计算方法
链式法则依然成立。
如x是列向量,a是列向量,A是矩阵,则:
四,矩阵的范数、条件数
1,矩阵的范数
向量范数表达的是向量的长度,矩阵范数表达的是对向量的放大能力。
2,条件数
的范数:
A的范数表示A能对向量放大多少倍, 的范数表示A能对向量缩小多少倍。
条件数:
条件数同时描述了放大能力和缩小能力。
条件数 = 最大奇异值 / 最小奇异值,结果一定是大于等于1的,如果A不可逆(最小奇异值为0),则条件数是正无穷。
3,线性方程的稳定性
考虑线性方程 Ax=b,稳定性即x随着b变化而变化的程度。
根据条件数的定义可以推导出:
即条件数越小,线性方程越稳定。
五,Cholesky分解
1,Cholesky分解
若n阶对称矩阵A正定,则存在一个对角元为正数的下三角矩阵L,使得成立。
把A分解成叫做Cholesky分解。
2,LDLT分解
若n阶对称矩阵A正定,则存在一个对角矩阵D和对角元全为1的下三角矩阵L,使得成立。
算法:
六,近似正定对称矩阵
问题:
输入一个对称矩阵A,求矩阵B,使得A+B正定,且条件数较小,且和A的数值差别不太大。
1,正定试探算法
输入一个对称矩阵A,求正数t,使得A+tI正定且t较小,其中I是单位矩阵。
PS:
第8行是尝试,意思是如果输入正定矩阵那么Cholesky分解算法运行成功,否则算法运行失败。
t足够大时一定会成功。
2,修正LDLT分解
通过修改LDLT分解的中间过程,直接求出一个B
这个修正方式下,显然上面的具体修正目标达成,且最终求得的A+B的条件数存在上界。