【計算方法ノート】行列分解解線形方程式群


マトリックスぶんかい


定理:


Aを非特異行列とすると、配列行列p及び単位下三角行列L及び非特異上三角行列Uが必ず存在する
PA=LU

分類:


一般的にDoolittle分解とCrout分解があります.
  • Doolittle分解
    係数行列Aを単位下三角行列(L)と上三角行列(U)に分解する
  • Crout分解
    係数行列Aを単位上三角行列と下三角行列に分解する

  • 原理:マトリクス乗算に基づいて導く


    Doolittle分解(Matlabプログラム)


    Doolittle分解、分解したマトリクスを元の係数マトリクスに保存し、メモリを減らす
    clear;
    A=[5,7,9,10;6,8,10,9;7,10,8,9;5,7,6,5];
    [n,cl]=size(A);
    b=[26;18;22;9];
    % disp(b(4)); () 
    for i=1:n
        for j=1:n
            if(i<=j)
                A(i,j)=A(i,j)-A(i,1:i-1)*A(1:i-1,j);
                %L 
            else 
                A(i,j)=(A(i,j)-A(i,1:j-1)*A(1:j-1,j))/A(j,j);
                %U 
            end
        end
    end
    
    %LUx=b
    %Ly=b y, ux=y, x
    y=zeros(4,1);
    for i=1:n
        y(i,1)=b(i,1)-A(i,1:i-1)*y(1:i-1,1);
    end
    % matlab , 
    x=zeros(4,1);
    for i=n:-1:1
        x(i,1)=(y(i,1)-A(i,i+1:n)*x(i+1:n,1))/A(i,i);
    end

    注意:


    上記のように、2次元配列で広がり行列A(1:n;1:n+1)を格納し、行列Aに基づいて処理することで、係数行列のDoolittle分解と解方程式群Ly=bを同時に行うことができ、最後に広がり行列の最後の列がyの値であり、UX=yを解くと計算が完了する.

    Crout分解(Matlabプログラム)


    特殊係数行列(対角優位の三対角行列)に対してCrout分解,これが追跡法である.
    計算しやすい記憶:L対角元(i,i)=A対角元(i,i)-A対角元左側(i,i-1)*A対角元上面(i-1,i)U次対角元(i,i+1)=A(i,i+1)/A対角元(i,i)
    A=[2,1,0,0;1,4,1,0;0,1,4,1;0,0,1,2];
    b=[-3;6;14;2];
    [n,cl]=size(A);
    x=zeros(4,1);
     % A L U, U 1 Crout 
    
     A(1,2)=A(1,2)/A(1,1);
     for i=2:n
         A(i,i)=A(i,i)-A(i,i-1)*A(i-1,i);
         if(i<=n-1)
             A(i,i+1)=A(i,i+1)/A(i,i);
         end
     end
    
    
     % LUx=b, Ly=b, Ux=b;
     x(1)=b(1)/A(1,1);
     for i=2:n
         x(i)=(b(i)-A(i,i-1)*x(i-1))/A(i,i);
     end
     x(n)=x(n);
     for i=n-1:-1:1
         x(i)=x(i)-A(i,i+1)*x(i+1);
     end
     format rat;% 
     %format 
     disp(A);
     disp(x);

    まとめ


    総じて両分解法には類似点があり,行列分解法に注意して方程式群の解精度を求めることは消元法よりも高くメモリを節約する.同時に2つの分解方法の計算順序と計算技術に注意する.Doolittle分解まず行を計算して、更に列を計算して、Crout分解は先にLを行って、更にUを計算します