矩阵LU分解求逆详细分析与C语言实现 联系客服

发布时间 : 星期三 文章矩阵LU分解求逆详细分析与C语言实现更新完毕开始阅读867c93caf8b069dc5022aaea998fcc22bcd14313

(3)求A的逆矩阵

由式(10)可计算得到矩阵A的逆,如下:A?1?u?l??0.25?0.166667?0.125?4.5????00.3333300???000.5?2??1?2?????0004???3??1.916667??8.833334?3.666675.5?4.5????0.666670.3333300???5.333333?2.666673?2????7.6666673.33333?54??由程序计算出的结果如下:

01?20.8333300?00?10???1.251??9

2、C语言程序设计及测试 2.1 算法c程序实现

#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(\ for(i=0;i

scanf(\//////////////////figure the input

matrix////////////////////////// printf(\输入矩阵:\\n\for(i=0;i

for(j=0;j

a[0][j]=a[0][j]; //计算U矩阵的第一行

for(i=1;i

a[i][0]=a[i][0]/a[0][0]; //计算L矩阵的第1列

for(k=1;k

for(j=k;j

for (i=0;i

10

s=s+a[k][i]*a[i][j]; //累加 a[k][j]=a[k][j]-s; //计算U矩阵的其他元素 }

for(i=k+1;i

for(j=0;j

t=t+a[i][j]*a[j][k]; //累加 a[i][k]=(a[i][k]-t)/a[k][k]; //计算L矩阵的其他元素 } }

for(i=0;ij)

{ L[i][j]=a[i][j]; U[i][j]=0;}//如果i>j,说明行大于列,计算矩阵的下三角部分,得出L的值,U的//为0 else

{ U[i][j]=a[i][j];

if(i==j) L[i][j]=1; //否则如果i

if(U[1][1]*U[2][2]*U[3][3]*U[4][4]==0){

flag=0;

printf(\逆矩阵不存在\ if(flag==1){

/////////////////////求L和U矩阵的逆

for (i=0;i

for (k=i-1;k>=0;k--) {s=0;

for (j=k+1;j<=i;j++) s=s+U[k][j]*u[j][i];

u[k][i]=-s/U[k][k];//迭代计算,按列倒序依次得到每一个值, } }

for (i=0;i

for (k=i+1;k

r[k][i]=r[k][i]-L[k][j]*r[j][i]; //迭代计算,按列顺序依次得到每一个值 } }

/////////////////绘制矩阵LU分解后的L和U矩阵///////////////////////

printf(\分解后L矩阵:\ for(i=0;i

printf(\ }

printf(\分解后U矩阵:\ for(i=0;i

printf(\ }

printf(\

////////绘制L和U矩阵的逆矩阵 printf(\矩阵的逆矩阵:\ for(i=0;i

printf(\ }

printf(\矩阵的逆矩阵:\ for(i=0;i

printf(\ }

printf(\

//验证将L和U相乘,得到原矩阵 printf(\矩阵和U矩阵乘积\\n\ for(i=0;i

11

}

for(i=0;i

for(j=0;j

{out[i][j]+=L[i][k]*U[k][j];} } }

for(i=0;i

for(j=0;j

printf(\ }

//////////将r和u相乘,得到逆矩阵 printf(\原矩阵的逆矩阵:\\n\ for(i=0;i

2.2 数据测试 (1)非满秩矩阵

1>、整数矩阵

for(j=0;j

for(i=0;i

for(i=0;i

printf(\ } } }

12