質問

いくつかの場所で読んでいます(ドキュメントおよびこのブログ投稿: http://blogs.mathworks.com/loren/2007/05/16/purpose-of-inv/ )Matlabでのinvの使用は、速度が遅く不正確であるため推奨されません。 。

この不正確な理由を見つけようとしています。今のところ、Googleは面白い結果を与えていないので、ここの誰かが私をガイドしてくれると思った。

ありがとう!

役に立ちましたか?

解決

私が言及した不正確さは、メソッドINVにあり、MATLABの実装ではありません。方程式系を解くには、QR、LU、またはその他の方法を使用する必要があります。これらの方法では、通常、問題のシステムの条件数を二乗する必要がないためです。通常、invを使用するには、元のシステムの条件番号を2乗することで精度を失う操作が必要です。

-ローレン

他のヒント

Lorenのブログのポイントは、MATLABの inv 関数が、行列の逆行列を計算する他の数値実装よりも特に遅いまたは不正確であるということではないと思います。むしろ、ほとんどの場合、逆行列自体は不要であり、他の方法(逆行列を計算するのではなく、バックスラッシュ演算子である \ を使用して線形システムを解くなど)で続行できます。

inv()は、複数の右辺ベクトルを解決しない限り、確かに \ よりも遅くなります。ただし、MathWorksからの不正確さに関するアドバイスは、数値線形代数の結果の過度に保守的な限界によるものです。つまり、 inv()は不正確ではありません。リンクはさらに詳しく説明します: http://arxiv.org/abs/1201.6035

  

広く使用されているいくつかの教科書では、ベクトルbに計算された逆inv(A)を掛けて線形連立方程式Ax = bを解くことは不正確であると読者は信じています。数値解析および数値線形代数に関する他のすべての教科書は、これが正確であるかどうかを述べることなく、計算された逆関数の使用を推奨していません。実際、逆数の計算方法に関する合理的な仮定の下では、x = inv(A)* bは、後方安定性が最適なソルバーによって計算された解と同じくらい正確です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top