zoukankan      html  css  js  c++  java
  • matlab 求解线性方程组之LU分解

    线性代数中的一个核心思想就是矩阵分解,既将一个复杂的矩阵分解为更简单的矩阵的乘积。常见的有如下分解:

    LU分解:A=LU,A是m×n矩阵,L是m×m下三角矩阵,U是m×n阶梯形矩阵

    QR分解:

    秩分解:A=CD  ,  A是m×n矩阵,C是m×4矩阵,D是4×n矩阵。

    奇异值分解:A=UDVT

    谱分解:

    在求解线性方程组中,一个核心的问题就是矩阵的LU分解,我们将一个矩阵A分解为两个更加简单的矩阵的复合LU,其中L是下三角矩阵,U是阶梯形矩阵。下三角矩阵和上三角矩阵具有非常良好的性质:Lx=y 或者Ux=y 很容易求解。

    问题1.对于任意的矩阵A,是否存在LU分解?

     定理:如果A行等价于阶梯形矩阵U,那么(EnEn-1......E1)A=U,其中的Ei,i=1,2,.....,n是高斯消去矩阵,他们都是下三角矩阵,并且都可逆。

     这个定理告诉我们三件事:

      1.并不是所有的矩阵都有LU分解的。

      2.A=LU=(EnEn-1......E1)-1U=(E1-1E2-1.....En-1)U。

      3.这个定理还给出了求解矩阵A-1的一种方法。

    数值算法1.Gauss消去

    用Gauss消去法将矩阵A行变换为U:

       

    用Gauss消去矩阵将A行变换为U:

    数值算法2.Gauss-jardon

        过程和Gauss-jardon基本一致,之不多在选择完最大元之后,将其化为1,这样就可以通过乘以一个倍数来消去其他行了。

    选择主元

       当对某一列进行Gauss消去时,一般都是选择这一列中绝对值最大的一个元素作为主元,当然这会进行行交换。其好处有一下几点:

    1.在Gauss会代的过程中,不会出现除数为0的情况。

    2.减少误差传播,这主要是因为乘数小于等于1.

      (为何乘数小于等于1,如果选择这一列中绝对值最大的一个元素作为主元,我们假设这个元素是a,那么乘数等于-b/a,此时|b/a|<=1)。

    为什么不用绝对值最小的元素做主元?易知此时乘数的绝对值大于等于1,会增加误差的传播累计。

    为什么应该避免用接近于0的数做主元?此时乘数可能非常大,参加如下例子:

       

  • 相关阅读:
    SCI写作经典替换词,瞬间高大上!(转)
    最佳化常用测试函数 Optimization Test functions
    算法复杂度速查表
    VS 代码行统计
    CPLEX IDE 菜单栏语言设置( 中文 英文 韩文 等多国语言 设置)
    如何从PDF文件中提取矢量图
    Matlab无法打开M文件的错误( Undefined function or method 'uiopen' for input arguments of type 'char)
    visual studio 资源视图 空白 解决方案
    MFC DialogBar 按钮灰色不响应
    嗨翻C语言笔记(二)
  • 原文地址:https://www.cnblogs.com/francisYoung/p/5367600.html
Copyright © 2011-2022 走看看