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开头
请注意,将矩阵相乘会得到错误的答案,因为在使用它们之前会覆盖值。好吧,从代码编译/运行时不会崩溃的角度来看,这段代码没有什么问题,但矩阵相乘在数学中通常不是这样定义的。粗略的谷歌搜索矩阵乘法会告诉你它的算法。还要注意的是,根据尺寸的不同,矩阵本身并不总是可能相乘的