矩阵C中的运行时错误

时间:2017-06-17 15:55:44

标签: c

我在使用此功能时遇到了问题。它是一个LU分解程序。我试图读取列而不是行,因为我想把数组b的元素放在那里。如果你能帮助我,我会感激不尽。

void lower(int N, double *b){
int i, j, k, Z=0;
double **L;

L = (double **) calloc(N, sizeof(double*));
for(i=0; i<N; i++){
    L[i] = (double *) calloc(N, sizeof(double));
    for(j=0; j<N; j++){
        for(k=i; k<N; k++){
            if(k > j){
                L[k][j] = b[Z];
                Z++;
            }
            else if (k == j)
                L[k][j] = 1;

        }
    }
}

print_matriz(N, L);
free(L);}

如果我这样做:

`for(i=0; i<N; i++){
        L[i] = (double *) calloc(N, sizeof(double));
        for(j=0; j<N; j++){
            if(i > j){
                L[i][j] = b[Z];
                Z++;
            }
            else if(i == j)
                L[i][j] = 1;

        }
    }`

我在下面得到以下结果: 我试图制作一个这样的矩阵(例子):

1 0 0 0 
2 1 0 0
3 5 1 0
4 6 7 1

但相反,我得到了这个:`

1 0 0 0 
2 1 0 0
3 4 1 0
5 6 7 1

`

1 个答案:

答案 0 :(得分:0)

编辑:

如下面的评论所述,我认为您的目标是这样的? (目前无法验证,抱歉)

void lower(int N, double *b){
    int i, j, k, Z=0;
    double **L;

    L = calloc(N, sizeof(double*));
    for(i=0; i<N; i++){
        L[i] = calloc(N, sizeof(double));
    }
    for(j=0; j<N; j++){
        for(k=0; k<N; k++){
            if(k > j){
                L[k][j] = b[Z];
                Z++;
            }
            else if (k == j)
                L[k][j] = 1;
            }
        }
    }

    print_matriz(N, L);

    for(i=0; i<N; i++){
      free(L[i]);
    }
    free(L);
}