- 行列の明示的な逆行列を求める必要はあまりありません。関数 inv は、線形方程式系 Ax = b を解くときにしばしば誤用されます。この方程式を解く 1 つの方法は、x = inv(A)*bを使うことです。実行時間と数値精度の両面でより優れた方法は、行列バックスラッシュ演算子を x = A\b のように使用することです。この場合、逆行列を明示的に求めることなく、ガウスの消去法を使って解を求めます。詳細については、mldivide を参照してください。
Matlabの逆行列計算法を教えてください。公開されている論文や、「○○法」といった情報で十分です。
조회 수: 294 (최근 30일)
이전 댓글 표시
Matlabで採用している逆行列の計算手法を教えてください。手法を公開している論文などを紹介いただければ幸いです。
特に、実数で、大きいスパース行列についての情報があればありがたいです。
現在、対称な行列の逆行列を計算すると、結果が非対称行列になる現象に遭遇しております。
댓글 수: 0
답변 (2개)
Yoshio
2019년 7월 15일
편집: Yoshio
2019년 7월 16일
こちらに概要説明があります。
アルゴリズム
inv は、入力行列の LU 分解 (または、入力行列がエルミートの場合は LDL 分解) を実行します。その後、その結果を使用して、解が逆行列 inv(X) である線形システムを形成します。スパース入力の場合、inv(X) はスパース単位行列を作成し、バックスラッシュ X\speye(size(X)) を使用します。
なお、このページにあるヒントも参考になるかと思います。
ヒント
댓글 수: 0
YoshikiFukada
2019년 7월 17일
댓글 수: 1
Tomotaka Hirata
2020년 8월 23일
詳しくないので余計なことかもしれませんが...
oldDigits = digits(欲しい有効桁数);
としてから
関数(vpa("変数")) %大きすぎる変数の場合は、文字列で括る
とすると、任意精度で計算できます。これを利用することで桁落ちを防ぐことが出来ます。
また、digitsを元に戻したい場合、
digits(oldDigits);
とします。
참고 항목
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!