【发布时间】:2017-10-13 21:24:43
【问题描述】:
我正在尝试将 2 个矩阵 A 和 B 相乘,然后将结果存储在 c 中。矩阵存储在一维数组中。谁能告诉我我的代码有什么问题,为什么我不能打印矩阵 a 和 b 相乘得到的结果。
#include <stdio.h>
#include <stdlib.h>
int main(){
int m, i, j, k, n, x;
double *A, *B, *C, sum;
//allocating dynamic memory
A= (double*)malloc(m*n*sizeof(double));
B= (double*)malloc(m*n*sizeof(double));
C= (double*)malloc(m*n*sizeof(double));
//initializing matrices with values
for(i =0; i< m*n; i++){
A[i] = 1.;
B[i] = 2.;
}
//Multiplying the matrices
for(i=0; i<m; i++ ){
for (j=0; j<n; j++){
sum =0;
for(k=0; k<n; k++){
sum+= A[i*n +k]* B[k*n +j];
C[i*n +j] = sum;
printf("matrix result %f\n", C[i*n +j]);
}
}
}
return 0;
}
【问题讨论】:
-
m和n在哪里初始化?您正在使用未初始化的变量。 -
看到在你的
malloc调用中使用这些变量之前没有初始化这些变量,这个程序将会爆炸。 始终在使用变量之前对其进行初始化。您还应该在更接近使用它们的位置声明变量,或者给它们起更长、更有意义的名称。这段代码就像一个谜。 -
您好,感谢您的回复,我确定我在顶部初始化了变量,并且没有收到任何编译错误。
-
除此之外,您还要提前打印 C。完成乘法循环,然后开始一个新的输出循环。最后:永远不要使用 Lapack 自己实现线性代数!
-
@n1e2 正如 PaulRoub 所说,请停止破坏您的问题。通过删除代码,您会使所有答案无效。你想用这个来达到什么目的?你的目标是什么?你为什么这样做?