isposdef() mengklaim bahwa beberapa (meskipun tidak semua) matriks semi-pasti positif adalah pasti positif ketika tidak:
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
Saya tidak yakin apa yang menyebabkan perilaku ini -- sepertinya isposdef() mencoba membuat dekomposisi Cholesky dari matriks, dan semua matriks semi-pasti positif memiliki dekomposisi Cholesky (meskipun IIRC tidak ada algoritma umum untuk menemukannya) . Tampaknya bagi saya akan lebih mudah untuk menerapkan kriteria Sylvestor dengan sesuatu seperti
sylvestor(A) = issymmetric(A) & all([det(A[1:j, 1:j]) > 0 for j = 1:size(A)[1]])
Informasi versi:
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)
Pembulatan selama perhitungan faktorisasi Cholesky dapat menyebabkan hal ini. Umumnya, tidak mungkin untuk menguji singularitas matriks floating point secara andal. Matriks yang Anda berikan sebenarnya tidak tunggal dalam representasi titik mengambang binernya
julia> det(big(A))
2.13162820728030047872728228063319445882714347172137703267935663215914838016073e-16
Determinan umumnya tidak dapat diandalkan dalam perhitungan numerik karena istilah tumbuh begitu cepat sehingga kriteria Sylverster tidak terlalu praktis. Dalam perhitungan numerik, tes melalui Cholesky dalam banyak kasus adalah yang Anda inginkan dan cukup murah jadi saya tidak berpikir kami akan mengubahnya. Namun, mungkin ide yang baik untuk memperluas dokumentasi untuk menjelaskan metode dan mungkin juga menggunakan contoh di sini untuk menunjukkan batasannya. Saya akan menambahkan label dokumentasi ke masalah ini.
@andreasnoack Bisakah ini ringkasan situasi di sini. Saya akan menambahkannya ke dokumen bersama dengan contoh setelah persetujuan.
isposdef(A) → Bool
Uji apakah suatu matriks definit positif menggunakan dekomposisi Cholesky sebagai kriteria Sylvester menjadi tidak praktis karena perhitungan determinan bilangan besar yang tidak dapat diandalkan. Dalam kasus matriks titik apung semi-pasti positif tunggal (tidak dapat dibalikkan), fungsi mungkin tidak bekerja seperti yang diinginkan karena pembulatan yang terlibat dalam faktorisasi Cholesky dan representasi titik mengambang biner non-tunggal dari matriks.
Saya rasa tidak perlu menyebutkan kriteria Sylvester.
Komentar yang paling membantu
Pembulatan selama perhitungan faktorisasi Cholesky dapat menyebabkan hal ini. Umumnya, tidak mungkin untuk menguji singularitas matriks floating point secara andal. Matriks yang Anda berikan sebenarnya tidak tunggal dalam representasi titik mengambang binernya
Determinan umumnya tidak dapat diandalkan dalam perhitungan numerik karena istilah tumbuh begitu cepat sehingga kriteria Sylverster tidak terlalu praktis. Dalam perhitungan numerik, tes melalui Cholesky dalam banyak kasus adalah yang Anda inginkan dan cukup murah jadi saya tidak berpikir kami akan mengubahnya. Namun, mungkin ide yang baik untuk memperluas dokumentasi untuk menjelaskan metode dan mungkin juga menggunakan contoh di sini untuk menunjukkan batasannya. Saya akan menambahkan label dokumentasi ke masalah ini.