最近、MathNetを使用して線形代数を実装し始めましたが、MATLAB関数をMathNetに変換する際に問題が発生しています。
MATLABでは、バックスラッシュ演算子を使用した単純なソルブをよく使用します。
C = A \ B
MathNetでこれに相当するものは何ですか?
C = Inv(A)* Bを使用すると、小さな行列で同じ結果が得られますが、結果が同じくらい正確かどうかはわかりません。
var C = A.QR().Solve(B);
(QR分解を使用)
正方行列の場合も: var C = A.LU().Solve(B);
(LU分解を使用)
MathNetにはMatlabのバックスラッシュ演算子と「同等」のものはないと思います。Matlabのバックスラッシュがどのように機能するかについては、次のサイトを参照してください:mldivide()のMatlabマニュアル。QRSolveのようないくつかの解決方法を見ることができると思いますが、それらは使いやすいとは思いません...
「正確」とはどういう意味ですか?MathNetのinv()が行列の正確な反転を行うかどうかを尋ねていますか、それとも単にCをInv(A)*(B)として計算できるかどうかを尋ねていますか?
後で質問する場合は、はい、正方行列の場合、MatlabのバックスラッシュはInv(A)*(B)とほぼ同じです。
MatlabとMath.NetNumericsを使用して行ったテストでは、次のようになります。
行列AベクトルB
Matlab:A \ B Math.Net Numerics:A.QR()。Solve(B)
どちらも同じ結果になります(私の場合)。Bがマトリックスでも動作すると思います。
ILNumerics.Net Libraryを使用している場合は、試すことができますILMath.linsolve(A, B);