矩阵LU分解算法分析

什么是矩阵LU的分解呢?顾名思义LU分解就是讲矩阵分解成下三角矩阵L和上三角矩阵U。在讨论这个问题之前呢我们先从线性代数方面回顾一下一些相关的知识吧,其实说到矩阵我们头脑中自然而然的就会想到行列式,其实行列式和矩阵是有区别的,行列式表示一个数,而矩阵则表示的是一组向量。下面先了解下矩阵的一些基本的性质和运算,然后再看矩阵LU分解(我们这里讨论的矩阵式非奇异矩阵|A|!=0)。

1)对n阶矩阵A进行转置

start

    for i=1 to n-1{//行i

        for j=0 to i-1{//列j

             swap(A[i][j],A[j][i]);//交换

        }

     }

end

2)对n阶矩阵A和列向量x的乘法运算:A*x=y

start

     for i=0 to n-1{行i

          y[i]=0;

          for j=0 to n-1{列j

               y[i]=y[i]+A[i][j]*x[j];

          }

      }

end

3)对m*n阶矩阵A和n*k阶矩阵X的乘法运算:A*X=Y

两个不同阶的矩阵相乘时需要满足A的列和X的行相同,我们这样将矩阵X看成k个列向量,那么其余A相乘就相当于执行k次算法2)。

start

       for i=0 to m-1{

            for j=0 to k-1{

                 Y[i][j]=0;

                 for p=0 to n-1{

                      Y[i][j]=Y[i][j]+A[i][p]*X[p][j];

                  }

              }

        }

end

 

下面来进入正题吧,矩阵的LU分解:n阶矩阵A利用高斯消元求得上三角矩阵如下,故此下三角矩阵就显然可得了。(注:矩阵元素项的上标k表示第k次变换前状态,如k=1则表示第1次变换前状态)

 矩阵LU分解算法分析_第1张图片

 从图中分析可知,我们知道对于第i行j列元素a[ij]的第k+1次变换,有

 矩阵LU分解算法分析_第2张图片

设A=L*U,那么有如下数学表达:

 矩阵LU分解算法分析_第3张图片

 由上分析我们对矩阵LU分解算法描述如下:

start

       for k=0 to n-1{//主行

            for i=k+1 to n-1{

                 a[i][k]=a[i][k]/a[k][k];//乘子,消去第i行的k列

            }

           for i=k+1 to n-1{//对k+1...n-1行

                for j=k+1 to n-1{//对k+1...n-1列

                     a[i][j]=a[i][j]-a[i][k]*a[k][j];//消元

                 }

           }

       }

      for i=0 to n-1{

           for j=0 to n-1{

                if (j

                      l[i][j]=a[i][j];//下三角矩阵

               else

                      u[i][j]=a[i][j];//上三角矩阵

           }

      }

end

你可能感兴趣的:(算法与数据结构)