Julia: isposdef() salah

Dibuat pada 12 Jan 2017  ·  3Komentar  ·  Sumber: JuliaLang/julia

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)
doc linear algebra

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

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.

Semua 3 komentar

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.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat