Julia: isposdef() es incorrecto

Creado en 12 ene. 2017  ·  3Comentarios  ·  Fuente: JuliaLang/julia

isposdef() afirma que algunas (aunque no todas) las matrices semidefinidas positivas son definidas positivas cuando no lo son:

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

No estoy seguro de qué está causando este comportamiento: parece que isposdef() intenta hacer una descomposición de Cholesky de la matriz, y todas las matrices semidefinidas positivas tienen una descomposición de Cholesky (aunque IIRC no hay un algoritmo general para encontrarlas) . Me parece que sería más simple simplemente implementar el criterio de Sylvestor con algo como

sylvestor(A) = issymmetric(A) & all([det(A[1:j, 1:j]) > 0 for j = 1:size(A)[1]])

Información de la versión:

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

Comentario más útil

El redondeo durante el cálculo de la factorización de Cholesky puede causar esto. Generalmente, no es posible probar de forma fiable la singularidad de las matrices de punto flotante. La matriz que proporcionó en realidad no es singular en su representación de coma flotante binaria

julia> det(big(A))
2.13162820728030047872728228063319445882714347172137703267935663215914838016073e-16

Los determinantes son generalmente bastante poco confiables en los cálculos numéricos porque los términos crecen tan rápido que el criterio de Sylverster no es realmente práctico. En cálculos numéricos, la prueba a través de Cholesky es en la mayoría de los casos lo que desea y es bastante económica, por lo que no creo que la cambiemos. Sin embargo, podría ser una buena idea ampliar la documentación para explicar el método y tal vez también usar el ejemplo aquí para mostrar las limitaciones. Agregaré la etiqueta de documentación al problema.

Todos 3 comentarios

El redondeo durante el cálculo de la factorización de Cholesky puede causar esto. Generalmente, no es posible probar de forma fiable la singularidad de las matrices de punto flotante. La matriz que proporcionó en realidad no es singular en su representación de coma flotante binaria

julia> det(big(A))
2.13162820728030047872728228063319445882714347172137703267935663215914838016073e-16

Los determinantes son generalmente bastante poco confiables en los cálculos numéricos porque los términos crecen tan rápido que el criterio de Sylverster no es realmente práctico. En cálculos numéricos, la prueba a través de Cholesky es en la mayoría de los casos lo que desea y es bastante económica, por lo que no creo que la cambiemos. Sin embargo, podría ser una buena idea ampliar la documentación para explicar el método y tal vez también usar el ejemplo aquí para mostrar las limitaciones. Agregaré la etiqueta de documentación al problema.

@andreasnoack ¿Puede ser este el resumen de la situación aquí? Lo agregaré a los documentos junto con el ejemplo después de la aprobación.
isposdef(A) → Bool
Pruebe si una matriz es definida positiva utilizando la descomposición de Cholesky, ya que el criterio de Sylvester se vuelve poco práctico debido a los cálculos determinantes poco confiables de números grandes. En el caso de matrices de coma flotante semidefinidas positivas singulares (no invertibles), la función podría no funcionar como se desea debido al redondeo involucrado en la factorización de Cholesky y la representación binaria de coma flotante no singular de la matriz.

No creo que sea necesario mencionar el criterio de Sylvester.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

ararslan picture ararslan  ·  3Comentarios

yurivish picture yurivish  ·  3Comentarios

TotalVerb picture TotalVerb  ·  3Comentarios

musm picture musm  ·  3Comentarios

StefanKarpinski picture StefanKarpinski  ·  3Comentarios