你如何通过自身乘以矩阵?
-
19-09-2019 - |
题
这是我到目前为止,但我不认为这是正确的。
for (int i = 0 ; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
matrix[i][j] += matrix[i][j] * matrix[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];
}
}
}
即使使用较小的幼稚矩阵乘法(即其他东西比此为O(n 3 )算法),则仍需要额外的存储空间。
其他提示
建议:如果它不是一门功课不写自己的线性代数例程,使用任何的许多同行评议库是在那里
。现在,你的代码,如果你想要做的长期产品的一个术语,那么你就错了,你在做什么是分配给它的每个平方值加上原始值(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.
当然,用这种方法,你不能做替代品,因为你需要,你在接下来的步骤中覆盖的值。
此外,解释得远一点泰勒麦克亨利的评论,具有按列乘行的consecuence,在“内部尺寸的”(我不知道这是正确的术语)的该矩阵必须匹配(如果A
是m x n
,B
是n x o
和A*C
是m x o
),所以在你的情况下,矩阵可以只有当它的平方的平方(他他他)。
如果你只想玩矩阵一点点,那么你可以尝试八度,例如:平方的矩阵是作为M*M
或M**2
一样容易。
这不是我见过的任何矩阵乘法定义。标准定义是
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是一个米×S矩阵和b是S×n个,其结果是一个m×n个,并且下标从1开始..
请注意,乘以代替矩阵是会得到错误的答案,因为你会在使用前要覆盖值。
它已经太长时间,因为我已经做了矩阵数学(我只是做了一点点,在上面),但+=
运营商负责matrix[i][j]
的价值,并增加了它matrix[i][j] * matrix[i][j]
的值,我不“T认为是你想做的事。
好了,它看起来像它在做什么是不可能完成的行/列,然后将它添加到行/列。这就是你想要它做什么?如果没有,则改变它。