我在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;
}
我在这里做错了吗?
答案 0 :(得分:0)
double** cholesky(double **A, int N)
在此函数中,假设数组长度为N
。这意味着数组的最后一个索引位于N-1
而不是N
。将代码更改为:
for ( j = 0; j < N; ++j)
其他类似的。