矩阵的Cholesky分解

设矩阵A为n阶对称正定矩阵,则A矩阵可被分解为LL,即A= LL。其中,矩阵L是上三角矩阵。此时,这种分解就被称为Cholesky分解。在MATLAB中,Cholesky分解由函数chol实现。chol函数的语法格式有如下两种。

R = chol(X):要求矩阵X是正定矩阵,否则返回出错信息。返回的矩阵R是上三角矩阵。

[R,p] = chol(X):使用这种方式,不管矩阵X是否是正定矩阵,都不会返回出错信息。如果矩阵X是正定矩阵,则返回的矩阵R是上三角矩阵,p为零。如果矩阵X不是正定矩阵,则返回的矩阵R是上三角矩阵,p为正数。

在命令窗口中输入

code.matlab
>> a=[3 -1 1;-1 5 2;1 2 4];
>> b=chol(a)
b =
    1.7321  	-0.5774   	0.5774
         0   	2.1602   	1.0801
         0         0    	1.5811

下例中矩阵B不是正定矩阵。

在命令窗口中输入

code.matlab
>> B = [3 -2 -.9 2*eps;-2 4 -1 -eps;-eps/4 eps/2 -1 0;-.5 -.5 .1 1];
>> [b,p]=chol(B)
b =
    1.7321   -1.1547
         0    1.6330
p =
     3

此时,若采用第一种调用方式,则会返回出错信息。

在命令窗口中输入

code.matlab
>> B = [3 -2 -.9 2*eps;-2 4 -1 -eps;-eps/4 eps/2 -1 0;-.5 -.5 .1 1];
>> b=chol(B)
??? Error using ==> chol
Matrix must be positive definite.