【问题标题】:How do you multiply a matrix by itself?你如何将一个矩阵与自身相乘?
【发布时间】:2010-11-13 03:54:13
【问题描述】:

这是我目前所拥有的,但我认为它不正确。

for (int i = 0 ; i < 5; i++)
{
    for (int j = 0;  j < 5; j++)
    {
        matrix[i][j] += matrix[i][j] * matrix[i][j];
    }
}

【问题讨论】:

  • 好吧,从“这段代码是否可以编译/运行而不会崩溃”的角度来看,这段代码没有任何问题,但这不是数学中通常定义的矩阵乘法。粗略的谷歌搜索“矩阵乘法”会告诉你它的算法。另请注意,根据维度,矩阵本身并不总是可以相乘。

标签: c++ matrix matrix-multiplication


【解决方案1】:

建议:如果这不是家庭作业,请不要编写自己的线性代数例程,使用许多同行评审的库中的任何一个。

现在,关于您的代码,如果您想逐项执行产品,那么您做错了,您所做的是分配给每个值的平方加上原始值(n*n+n 或 @ 987654322@,随你喜欢)

但是,如果您想在代数意义上进行真正的矩阵乘法,请记住您必须对第一个矩阵行与第二个矩阵列进行标量乘积(或者其他方式,我现在不太确定)... 类似:

for i in rows:
    for j in cols:
        result(i,j)=m(i,:)·m(:,j)

和标量积“·”

v·w = sum(v(i)*w(i)) for all i in the range of the indices.

当然,使用这种方法,您无法就地完成产品,因为您需要在接下来的步骤中覆盖的值。

此外,进一步解释 Tyler McHenry 的评论,作为必须将行乘以列的结果,“内部维度”(我不确定这是否是正确的术语)矩阵必须匹配(如果Am x nBn x oA*Cm x o),所以在你的情况下,矩阵只有在它是正方形时才能平方(呵呵) .

如果你只是想玩一点矩阵,那么你可以试试 Octave,例如;对矩阵求平方就像 M*MM**2 一样简单。

【讨论】:

    【解决方案2】:

    我不认为你可以将一个矩阵本身相乘。

    for (i = 0; i < 5; i++) {
        for (j = 0; j < 5; j++) {
            product[i][j] = 0;
            for (k = 0; k < 5; k++) {
                product[i][j] += matrix[i][k] * matrix[k][j];
            }
        }
    }
    

    即使您使用不那么简单的矩阵乘法(即不是这种 O(n3) 算法),您仍然需要额外的存储空间。

    【讨论】:

      【解决方案3】:

      这不是我见过的任何矩阵乘法定义。标准定义是

      for (i = 1 to m)
         for (j = 1 to n)
            result(i, j) = 0
            for (k = 1 to s)
               result(i, j) += a(i, k) * b(k, j)
      

      以某种伪代码的形式给出算法。本例中a为m x s矩阵,b为s x n,结果为m x n,下标以1开头..

      请注意,将矩阵相乘会得到错误的答案,因为您将在使用它们之前覆盖值。

      【讨论】:

        【解决方案4】:

        我已经很久没有做矩阵数学了(我只做了一点点,最重要的是),但是+= 运算符获取matrix[i][j] 的值并将@ 的值添加到它987654323@,我不认为这是你想要做的。

        【讨论】:

          【解决方案5】:

          看起来它正在做的是将行/列平方,然后将其添加到行/列中。那是你想要它做的吗?如果没有,那就改变它。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-10-13
            • 1970-01-01
            • 1970-01-01
            • 2015-10-12
            • 1970-01-01
            • 1970-01-01
            • 2015-01-24
            • 2016-12-11
            相关资源
            最近更新 更多