2012-02-09 9 views
5

私は最近、線形代数を実装するためにMathNetを使い始めましたが、MathNetへの変換には問題があります。MathNetと同等のMATLABの解法C = A B

私は、多くの場合、単純なバックスラッシュ演算子を使って解く使用MATLABで

C = A \ B

MathNetでこれの同等とは何ですか?

C = Inv(A)* Bを使用して小さな行列で同じ結果が得られますが、結果が正確かどうかはわかりません。

答えて

2

MathNetにMatlabのバックスラッシュ演算子の「等価」はないと思います。 Matlabのバックスラッシュの仕組みについては、Matlab manual on mldivide()をご覧ください。あなたはQRSolveのような解決方法のいくつかを見ることができると思いますが、私はそれらが使いやすいとは思わない...

「正確」とはどういう意味ですか? MathNetのinv()が行列を正確に逆変換するかどうか、あるいはInv(A)*(B)としてCを計算できるかどうかを尋ねるだけですか?

Matlabのバックスラッシュは、Inv(A)*(B)とほぼ同じです。 var C = A.LU().Solve(B);(使用してLU分解)

+0

Im後者にはいっています。さて、私はちょうどこれを使用します。あなたはそれがほぼ同じで、どこに違いがあるのか​​を書いていますか? – Bildsoe

+0

違いは、Matlabはバックスラッシュ演算子を使用するときにガウス消去を行うため、計算の複雑さが軽減され、数値の安定性が向上します。インバースの明示的な計算は、いくつかの条件の下で悪条件になる可能性があります。そのため、Matlabで作業する場合、バックスラッシュを使用するほうがよいでしょう。 – Niclas

+0

よろしくお願いいたします。私はいくつかの線形代数を調べる必要があると思う:) – Bildsoe

4

var C = A.QR().Solve(B);(使用QR分解)

MatlabとMath.Netを使用して数値:

行列A ベクトルB

Matlabの:\のB Math.Netニューメリック:A.QR()(B)を解く

両方が(私の場合)と同じ結果を与えます。私はBが行列でも動作すると思う。

0

あなたがILNumerics.Net Library、 を使用する場合、あなたは私が作ったテストではILMath.linsolve(A, B);

1

を試すことができます。また、正方行列の場合

関連する問題