行列が半正定かどうかをテストする


11

正の半正定性を確認する必要がある対称行列のリストLがあります(つまり、それらの固有値は非負です)。

上記のコメントは、それぞれの固有値を計算し、それらが非負であるかどうかをチェックすることで実行できることを示しています(おそらく丸め誤差を処理す​​る必要があります)

私のシナリオでは固有値の計算は非常に高価ですが、使用しているライブラリは正の確定性(つまり、行列の固有値が厳密に正である場合)のテストが非常に高速であることに気付きました。

したがってアイデアは、マトリックス与えられたであろうBL、あるテスト場合にB+ϵI正定値です。そうでない場合、Bは正の半正定値ではありません。そうでない場合、の固有値を計算して、Bそれが実際に正の半正定値であることを確認できます。

私の質問は次のとおりです。

正定性の効率的なテストが提供されている場合、行列が半正定かどうかをテストするより直接的で効率的な方法はありますか?


1
A


1
B+cIccc

はい、固有値をシフトして最小の固有値を計算できますが、受け入れるものに許容値を設定するという問題があります(固有値が少なくともその許容値まで計算されることを確認すること!)
Brian Borchers

これが役立つかどうかはわかりませんが、行列が正定でないことがわかったら、それが正半定かどうかを確認するには、カーネルが空でないかどうかを確認するだけです。
アベルモリナ14年

回答:


20

「正定値」または「正定値」の実際の定義は何ですか?浮動小数点演算では、これに何らかの許容値を指定する必要があります。

Aλ=1.01030λ=1.0

ϵ|λmax|λmax

残念ながら、行列のすべての固有値の計算にはかなり時間がかかります。別の一般的に使用されるアプローチは、対称行列が浮動小数点演算でコレスキー分解を行う場合、正定行列と見なされることです。コレスキー分解の計算は、固有値の計算よりも一桁高速です。これを正の半正定性に拡張するには、行列に小さな倍数の単位を追加します。繰り返しますが、スケーリングの問題があります。1つの高速なアプローチは、コレスキー分解を計算する前に、対角要素が1.0になるように行列の対称スケーリングを実行し、対角にを追加することです。 ϵ

ただし、アプローチにはいくつかの問題があるため、これには注意が必要です。たとえば、とが浮動小数点コレスキー分解を持つという意味で正定であるが、はコレスキー分解がないという状況があります。したがって、「浮動小数点コレスキー因数分解正定行列」のセットは凸ではありません! AB(A+B)/2


その最後の段落について詳しく説明したり、ソースへのリンクを投稿したりできますか?それはかなり奇妙です。
ダニエルシェイプロ14年

1
このスケーリングの古典的なリファレンスは、A。van der Sluiです。行列の条件数と平衡化Numerische Mathematik 14(1):14-23、1969。Golubやvan Loanなどの教科書でも説明されています。最後の段落内のビットは、ハードウォンから半正定値計画にライン検索をコーディングでの個人的な経験は、私が状況遭遇したコード-されると LAPACKでコレスキー因数分解を持っていますが、は、LAPACKによるコレスキー分解がありません。これらの種類の問題は、ほとんど特異なときに発生し始めます。XX+αΔXX+0.95αΔX
ブライアンボーチャーズ14年

また、一部の行列が拡張または4倍精度でコレスキー因数分解できるが、通常の倍精度または単精度浮動小数点演算ではできないことを発見することも珍しくありません。
ブライアンボーチャーズ14年

3
SDPの主双対内点コードのいくつか(CSDP、SDPT3、SDPA)は常に正定でコレスキー分解の行列を返しますが、別の一般的なソルバー(SeDuMi)は固有値分解を使用し、非常に小さな負の解を返します固有値。
ブライアンボーチャーズ14年

3

4
ユーザー名は、回答の著者と論文の著者との関係をほとんど明らかにしているようです。紙に何が含まれているかについてもう少し情報があればいいでしょう。とにかく、それは非常に興味深く、論文の質問リストに関連しています!
アントンメンショフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.