Cholesky分解 - 知乎 (zhihu.com)(之前学习牛顿法有涉及到Cholesky的相关证明)
Cholesky分解是一种将一个对称正定矩阵分解为一个下三角矩阵和其转置的乘积的方法。简单来讲,就是将一个矩阵分解为一个下三角矩阵和其转置矩阵相乘的结果。
Cholesky分解的主要步骤如下:
1. 对于一个对称正定矩阵A,可以表示为A = LL^T,其中L是一个下三角矩阵。2. 如果A的第i行第j列元素为a(i,j),那么L的第i行第j列元素为l(i,j)。3. Cholesky分解的具体计算步骤是:首先,通过对矩阵A进行逐列的迭代计算,得到L矩阵的每一列;接着通过计算每列中的元素,逐步得到L矩阵的每一个元素。Cholesky分解在数值计算和线性代数中有着广泛的应用,它可以帮助简化大规模线性方程组的解法,并且在实际计算中具有很高的效率和稳定性。
当进行Cholesky分解时,有几点需要注意:1. 矩阵A必须是对称正定的。对称是指矩阵A的转置等于它本身,正定是指对任意非零向量x,都有x^T*A*x大于0。如果矩阵不满足这两个条件,那么无法进行Cholesky分解。2. Cholesky分解是一种比LU分解更快速和更稳定的方法,尤其在解大规模线性方程组时效果更为显著。3. Cholesky分解得到的下三角矩阵L可以用来解线性方程组Ax=b,只需先求解Ly=b,再求解L^Tx=y。4. Cholesky分解在概率统计中也有广泛应用,例如用于协方差矩阵的估计和协方差矩阵的条件数值计算。总的来说,Cholesky分解是一种非常有用的数值计算方法,能够简化大规模线性方程组的解法并提高计算效率,因此在很多领域都有重要的应用价值。
Hermite转置是矩阵的共轭转置,也称为Hermitian转置。在复数矩阵中,Hermite转置是将矩阵的每个元素取复共轭(conjugate)并进行转置(transpose)得到的操作。具体而言,对于一个复数矩阵A,它的Hermite转置记作A^H,可以通过以下步骤得到:
1. 将矩阵A的每个元素取复共轭,即将每个复数元素的实部取反,虚部取负号,得到A*;
2. 将A*进行转置操作,即将矩阵A*的行列互换,得到A^H。Hermite转置可以看作是普通转置和复共轭的组合操作,它在复杂共轭运算中具有重要作用。在线性代数和信号处理等领域,Hermite转置用于定义共轭转置矩阵、求解共轭转置矩阵的特征值和特征向量等。在量子力学中,Hermite转置也被广泛用于描述厄米特矩阵(Hermitian matrix)和厄米特算子(Hermitian operator),以分析物理量的测量和性质等。
通俗易懂:什么是正交矩阵 - 知乎 (zhihu.com)
LU分解(矩阵的三角分解)
>> A=[16 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1]; [L1,U1]=lu(A)L1 =1.0000 0 0 00.3125 0.7685 1.0000 1.00000.5625 0.4352 1.0000 00.2500 1.0000 0 0U1 =16.0000 2.0000 3.0000 13.00000 13.5000 14.2500 -2.25000 0 -1.8889 5.66670 0 0 0.0000
符号(三角分解的解析解)
>> A=sym(A);[L2,U2]=lu(A)L2 =[ 1, 0, 0, 0]
[5/16, 1, 0, 0]
[9/16, 47/83, 1, 0]
[ 1/4, 108/83, -3, 1]U2 =[16, 2, 3, 13]
[ 0, 83/8, 145/16, 63/16]
[ 0, 0, -68/83, 204/83]
[ 0, 0, 0, 0]
>> A=[9,3,4,2; 3,6,0,7; 4,0,6,0; 2,7,0,9]; D=chol(A), D1=chol(sym(A))D =3.0000 1.0000 1.3333 0.66670 2.2361 -0.5963 2.83240 0 1.9664 0.40680 0 0 0.6065D1 =[3, 1, 4/3, 2/3]
[0, 5^(1/2), -(4*5^(1/2))/15, (19*5^(1/2))/15]
[0, 0, (15^(1/2)*58^(1/2))/15, (2*15^(1/2)*58^(1/2))/145]
[0, 0, 0, (4*2^(1/2)*87^(1/2))/87]
矩阵的Jordan 变换与奇异值分解 Jordan变换是将一个方阵通过相似变换(similarity transformation)转化为Jordan标准形式的过程。Jordan标准形式是一种特殊的矩阵形式,其中主对角线上有Jordan块,非对角线上有1的元素。Jordan标准形式在矩阵分析和线性代数中具有重要的作用,可以简化计算和分析复杂矩阵的性质。Jordan变换的基本思想是通过相似变换将原始矩阵转化为Jordan标准形式。相似变换指的是对一个矩阵A找到一个非奇异矩阵P,使得P^(-1)AP=D,其中D为对角线上为特征值,非对角线上为1的Jordan标准形式矩阵。通过Jordan变换,可以将一个n阶方阵转化为Jordan标准形式,方便进行矩阵的计算和分析。在实际应用中,Jordan标准形式可以用于解决线性系统的特征值分析、矩阵求逆和矩阵幂等问题。总的来说,Jordan变换是将一个矩阵通过相似变换转化为Jordan标准形式的过程,可以简化矩阵的计算和分析。
>> A=[5,7,6,5; 7,10,8,7; 6,8,10,9; 5,7,9,10];
while(1), x=floor(2*rand(4,1)); %生成一个只含有0和1的x向量
T=sym([x A*x A^2*x A^3*x]);
if rank(T)==4, break;%这个T矩阵是不是奇异,如果是奇异我把x扔掉,再找一个新的x,总能找到一个只含有0和1的x向量,使得T矩阵为非奇异矩阵,A矩阵变化成一个相伴矩阵
end, end, T, A1=inv(T)*A*TT =[1, 17, 501, 15116]
[1, 24, 697, 21013]
[0, 23, 722, 21922]
[1, 22, 680, 20682]A1 =[0, 0, 0, -1]
[1, 0, 0, 100]
[0, 1, 0, -146]
[0, 0, 1, 35]
MATLAB 中生成一个随机的列向量 x,然后构造一个矩阵 T,其中 T 的列是 A 的不同次幂与 x 的乘积。在这个过程中,使用了 while 循环来确保生成的矩阵 T 是满秩的(rank𝑇T==4),也就是线性无关的。在得到满秩的 T 后,代码计算了 A1 = inv𝑇T * A * T。这一步可以解释为通过相似变换,将矩阵 A 转化为相似矩阵 A1,其中 T 是从 A 到 A1 的过渡矩阵。在这个过程中,A1 的特殊形式可能是为了简化后续的计算和分析,这与 Jordan 变换的思想相符。 Jordan 变换的目的是将原始矩阵通过相似变换转化为 Jordan 标准形式,以便更容易地进行矩阵的计算和分析。
>> A=[3,2,2,2; 1,2,-2,-2; -1,-2,0,-2; 0,1,3,5];[V,D]=eig(sym(A)),A1=inv(V)*A*VV =[ 1, 0, 1/2, 0]
[-1, 0, -1/2, -1]
[-1, -1, -1/2, 0]
[ 1, 1, 1, 1]D =[1, 0, 0, 0]
[0, 2, 0, 0]
[0, 0, 3, 0]
[0, 0, 0, 4]A1 =[1, 0, 0, 0]
[0, 2, 0, 0]
[0, 0, 3, 0]
[0, 0, 0, 4]
如果一个矩阵没有相同的特征值,这样的矩阵才能变换成对角矩阵.如果有相同的特征值,变换成另一种矩阵,就是所谓的Jordan矩阵
>> A=[-71,-65,-81,-46; 75,89,117,50;0,4,8,4; -67,-121,-173,-58]; [V,J]=eig(sym(A))V =-17/1913/19-8/191J =[-8, 0, 0, 0]
[ 0, -8, 0, 0]
[ 0, 0, -8, 0]
[ 0, 0, 0, -8]>> [V,J]=jordan(sym(A))V =[-18496, 2176, -63, 1]
[ 14144, -800, 75, 0]
[ -8704, 32, 0, 0]
[ 20672, -1504, -67, 0]J =[-8, 1, 0, 0]
[ 0, -8, 1, 0]
[ 0, 0, -8, 1]
[ 0, 0, 0, -8]
V矩阵就是变换矩阵,J Jordan矩阵
>> A=[1 1; 5*eps,0; 0,5*eps]; rank(A) % eps是判零的误差限
ans =
2
>> A=[16,2,3,13; 5,11,10,8;9,7,6,12; 4,14,15,1]; [L,A1,M]=svd(A)L =-0.5000 0.6708 0.5000 -0.2236-0.5000 -0.2236 -0.5000 -0.6708-0.5000 0.2236 -0.5000 0.6708-0.5000 -0.6708 0.5000 0.2236A1 =34.0000 0 0 00 17.8885 0 00 0 4.4721 00 0 0 0.0000M =-0.5000 0.5000 0.6708 -0.2236-0.5000 -0.5000 -0.2236 -0.6708-0.5000 -0.5000 0.2236 0.6708-0.5000 0.5000 -0.6708 0.2236>> cond(A)ans =4.7133e+17
>> A=[1,3,5,7; 2,4,6,8]; [L,A1,M]=svd(A), A2=L*A1*M', norm(A-A2)L =-0.6414 0.7672-0.7672 -0.6414A1 =14.2691 0 0 00 0.6268 0 0M =-0.1525 -0.8226 -0.3945 -0.3800-0.3499 -0.4214 0.2428 0.8007-0.5474 -0.0201 0.6979 -0.4614-0.7448 0.3812 -0.5462 0.0407A2 =1.0000 3.0000 5.0000 7.00002.0000 4.0000 6.0000 8.0000ans =5.2937e-15