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
input('A矩陣不是對稱正定矩陣,請重新運行程序')
end
end
%分解A,使A=L*L'
for k=1:n
t1=0; %中間變量t1
for j=1:k-1 %式(1.1)
t1=t1+L(k,j)^2;
end
L(k,k)=sqrt(A(k,k)-t1);
for i=k+1:n
t2=0; %中間變量t2
for j=1:k-1 %式(1,2)
t2=t2+L(i,j)*L(k,j);
end
L(i,k)=(A(i,k)-t2)/L(k,k);
end
end
%分解Ax=b爲Ly=b L'x=y
%求y
for k=1:n
t3=0; %中間變量t3
for j=1:k-1 %式(1,3)
t3=t3+L(k,j)*y(j);
end
y(k)=(b(k)-t3)/L(k,k);
end
%求x
for k=n:-1:1
t4=0; %中間變量t4
for j=k+1:n %式(1,4)
t4=t4+L(j,k)*x(j);
end
x(k)=(y(k)-t4)/L(k,k);
end
x
y
L