文档库 最新最全的文档下载
当前位置:文档库 › LU分解

LU分解


#include

//矩阵赋值,把一个矩阵赋值给另一个矩阵
void fuzhi(float abc[][4],float other_abc[][4],int n)
{
int i,j;
for(i = 0;ifor(j = 0;iabc[i][j] = other_abc[j][i];
}
//矩阵的转置
void ni(float abc[][4],int n)
{
int i,j;
// float temp;
for(i = 0;ifor(j = 0;i{
if(i != j)
abc[i][j] = -(abc[i][j]);
}
}

//矩阵相乘
void mutiply(float b[][4],float c[][4], float a[][4], int n)
{
int i,j,k;
for(j=0;j{
for(i=0;i{
for(k=0;ka[j][i]+= b[j][k]*c[k][i];
}
}
}

// LU分解的主函数
void LU_func(float array[][4],float L[][4],float U[][4])
{
int k,i,n;
//float m;
float mm[4][4];
// float m3[4][4];
// float mm[3]; //用来存放倍数

//m2 = {{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}
//m3 = {{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}
// float mm[3];
for(k = 0;k < 3;k++)
{
float m[4][4] = {{1.0,0,0,0},{0,1.0,0,0},{0,0,1.0,0},{0,0,0,1.0}};
if(array[k][k] = 0)
{
printf("错了");//无LU分解
}
for(i = k+1;i < 4;i++)
{
m[k][i] = -(array[k][i]/array[k][k]);
for(n = 0;n < 4; n++)
{
array[i][n] = array[i][n] + m[k][i] * array[k][n];
}
}
fuzhi(mm,L,4);
ni(m,4);
mutiply(mm,m,L,4);
}
fuzhi(U,array,4);
//U = array;

}
void main()
{
//float array[4][4]; //定义数组A
float L[4][4];
float U[4][4];
int i,j;
float array[4][4] = {{21.0,67.0,88.0,73.0},{76.0,63.0,7.0,20.0},{0.0,85.0,56.0,54.0},{19.3,43.0,30.2,29.4}}; //数组A初始化
for(i = 0;i<4;i++)
{
for(j = 0;i<4;i++)
{
printf("%f, ",array[i][j]);
}
printf("\n");

}
for(i = 0;i<4;i++)
{
for(j = 0;i<4;i++)
{
printf("%f, ",L[i][j]);
}
printf("\n");

}
for(i = 0;i<4;i++)
{
for(j = 0;i<4;i++)
{
printf("%f, ",U[i][j]);
}
printf("\n");

}

}

相关文档