【问题标题】:multiplying a matrix and a vector, logic error [closed]将矩阵和向量相乘,逻辑错误
【发布时间】:2012-10-23 07:32:32
【问题描述】:

我有一个函数,就是将矩阵和向量相乘:

 double *matrix_vector_multiply(int rows, int cols,
                           double **mat, double *vec)
{

    double *answer = malloc(rows * sizeof (double));
    int i,j;
    for (i=0; i<rows; rows++)
    ans[i]=0;

    for (i=0; i<rows; rows++){

        for (j=0; j<cols; cols++)
             {
            answer[i] = answer[i] + mat[i][j] * vec[j];
            }
        }
    return ans;
}

我的输出一直都是 0.. 关于如何修复它的任何想法?

【问题讨论】:

  • (i) 为了你好,习惯成语sizeof( *answer )而不是sizeof( double ); (ii) 发布一个我们可以运行和测试的示例。 (iii) 您返回并初始化的ans 未在任何地方声明;相反,您声明和修改answer。 (iv) 每次循环迭代,您增加rowscols,但您的索引是ij;这些循环是如何结束的?
  • 为什么要增加 for 循环中的行数和列数,而不是增加 i 和 j?我错过了什么吗?
  • 你为什么要问一个基本上围绕相同问题的新问题?请先阅读有关基本 C 的内容,然后再提出有关此类问题的问题。并且请不要通过使用 2D 数组的仿真来开始编程 C。你有指向指针的指针,这些是不同的东西。至少从更简单的事情开始,学习如何正确使用for 循环之类的东西,通过 SO 处理这些事情对每个人来说都是浪费时间,包括你在内。

标签: c arrays matrix


【解决方案1】:

这是您发布的实际代码吗?除了 ansanswer 等的明显问题,你的 for 循环是完全错误的,例如

for (i=0; i<rows; rows++)

应该是:

for (i=0; i<rows; i++)

和:

    for (j=0; j<cols; cols++)

应该是:

    for (j=0; j<cols; j++)

【讨论】:

  • 我怀疑 OP 是否发布了原始代码,因为循环 (i=0; i &lt; rows; rows++) 永远不会结束,除非 rows == 0
  • 好吧,当行的增量超过 INT_MAX 时,它最终会结束。但是代码无论如何都不会编译,除非 ans 在某处被声明为全局。
【解决方案2】:

您有ansanswer。我希望你能弄清楚其余的;)

【讨论】:

    【解决方案3】:

    你的两个 for 循环中的变量 i 和 j 永远不会改变,因为你似乎增加了 rows 和 cols。这意味着您将始终在第二个 for 循环的主体中执行相同的求和。您的其他答案别无选择,只能保持在 0,因为您在 init 之后永远不会计算它们的值。

    【讨论】:

      【解决方案4】:

      您在ans 中将所有值存储为0,然后返回ans。而您显然正在修改变量 answer

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-24
        • 1970-01-01
        相关资源
        最近更新 更多