打印本文 打印本文  关闭窗口 关闭窗口  
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;
  }
打印本文 打印本文  关闭窗口 关闭窗口