Bug (NaNs) when differentiating eigenvectors of Symmetric matrices
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 35/100
Piste de recherche
Reproduisez le rapport avec ForwardDiff.jacobian sur la fonction et l’entrée boguées fournies, en comparant eigen(Symmetric(mat)) à eigen(mat). Examinez le chemin de différentiation des vecteurs propres impliqué par le wrapper Symmetric et déterminez quel comportement devrait éviter les valeurs NaN et Inf signalées ; c’est terminé lorsque la reproduction ne produit plus ces valeurs.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Hello,
I noticed at a certain point my code started to crash because of some NaNs introduced by Forward diff when performing derivatives of the eigenvectors of matrix.
Here was my previous code (it was working at a certain point):
function buggy(x)
mat = zeros(eltype(x),(2, 2))
mat[1,1] = x[1]
mat[1,2] = x[2]
mat[2,1] = x[2]
mat[2,2] = x[3]
(ω, pols) = eigen(Symmetric(mat))
return pols
end
When differentiating with:
julia> vv = [82.62687031649999 0.0 82.62687031649999]
julia> ForwardDiff.jacobian(buggy, vv)
4×3 Matrix{Float64}:
NaN NaN NaN
NaN -Inf NaN
NaN Inf NaN
NaN NaN NaN
However, if I remove the specification that the matrix must be Symmetric, then it works.
function good(x)
mat = zeros(eltype(x),(2, 2))
mat[1,1] = x[1]
mat[1,2] = x[2]
mat[2,1] = x[2]
mat[2,2] = x[3]
(ω, pols) = eigen(mat)
return pols
end
julia> ForwardDiff.jacobian(good, vv)
4×3 Matrix{Float64}:
0.0 0.0 0.0
0.0 0.0 0.0
0.0 0.0 0.0
0.0 0.0 0.0
I remember I had to specify Symmetric because, at a certain point, ForwardDiff was working only with that (I do not remember exactly).
- Langage dominant
- Julia
- Étoiles
- 1k
- Forks
- 162
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de JuliaDiff/ForwardDiff.jl
-
missing floatmin, floatmax, and issubnormal for DualPeut-être pris @devmotion l’a pris il y a 16 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
JuliaDiff/ForwardDiff.jl#852 · 6 commentaires ·
-
`fma` and `muladd` ignore NaN-safe modePeut-être pris @devmotion l’a pris il y a 1 jour. Ouverte
Difficulté 3/5 1-2 jours Accessibilité débutants 55/100
JuliaDiff/ForwardDiff.jl#860 ·
-
Enable NaN-safe mode by defaultPeut-être pris @devmotion l’a pris il y a 3 jours. Ouverte
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 25/100
JuliaDiff/ForwardDiff.jl#857 · 1 réaction ·
-
Difficulté 4/5 3-5 jours Accessibilité débutants 52/100
JuliaDiff/ForwardDiff.jl#854 · 1 commentaire ·
-
Difficulté 3/5 1-2 jours Accessibilité débutants 75/100
JuliaDiff/ForwardDiff.jl#849 ·
Toutes les issues de JuliaDiff/ForwardDiff.jl
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
JuliaGPU/KernelAbstractions.jl#897 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
oscar-system/GAP.jl#1455 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
JuliaAI/MLJTransforms.jl#85 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
SciML/OrdinaryDiffEq.jl#4875 ·
Les mainteneurs répondent en général sous 4 jours