设矩阵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.