我在使用此功能时遇到了问题。它是一个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
`
答案 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);
}