どのようにそれ自体で行列を掛けていますか?
-
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
だ各値に代入され、どのようなあなたは
しかし、あなたは、あなたが第2の行列の列(またはその他の方法により、第1の行列の行のスカラー積をしなければならなかったことを覚えておいてください、代数的な意味での本格的な行列の乗算を行いたい場合は、私は今、非常にわからないんだけど)...のような何かます:
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は、m個のXの行列であり、BはS×N個であり、結果はM×N個であり、添え字は1で始まる..
あなたがそれらを使用する前の値を上書きすることになるだろうので、、所定の位置に行列を乗算することは、間違った答えを得るために起こっていることに注意してください。
これは、どのIドン、私は(と私は唯一の上に、それを少しやった)行列演算を行ってきたが、+=
演算子はmatrix[i][j]
の値を取り、それにmatrix[i][j] * matrix[i][j]
の値を追加しますので、あまりにも長い間されています「Tと思うあなたが何をしたいのかである。
まあそれは、行/列に追加し、その後、行/列を二乗されているもの、それはやっているように見えます。それは、あなたはそれが何をしたいですか?そうでない場合には、それを変更します。