clear
clc
A=input('请输入对称正定矩阵A=')
b=input('请输入b=')
n=length(A(:,1)); %求A矩阵第一列的长度,即矩阵维数
for k=1:n
if (det(A(1:k,1:k)))<=0 %由于对称正定矩阵A,必有det(A)>0
disp('A矩阵不是对称正定矩阵,请重新运行程序')
end
end
%分解A,使A=L*D*L'
for i=1:n
L(i,i)=1;
end
for k=1:n
t1=0;
for j=1:k-1
t1=t1+L(k,j)^2*d(j);
end
d(k)=A(k,k)-t1;
for i=k+1:n
t2=0;
for j=1:k-1
t2=t2+L(i,j)*d(j)*L(k,j);
end
L(i,k)=(A(i,k)-t2)/d(k);
end
end
for k=1:n
for i=k+1:n
U(i,k)=L(i,k)*d(k);
end
end
for k=2:n
t3=0;
for j=1:k-1
t3=t3+U(k,j)*L(k,j);
end
d(k)=A(k,k)-t3;
for i=k:n
t4=0;
for j=1:k-1
t4=t4+U(i,j)*L(k,j);
end
U(i,k)=A(i,k)-t4;
end
L(i,k)=U(i,k)/d(k);
end
%分解Ax=b 为 Ly=b L'x=inv(D)*y
%求y
for k=1:n
t5=0;
for j=1:k-1
t5=t5+L(k,j)*y(j);
end
y(k)=b(k)-t5;
end
%求x
for k=n:-1:1
t6=0;
for j=k+1:n
t6=t6+L(j,k)*x(j);
end
x(k)=y(k)/d(k)-t6;
end
x
y
D=diag(d)
L
%%
%created by TGU cuienen1912