【问题标题】:Matrix multiplication function C++矩阵乘法函数 C++
【发布时间】: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 库,但这是用于课堂作业,所以我不能。

标签: c++ matrix


【解决方案1】:

在添加之前,您需要用零值填充mat3

最简单的方法是使用:

double mat3[10][10] = {};

【讨论】:

  • 我仍然得到巨大的双精度值,这些值与输出不正确,我在上面包含了我的主要代码。
猜你喜欢
  • 2021-08-07
  • 1970-01-01
  • 2019-12-13
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 2016-10-10
  • 1970-01-01
相关资源
最近更新 更多