C中的Cholesky分解?

时间:2014-02-16 16:59:52

标签: c matrix linear-algebra factorization linear-equation

我在C中实现了Cholesky方法,但程序在到达此时就退出了。

答案之后:现在它的工作得益于(devnull&piotruś)的答案,但它并没有给我正确的答案

/* Ax=b
 *This algorithm does:
 *   A = U * U' 
 * with
 *   U  := lower left triangle matrix
 *   U' := the transposed form of U.
 */

double** cholesky(double **A, int N) //this gives me the U (edited)
{
    int i, j, k;
    double sum, **p, **U;
    U=(double**)malloc(N*sizeof(double*));
    for(p=U; p<U+N; p++)
        *p=(double*)malloc(N*sizeof(double));
    for (j=0; j<N; j++) {
        sum = A[j][j];
        for (k=0; k<(j-1); k++) sum -= U[k][j]*U[k][j];
            U[j][j] = sqrt(sum);
            for (i=j; i<N; i++) {
                sum = A[j][i];
                for (k=0; k<(j-1); k++)
                    sum -= U[k][j]*U[k][i];
                U[j][i] = sum/U[j][j];
            }
    }
return U;
}
我在这里做错了吗?

1 个答案:

答案 0 :(得分:0)

double** cholesky(double **A, int N)

在此函数中,假设数组长度为N。这意味着数组的最后一个索引位于N-1而不是N。将代码更改为:

for ( j = 0; j < N; ++j)

其他类似的。