平方根法

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

%%

%created by TGU cuienen1912

你可能感兴趣的:(matlab程序,数值计算方法)