5

正の半正定行列の行列式が 0 に等しい可能性はありますか。私の場合はゼロになりつつあります。対角要素がゼロでない対角行列があります。この行列の行列式を計算しようとすると、0 になります。なぜそうなのですか?

4

2 に答える 2

8

これが、行列式の計算が決して良い考えではない理由です。ええ、私は知っています。あなたの本、あなたの先生、またはあなたの上司はそうするようにあなたに言いました。彼らはおそらく間違っていました。なんで?決定要因は、スケーリングが不十分な獣です。行列式を効率的に計算したとしても (多くのアルゴリズムはそれさえできません)、ほとんどの場合、実際には行列式は必要ありません。

次の単純な正定行列を考えてみましょう。

A = eye(1000);

決定要因は何ですか?気にする必要さえありません。1ですが、あえて言うなら…

det(A)
ans =
     1

OK、それでうまくいきます。その行列全体に小さな定数、たとえば 0.1 を単純に掛けるとどうなるでしょうか。決定要因は何ですか?行列式はすでにわかっているので、気にする必要はないと言うかもしれません。det(A)*0.1^1000 でなければならないので、1e-1000 になります。

det(A*0.1)
ans =
     0

ここで何が間違っていましたか?これが失敗したのは、浮動小数点演算で作業していたことを忘れていたことです。MATLAB の double のダイナミック レンジは本質的にしか下がらないため、

realmin
ans =
      2.2250738585072e-308

より小さい数値はゼロに変わります - それらはアンダーフローします。とにかく、ほとんどの場合、行列式を計算するとき、とにかく間違った理由でそうしています。行列が特異かどうかをテストしてほしい場合は、det ではなく、rank または cond を使用します。

于 2012-05-02T17:46:50.877 に答える
6

定義により、正の半正定行列はゼロに等しい固有値を持つ可能性があるため、その行列式はゼロになる可能性があります

さて、この文の意味がわかりませんが、

対角要素がゼロでない対角行列があります。計算してみると・・・

行列が対角行列で、対角要素がすべて非ゼロの場合、行列式は非ゼロでなければなりません。パソコンで計算する場合は、アンダーフローに注意してください。対角要素の積の代わりに対数の和を考えてもよい

于 2012-05-01T22:05:09.653 に答える