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

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

matlab 求解线性方程组之LU分解的更多相关文章

  1. [Matlab]求解线性方程组

    转自:http://silencethinking.blog.163.com/blog/static/911490562008928105813169/ AX=B或XA=B在MATLAB中,求解线性方 ...

  2. matlab实现高斯消去法、LU分解

    朴素高斯消去法: function x = GauElim(n, A, b) if nargin < 2 for i = 1 : 1 : n for j = 1 : 1 : n A(i, j) ...

  3. 计算方法 -- 解线性方程组直接法(LU分解、列主元高斯消元、追赶法)

    #include <iostream> #include <cstdio> #include <algorithm> #include <cstdlib> ...

  4. matlab 求解线性方程组之范数

    1.赋范线性空间和内积空间 在线性代数的初级教材里,一般是在向量空间中定义内积,然后再由内积来导出范数,比如在n维实向量空间中: |x||=√<x,x> 在线性代数的高级教材中,一般是将内 ...

  5. 矩阵LU分解分块算法实现

    本文主要描述实现LU分解算法过程中遇到的问题及解决方案,并给出了全部源代码. 1. 什么是LU分解? 矩阵的LU分解源于线性方程组的高斯消元过程.对于一个含有N个变量的N个线性方程组,总可以用高斯消去 ...

  6. LU分解(1)

    1/6 LU 分解          LU 分解可以写成A = LU,这里的L代表下三角矩阵,U代表上三角矩阵.对应的matlab代码如下: function[L, U] =zlu(A) % ZLU ...

  7. MATLAB矩阵的LU分解及在解线性方程组中的应用

    作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 三.实验程序 五.解答(按如下顺序提交电子版) 1.(程序) (1)LU分解源程序: function [ ...

  8. matlab中求解线性方程组的rref函数

    摘自:http://www.maybe520.net/blog/987/ matlab中怎么求解线性方程组呢? matlab中求解线性方程组可应用克拉默法则(Cramer's Rule)即通过det( ...

  9. 矩阵LU分解的MATLAB与C++实现

    一:矩阵LU分解 矩阵的LU分解目的是将一个非奇异矩阵\(A\)分解成\(A=LU\)的形式,其中\(L\)是一个主对角线为\(1\)的下三角矩阵:\(U\)是一个上三角矩阵. 比如\(A= \beg ...

随机推荐

  1. linux(centOS)下安装Oracle步骤

    ##创建用户和组: [LanRS@localhost ~]$ su root #切换到root Password: [root@localhost LanRS]# groupadd oinstall ...

  2. Python全栈开发【基础四】

    Python全栈开发[基础四] 本节内容: 匿名函数(lambda) 函数式编程(map,filter,reduce) 文件处理 迭代器 三元表达式 列表解析与生成器表达式 生成器 匿名函数 lamb ...

  3. MyBatis:统计数量

    dao: /** * 统计商家的案例数量 * * @param shopId * @return */ long countByShopId(Long shopId); @Override publi ...

  4. GLUT的简洁OO封装

    毕业设计用到了OpenGL,由于不会用MFC和Win32API做窗口程序:自然选用了GLUT.GLUT很好用,就是每次写一堆Init,注册callback,觉得有点恶心,于是对他做了简单的OO封装.记 ...

  5. java dom4j封装和解析XML

    package org.scbit.lsbi.scp.utils; import java.util.ArrayList; import java.util.List; import org.dom4 ...

  6. 我的CPG插件 (什么是CPG,就是跟号称全球唯一C++编写的魔镜是一样的格式的)

  7. Reverse Core 第一部分 代码逆向技术基础

    @date: 2016/10/14 <逆向工程核心原理>笔记 记录书中较重要的知识,方便回顾 ps. 因有一些逆向基础,所以我本来就比较熟悉的知识并未详细记录 第一章 关于逆向工程 目标, ...

  8. shell:遍历目录和子目录的所有文件

    #!/bin/bash function getdir(){ ` do dir_or_file=$"/"$element if [ -d $dir_or_file ] then g ...

  9. 虚拟机安装windows服务出现无法打开内核设备“\\.Global\vmx86”

    解决方法: 在cmd下依次输入net start vmci,net start vmx86,net start VMnetuserif三个命令即可

  10. 常用类string的用法

    在Java中string是我们用的很多的一种类,下面就来说说string类中经常用到的一些方法. 1.string与数组相关的方法: 比如:string str = "fsafdsafdas ...