/**
*LU分解函数(V2非递归法)
*@param A (in)输入矩阵
*@param L (out)输出L阵
*@param U (out)输出U阵
*@param size (in)矩阵的大小
*@return 分解成功返回非零值,青年人网站提示失败返回零
*/
int LUDecomposition(double **A, double **L, double **U, int size)
{
int i, j, k;
double **Ax;
Ax = (double**)malloc(sizeof(double*)*size);
for (i = 0; i < size; i++)
Ax[i] = (double*)malloc(sizeof(double)*size);
for (i = 0; i < size; i++)
for (j = 0; j < size; j++)
Ax[i][j] = A[i][j];
for (i = 1; i < size; i++)
for (j = 0; j < i; j++)
U[i][j] = 0;
for (i = 0; i < size; i++)
{
L[i][i] = 1;
for (j = i+1; j < size; j++)
L[i][j] = 0;
}
for (k = 0; k < size; k++)
{
U[k][k] = Ax[k][k];
for (i = k+1; i < size; i++)
{
L[i][k] = Ax[i][k] / U[k][k];
U[k][i] = Ax[k][i];
}
for (i = k+1; i < size; i++)
for (j = k+1; j < size; j++)
Ax[i][j] = Ax[i][j] - L[i][k] * U[k][j];
}
for (i = 0; i < size; i++)
free(Ax[i]);
free(Ax);
return 1;
}
责任编辑:小草