平方根法

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=bLy=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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章