LU分解求逆

您所在的位置:网站首页 南沙台风最新消息今天 LU分解求逆

LU分解求逆

2024-03-24 04:03| 来源: 网络整理| 查看: 265

文章转自:

https://www.cnblogs.com/bigmonkey/p/9555710.html

https://blog.csdn.net/xx_123_1_rj/article/details/39553809

什么是LU分解

在线性代数中, LU分解是矩阵分解的一种,可以将一个矩阵分解为一个单位下三角矩阵和一个上三角矩阵的乘积(有时是它们和一个置换矩阵的乘积)

如果有一个矩阵A,将A表示成下三角矩阵L和上三角矩阵U的乘积,称为A的LU分解。

 

  更进一步,我们希望下三角矩阵的对角元素都为1:

LU分解的步骤

  上一章讲到,对于满秩矩阵A来说,通过左乘一个消元矩阵,可以得到一个上三角矩阵U。

  可以看到,L实际上就是消元矩阵的逆。容易知道二阶矩阵的逆:

 

  现在假设A是一个3×3矩阵,在不考虑行交换的情况下,通过消元得到上三角矩阵的过程是:

 

 

LU 分解的前提

  并非所有矩阵都能进行LU分解,能够LU分解的矩阵需要满足以下三个条件:

矩阵是方阵(LU分解主要是针对方阵); 矩阵是可逆的,也就是该矩阵是满秩矩阵,每一行都是独立向量; 消元过程中没有0主元出现,也就是消元过程中不能出现行交换的初等变换  示例

  

  如果A存在LU分解存,a,b满足什么条件?

  使用消元法逐一消去主元:

  由于E31 中出现了 –b/a,所以a ≠ 0

 

  b可以是任意常数。

 

具体的算法流程可以是:

 

1)进行LU分解;

2)对分解后的L阵(下三角矩阵)和U阵(上三角矩阵)进行求逆;

3)L阵的逆矩阵和U阵的逆矩阵相乘,即可求得原来矩阵的逆。即:

程序实现如下:

 

1 #include 2 #include 3 #define N 4 4 void main() 5 { 6 float a[N][N]; 7 float L[N][N],U[N][N],out[N][N], out1[N][N]; 8 float r[N][N],u[N][N]; 9 memset( a , 0 , sizeof(a)); //初始化 10 memset( L , 0 , sizeof(L)); 11 memset( U , 0 , sizeof(U)); 12 memset( r , 0 , sizeof(r)); 13 memset( u , 0 , sizeof(u)); 14 int n=N; 15 int k,i,j; 16 int flag=1; 17 float s,t; 18 ////////////////////input a matrix//// 19 printf("input A=\n"); 20 for(i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3