![]() ![]() |
|
C++基础(满秩矩阵的LU分解) | |
作者:佚名 文章来源:不详 点击数 更新时间:2008/11/1 20:41:28 文章录入:杜斌 责任编辑:杜斌 | |
|
|
*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; } |
|
![]() ![]() |