逆行列の行列式を計算しようとしています。逆行列が存在します。ただし、逆数の行列式を計算しようとすると、matlab で Inf 値が得られます。この背後にある理由は何ですか?
質問する
5465 次
1 に答える
2
短い答え: が与えられA = inv(B)
た場合、det(A)==Inf
2 つの説明がある場合があります。
- 行列式の数値計算中のオーバーフロー、
- の 1 つまたは複数の無限要素
A
。
最初のケースでは、行列が正しくスケーリングされていないため、det(B)
アンダーフローやdet(A)
オーバーフローが発生する可能性があります。det(a*B) == a^N * det(B)
wherea
はスカラーで、B
はN
時間N
行列であることを思い出してください。
2 番目のケース (つまりnnz(A==inf)>0
) では、行列B
は「作業精度に対して特異」である可能性があります。
PS:
条件数が大きい行列は、ほぼ特異です。(行列式自体の大きさはスケーリングの影響を受けるため、小さな行列式は特異点とは何の関係もありません。)
行列は、ガウス消去法でピボットがゼロの場合、作業精度に対して特異です。逆行列を計算するとき、matlab は1/0
どの戻り値を計算する必要がありますInf
。
実際、Matlab のオーバーフローとゼロ除算の例外はキャッチされないため、IEEE 754 に従ってInf
値が伝播されます。
于 2012-07-04T14:40:33.887 に答える