【发布时间】:2015-02-15 00:18:15
【问题描述】:
我的矩阵乘法函数似乎有问题。
当我运行程序时,我只得到一个所有值都相同的 n x n 矩阵,作为一些有线双精度值,例如 21312e-2 这是我的功能代码:
void Multiply(int i, int j, double mat1[10][10], double mat2[10][10]) {
double mat3[10][10];
for (int r = 0; r < i; r++) {
for (int c = 0; c < j; c++) {
for (int in = 0; in < i; in++) {
mat3[r][c] += mat1[r][in] * mat2[in][c];
}
cout << mat3[r][c] << " ";
}
cout << "\n";
}
}
mat1 和 mat 2 在主线程中使用函数 read 读入程序:
void read_matrix(int m, int n, double mat[10][10])
{
int i, j;
for (i = 0; i<m; ++i)
for (j = 0; j<n; ++j)
cin >> mat[i][j];
}
编辑:主代码
int main()
{
int i1, i2, j1, j2;
double mat1[10][10], mat2[10][10], mat3[10][10];
scanf_s("%d %d\n", &i1, &j1, mat1);
read_matrix(i1, j1, mat1);
scanf_s("%d %d\n", &i2, &j2, mat2);
read_matrix(i2, j2, mat2);
printf("%d x %d matrix\n", i1, j1);
print_matrix(i1, j1, mat1);
printf("\n%d x %d matrix\n", i2, j2);
print_matrix(i2, j2, mat2);
Multiply(i1, j2, mat1, mat2);
system("pause");
return 0;
}
【问题讨论】:
-
你还没有将
mat3的每个元素初始化为0。 -
确切的输入是什么,你得到什么结果?另外,矩阵是正方形吗?如果没有,您需要实际转换
mat2的形状。 -
停止折磨自己,使用 BLAS 库。更高的性能,更少的痛苦。
-
抱歉矩阵不是正方形的,相信我,如果可以的话,我会使用 BLAS 库,但这是用于课堂作业,所以我不能。