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的数做主元?此时乘数可能非常大,参加如下例子:

       

  • 相关阅读:
    CSS中文API
    廖雪峰Git教程
    数据操作的几个名词即model、dal、dao、orm和ar 解释
    Jetty
    Git介绍与使用
    c3p0、dbcp、druid三大连接池对比
    (转)JavaWeb——Servlet(全网最详细教程包括Servlet源码分析)
    08 bash特性--shell脚本编程入门
    07 grep命令与正则表达式
    06 I/O重定向与管道符
  • 原文地址:https://www.cnblogs.com/francisYoung/p/5367600.html
Copyright © 2011-2022 走看看