C语言中的乔列斯基因式分解?

标签 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;
}

我在这里做错了什么吗?

最佳答案

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

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

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

其余类似。

关于C语言中的乔列斯基因式分解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21814399/

相关文章:

c++ - 使用 CMake 将 open62541 库构建为外部库

c - 使用 imagemagick API 截图

c++ - 快速稀疏矩阵乘法

matlab - 根据输入在matlab中实现的异常行为算法

python - Matplotlib - 为什么我的箭袋图总是关闭?

c - 使用 OpenCV 检测小圆圈(图像质量差)

c - 在 C 语言中,当 I/P 大小增加到超过 5 时,程序执行会发生变化

r - 在 R 中创建多个相同(相同维度)矩阵的列表

python - 循环填充Python中的矩阵

matlab - 仅在非零条目不同结果时评估 arrayfun