【问题标题】:Multiplying matrices in cc中的乘法矩阵
【发布时间】: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;
  }

【问题讨论】:

  • mn 在哪里初始化?您正在使用未初始化的变量。
  • 看到在你的malloc 调用中使用这些变量之前没有初始化这些变量,这个程序将会爆炸。 始终在使用变量之前对其进行初始化。您还应该在更接近使用它们的位置声明变量,或者给它们起更长、更有意义的名称。这段代码就像一个谜。
  • 您好,感谢您的回复,我确定我在顶部初始化了变量,并且没有收到任何编译错误。
  • 除此之外,您还要提前打印 C。完成乘法循环,然后开始一个新的输出循环。最后:永远不要使用 Lapack 自己实现线性代数!
  • @n1e2 正如 PaulRoub 所说,请停止破坏您的问题。通过删除代码,您会使所有答案无效。你想用这个来达到什么目的?你的目标是什么?你为什么这样做?

标签: c matrix-multiplication


【解决方案1】:

您必须在使用任何变量之前对其进行初始化,因此在您的代码中,您需要将 mn 初始化为 2,因为这是 2D 矩阵。

【讨论】:

  • 他们的代码结构使矩阵成为二维矩阵,而不是mn 的值。 mn 可以取任何值,只要它们彼此相等。
  • @frslm, tomayto tomahto.
【解决方案2】:
  1. 您的变量 nm 未初始化。
  2. 您没有释放分配的内存。
  3. 将一维数组用作二维数组是个好主意。

祝你好运!

【讨论】:

  • 您好,感谢您的反馈,我确定我在顶部初始化了变量,我没有收到任何编译错误,只是我没有得到输出。谢谢
  • 默认情况下,编译器几乎不会告诉你可疑的代码表达式。为了使编译器更强大,您可以传递一些选项。例如,如果您使用 GCC,请将它们传递给 --pedantic-Wall 选项。
猜你喜欢
  • 1970-01-01
  • 2019-12-13
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 2011-09-07
  • 2012-12-09
  • 1970-01-01
相关资源
最近更新 更多