-1

コレスキー法を C で実装していますが、この時点でプログラムが終了します。

答えの後:(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;
}

私はここで何か間違っていますか?

4

1 に答える 1

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

この関数では、配列の長さを と仮定しますN。これは、配列の最後のインデックスが at ではN-1ないことを意味しNます。コードを次のように変更します。

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

残りも同様です。

于 2014-02-16T17:06:50.703 に答える