isposdef() behauptet, dass einige (wenn auch nicht alle) positiv-semi-definiten Matrizen positiv definit sind, wenn sie es nicht sind:
julia> A = [1.69 2.21; 2.21 2.89]
2Ă2 Array{Float64,2}:
1.69 2.21
2.21 2.89
julia> det(A)
0.0
julia> isposdef(A)
true
julia> isposdef(ones(2,2))
false
Ich bin mir nicht sicher, was dieses Verhalten verursacht - es sieht so aus, als ob isposdef() versucht, eine Cholesky-Zerlegung der Matrix vorzunehmen, und alle positiven semidefiniten Matrizen haben eine Cholesky-Zerlegung (obwohl IIRC keinen allgemeinen Algorithmus gibt, um sie zu finden) . Es scheint mir, dass es einfacher wÀre, Sylvestors Kriterium einfach mit etwas wie zu implementieren
sylvestor(A) = issymmetric(A) & all([det(A[1:j, 1:j]) > 0 for j = 1:size(A)[1]])
Versions Information:
julia> versioninfo()
Julia Version 0.5.0
Commit 3c9d753 (2016-09-19 18:14 UTC)
Platform Info:
System: NT (x86_64-w64-mingw32)
CPU: Intel(R) Xeon(R) CPU E3-1240 v3 @ 3.40GHz
WORD_SIZE: 64
BLAS: libopenblas (USE64BITINT DYNAMIC_ARCH NO_AFFINITY Haswell)
LAPACK: libopenblas64_
LIBM: libopenlibm
LLVM: libLLVM-3.7.1 (ORCJIT, haswell)
Die Rundung bei der Berechnung der Cholesky-Faktorisierung kann dies verursachen. Im Allgemeinen ist es nicht möglich, die SingularitÀt von Gleitkommamatrizen zuverlÀssig zu testen. Die von Ihnen bereitgestellte Matrix ist in ihrer binÀren Gleitkommadarstellung eigentlich nicht singulÀr
julia> det(big(A))
2.13162820728030047872728228063319445882714347172137703267935663215914838016073e-16
Determinanten sind bei numerischen Berechnungen im Allgemeinen ziemlich unzuverlĂ€ssig, da die Terme so schnell wachsen, dass Sylversters Kriterium nicht wirklich praktikabel ist. Bei numerischen Berechnungen ist der Test ĂŒber Cholesky in den meisten FĂ€llen das, was Sie wollen, und er ist ziemlich billig, also denke ich nicht, dass wir ihn Ă€ndern werden. Es könnte jedoch eine gute Idee sein, die Dokumentation zu erweitern, um die Methode zu erklĂ€ren, und vielleicht auch das Beispiel hier zu verwenden, um die EinschrĂ€nkungen aufzuzeigen. Ich fĂŒge dem Problem das Dokumentationsetikett hinzu.
@andreasnoack Kann das die Zusammenfassung der Situation hier sein. Ich werde es nach der Genehmigung zusammen mit dem Beispiel zu den Dokumenten hinzufĂŒgen.
isposdef(A) â Bool
Testen Sie, ob eine Matrix positiv definit ist, indem Sie die Cholesky-Zerlegung verwenden, da das Sylvester-Kriterium aufgrund unzuverlĂ€ssiger Determinantenberechnungen groĂer Zahlen unpraktisch wird. Im Fall singulĂ€rer (nicht invertierbarer) positiver semidefiniter Gleitkommamatrizen funktioniert die Funktion möglicherweise nicht wie gewĂŒnscht, da bei der Cholesky-Faktorisierung und der nicht singulĂ€ren binĂ€ren Gleitkommadarstellung der Matrix Rundungen auftreten.
Ich denke nicht, dass es notwendig ist, Sylvesters Kriterium zu erwÀhnen.
Hilfreichster Kommentar
Die Rundung bei der Berechnung der Cholesky-Faktorisierung kann dies verursachen. Im Allgemeinen ist es nicht möglich, die SingularitÀt von Gleitkommamatrizen zuverlÀssig zu testen. Die von Ihnen bereitgestellte Matrix ist in ihrer binÀren Gleitkommadarstellung eigentlich nicht singulÀr
Determinanten sind bei numerischen Berechnungen im Allgemeinen ziemlich unzuverlĂ€ssig, da die Terme so schnell wachsen, dass Sylversters Kriterium nicht wirklich praktikabel ist. Bei numerischen Berechnungen ist der Test ĂŒber Cholesky in den meisten FĂ€llen das, was Sie wollen, und er ist ziemlich billig, also denke ich nicht, dass wir ihn Ă€ndern werden. Es könnte jedoch eine gute Idee sein, die Dokumentation zu erweitern, um die Methode zu erklĂ€ren, und vielleicht auch das Beispiel hier zu verwenden, um die EinschrĂ€nkungen aufzuzeigen. Ich fĂŒge dem Problem das Dokumentationsetikett hinzu.