📄 cholesky.m
字号:
%正定矩阵的Cholesky分解
function[]=Cholesky(input)
[m,n]=size(input);
if m~=n %判断输入的矩阵是不是方阵
disp('输入的矩阵不是方阵,请重新输入');
return;
end
for i=1:n %判断输入的矩阵是不是对称矩阵
for j=1:n
if input(i,j)~=input(j,i)
disp('输入的方阵不是对称矩阵,请重新输入');
return;
end
end
end
d=eig(input); %根据方阵的特征值判定是不是正定矩阵
for i=1:n
if d(i)<=0
disp('输入的矩阵不是正定矩阵,请重新输入');
return;
else
break;
end
end
disp('输入的矩阵可以进行Cholesky分解'); %如果是正定矩阵,可以进行下面的分解操作
L(1,1)=sqrt(input(1,1)); %确定第1列元素
for i=2:n
L(i,1)=input(i,1)/L(1,1);
end
sum1=0;
for j=2:n-1 %确定第j列元素
for k=1:j-1
sum1=sum1+L(j,k)^2;
end
L(j,j)=sqrt(input(j,j)-sum1);
sum1=0;
for i=j+1:n
for k=1:j-1
sum1=sum1+L(i,k)*L(j,k);
end
L(i,j)=(input(i,j)-sum1)/L(j,j);
end
sum1=0;
end
for k=1:n-1 %确定第n列元素
sum1=sum1+L(n,k)^2;
end
L(n,n)=sqrt(input(n,n)-sum1);
L
L'
disp('验证结果:L*L');
L*L'
%验证分解是否正确
disp('请验证Cholesky分解正确(是/否)?');
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -