Bug (NaNs) when differentiating eigenvectors of Symmetric matrices
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 35/100
Rechercherichtung
Reproduziere den Bericht mit ForwardDiff.jacobian für die bereitgestellte fehlerhafte Funktion und Eingabe und vergleiche eigen(Symmetric(mat)) mit eigen(mat). Untersuche den Pfad der Eigenvektordifferenzierung, der durch den Symmetric-Wrapper betroffen ist, und bestimme, welches Verhalten die gemeldeten NaN- und Inf-Werte vermeiden sollte; abgeschlossen bedeutet, dass die Reproduktion diese Werte nicht mehr erzeugt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
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).
- Vorherrschende Sprache
- Julia
- Sterne
- 1k
- Forks
- 163
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus JuliaDiff/ForwardDiff.jl
-
missing floatmin, floatmax, and issubnormal for DualEvtl. vergeben @devmotion hat das vor 25 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
JuliaDiff/ForwardDiff.jl#852 · 6 Kommentare ·
-
`fma` and `muladd` ignore NaN-safe modeEvtl. vergeben @devmotion hat das vor 10 Tagen übernommen. Offen
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 55/100
JuliaDiff/ForwardDiff.jl#860 ·
-
Enable NaN-safe mode by defaultEvtl. vergeben @devmotion hat das vor 12 Tagen übernommen. Offen
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 25/100
JuliaDiff/ForwardDiff.jl#857 · 1 Reaktion ·
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 52/100
JuliaDiff/ForwardDiff.jl#854 · 1 Kommentar ·
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 75/100
JuliaDiff/ForwardDiff.jl#849 ·
Alle Issues in JuliaDiff/ForwardDiff.jl
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
JuliaGPU/GPUArrays.jl#837 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 88/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 68/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
bmad-sim/BeamTracking.jl#382 ·
Maintainer antworten meist innerhalb von 1 Tag