矩阵的一种有效而广泛应用的分解方法是矩阵的LU三角分解,将一个n阶矩阵A分解为一个下三角矩阵L和一个上三角矩阵U的乘积。所以首先对矩阵进行三角分解,这里采用Doolittle分解,即分解为一个下三角矩阵(对角元素为1),和一个上三角矩阵的乘积。再进行相应的处理。
所以,矩阵求逆的算法流程可表述如下:
1)进行LU分解;
2)对分解后的L阵(下三角矩阵)和U阵(上三角矩阵)进行求逆;
3)L阵的逆矩阵和U阵的逆矩阵相乘,即可求得原来矩阵的逆。即:
程序实现如下:
#include
#include
#define N 4
void main()
{
float a[N][N];
float L[N][N],U[N][N],out[N][N], out1[N][N];
float r[N][N],u[N][N];
memset( a , 0 , sizeof(a)); //初始化
memset( L , 0 , sizeof(L));
memset( U , 0 , sizeof(U));
memset( r , 0 , sizeof(r));
memset( u , 0 , sizeof(u));
int n=N;
int k,i,j;
int flag=1;
float s,t;
input a matrix
printf