C++基礎(chǔ)(滿秩矩陣的LU分解)

字號(hào):

/**
    *LU分解函數(shù)(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;
    }