满秩矩阵的LU 分解-递归法(Chpter28)

  1. /**
  2. *LU分解函数
  3. *@param     A       (in)输入矩阵
  4. *@param     L       (out)输出L阵
  5. *@param     U       (out)输出U阵
  6. *@param     size    (in)矩阵的大小
  7. *@return    分解成功返回非零值,失败返回零
  8. */

  9. int LUDecomposition(double **A, double **L, double **U, int size)
  10. {
  11.     double **Ax, **Lx, **Ux;
  12.     int i, j;
  13.     if (A[0][0] == 0)
  14.     {
  15.         fprintf(stderr, "Error: In LUDecomposition./n");
  16.         return 0;
  17.     }
  18.     if (size == 1)
  19.     {
  20.         L[0][0] = 1;
  21.         U[0][0] = A[0][0];
  22.         return 1;
  23.     }
  24.     Ax = (double**)malloc(sizeof(double*)*(size-1));
  25.     Lx = (double**)malloc(sizeof(double*)*(size-1));
  26.     Ux = (double**)malloc(sizeof(double*)*(size-1));
  27.     for (i = 0; i < size-1; i++)
  28.     {
  29.         Ax[i] = (double*)malloc(sizeof(double)*(size-1));
  30.         Lx[i] = (double*)malloc(sizeof(double)*(size-1));
  31.         Ux[i] = (double*)malloc(sizeof(double)*(size-1));
  32.     }
  33.     for (i = 0; i < size-1; i++)
  34.         for (j = 0; j < size-1; j++)
  35.         {
  36.             Ax[i][j] = A[i+1][j+1] - A[0][j+1] * A[i+1][0] / A [0][0];
  37.         }
  38.     if (!LUDecomposition(Ax, Lx, Ux, size-1))
  39.     {
  40.         fprintf(stderr, "Error: In LUDecomposition./n");
  41.         return 0;
  42.     }
  43.     L[0][0] = 1;
  44.     U[0][0] = A[0][0];
  45.     for (i = 1; i < size; i++)
  46.     {
  47.         L[0][i] = 0;
  48.         L[i][0] = A[i][0]/A[0][0];
  49.         U[0][i] = A[0][i];
  50.         U[i][0] = 0;
  51.         for (j = 1; j < size; j++)
  52.         {
  53.             L[i][j] = Lx[i-1][j-1];
  54.             U[i][j] = Ux[i-1][j-1];
  55.         }
  56.     }
  57.     for (i = 0; i < size-1; i++)
  58.     {
  59.         free(Ax[i]);
  60.         free(Lx[i]);
  61.         free(Ux[i]);
  62.     }
  63.     free(Ax);
  64.     free(Lx);
  65.     free(Ux);
  66.     return 1;
  67. }

你可能感兴趣的:(算法导论)