Bug (NaNs) when differentiating eigenvectors of Symmetric matrices
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 35/100
Direção de pesquisa
Reproduza o relatório com ForwardDiff.jacobian usando a função e a entrada com bugs fornecidas, comparando eigen(Symmetric(mat)) com eigen(mat). Leia o caminho de diferenciação de autovetores envolvido pelo wrapper Symmetric e determine qual comportamento deve evitar os valores NaN e Inf relatados; considera-se concluído quando a reprodução não produzir mais esses valores.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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).
- Linguagem predominante
- Julia
- Estrelas
- 1k
- Forks
- 162
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Preparar o ambiente
Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de JuliaDiff/ForwardDiff.jl
-
missing floatmin, floatmax, and issubnormal for DualTalvez já em andamento @devmotion assumiu há 16 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
JuliaDiff/ForwardDiff.jl#852 · 6 comentários ·
-
`fma` and `muladd` ignore NaN-safe modeTalvez já em andamento @devmotion assumiu há 2 dias. Aberta
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 55/100
JuliaDiff/ForwardDiff.jl#860 ·
-
Enable NaN-safe mode by defaultTalvez já em andamento @devmotion assumiu há 4 dias. Aberta
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 25/100
JuliaDiff/ForwardDiff.jl#857 · 1 reação ·
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 52/100
JuliaDiff/ForwardDiff.jl#854 · 1 comentário ·
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 75/100
JuliaDiff/ForwardDiff.jl#849 ·
Todas as issues de JuliaDiff/ForwardDiff.jl
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
JuliaGPU/KernelAbstractions.jl#897 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
oscar-system/GAP.jl#1455 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
JuliaAI/MLJTransforms.jl#85 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
SciML/OrdinaryDiffEq.jl#4875 ·
Mantenedores costumam responder em até 4 dias