众所周知,MATLAB有进行LU分解的函数lu,下面就是lu函数的厂商代码,相信这段程序,对大家编写线性方程组直接解法的诸多算法都有启发作用。

%%%%%%%%%%%%%%%

function [L,U,x]=lux(A,b)
%LU 分解法解线性方程组(列主元LU分解)
[n,n]=size(A);
p=eye(n);%p记录了选择主元时候所进行的行变换
for k=1:n-1
     [r,m]=max(abs(A(k:n,k)));  %选列主元
     m=m+k-1;
     if(A(m,k)~=0)
         if(m~=k)
             A([k m],:)=A([m k],:);
             p([k m])=p([m k]);
        end
        for i=k+1:n   
             A(i,k)=A(i,k)/A(k,k);
             j=k+1:n;
             A(i,j)=A(i,j)-A(i,k)*A(k,j);
        end
    end
end
L=tril(A,-1)+eye(n,n);
U=triu(A);
%解下三角矩阵 Ly=b
 newb=p*b;
 y=zeros(n,1);
for k=1:n
    j=1:k-1;
    y(k)=(newb(k)-L(k,j)*y(j))/L(k,k);
end
%解上三角方程组  Ux=y
x=zeros(n,1);
for k=n:-1:1
     j=k+1:n;
     x(k)=(y(k)-U(k,j)*x(j))/U(k,k);
end

posted on 2008-12-16 09:23  秋波渡  阅读(6062)  评论(1编辑  收藏  举报