Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将矩阵自身相乘?_C++_Matrix_Matrix Multiplication - Fatal编程技术网

C++ 如何将矩阵自身相乘?

C++ 如何将矩阵自身相乘?,c++,matrix,matrix-multiplication,C++,Matrix,Matrix Multiplication,这是我到目前为止所做的,但我认为这是不对的 for (int i = 0 ; i < 5; i++) { for (int j = 0; j < 5; j++) { matrix[i][j] += matrix[i][j] * matrix[i][j]; } } 建议:如果这不是一个家庭作业,不要编写自己的线性代数例程,使用许多同行评审的库中的任何一个 现在,关于你的代码,如果你想做一个逐项乘积,那么你做的是错误的,你所做的是给每个值赋值,

这是我到目前为止所做的,但我认为这是不对的

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

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

现在,关于你的代码,如果你想做一个逐项乘积,那么你做的是错误的,你所做的是给每个值赋值,它是平方加上原始值n*n+n或1+n*n,不管你喜欢什么

但是如果你想做一个真正的代数意义上的矩阵乘法,记住你必须做第一个矩阵行与第二个矩阵列的标量积,或者其他方式,我现在不太确定。。。比如:

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.
当然,使用此方法无法就地生成产品,因为您需要在接下来的步骤中覆盖的值

另外,进一步解释泰勒·麦克亨利的评论,作为行乘以列的连续性,我不确定这是否是矩阵的正确术语,如果a是mxn,B是nxo,a*C是mxo,那么在你的例子中,矩阵只有当它是正方形的时候才能被平方


如果你只想玩一点矩阵,那么你可以试试八度,例如;求矩阵的平方和M*M或M**2一样简单。

我已经很久没有做过矩阵数学了,我只做了一点点,但+=运算符取矩阵[I][j]的值,并将矩阵[I][j]*矩阵[I][j]的值相加,我认为这不是您想要做的。

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

我不认为你可以在适当的位置将矩阵自身相乘

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];
        }
    }
}

即使你使用了一种不那么幼稚的矩阵乘法,也就是说,除了这个On3算法之外,你仍然需要额外的存储。

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

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开头


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

好吧,从代码编译/运行时不会崩溃的角度来看,这段代码没有什么问题,但矩阵相乘在数学中通常不是这样定义的。粗略的谷歌搜索矩阵乘法会告诉你它的算法。还要注意的是,根据尺寸的不同,矩阵本身并不总是可能相乘的