Bra*_*ble 0 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];
}
}
Run Code Online (Sandbox Code Playgroud)
建议:如果不是家庭作业不写自己的线性代数例程,请使用许多同行评审的库.
现在,关于你的代码,如果你想按期限产品做一个术语,那么你做错了,你正在做的是为每个值分配它的正方形加上原始值(n*n+n或者(1+n)*n,无论你最喜欢什么)
但是如果你想在代数意义上做一个真实的矩阵乘法,记住你必须用第二个矩阵列做第一个矩阵行的标量积(或者另一种方式,我现在不太确定). . 就像是:
for i in rows:
for j in cols:
result(i,j)=m(i,:)·m(:,j)
Run Code Online (Sandbox Code Playgroud)
和标量积"·"
v·w = sum(v(i)*w(i)) for all i in the range of the indices.
Run Code Online (Sandbox Code Playgroud)
当然,使用这种方法,您无法就地生产产品,因为您需要在接下来的步骤中覆盖您正在覆盖的值.
另外,进一步解释Tyler McHenry的评论,作为不得不按行增加行数的结果,矩阵的" 内部维度 "(我不确定这是否是正确的术语)必须匹配(如果A是m x n,B是n x o和A*C是m x o),所以在你的情况下,可以将一个矩阵只有当它的方方(他他他).
如果你只是想用矩阵玩一下,那么你可以尝试Octave,例如; 矩阵的平方就像M*M或M**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];
}
}
}
Run Code Online (Sandbox Code Playgroud)
即使您使用不太天真的矩阵乘法(即除此O(n 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)
Run Code Online (Sandbox Code Playgroud)
以一种伪代码给出算法.在这种情况下,a是amxs矩阵,b是sxn,结果是amxn,下标以1开头.
请注意,将矩阵相乘可能会得到错误的答案,因为在使用它们之前,您将覆盖值.
| 归档时间: |
|
| 查看次数: |
4862 次 |
| 最近记录: |