@@ -706,6 +706,12 @@ function LinearAlgebra.eigvals(A::Symmetric{<:Dual{Tg,T,N}}) where {Tg,T<:Real,N
706
706
Dual {Tg} .(λ, tuple .(parts... ))
707
707
end
708
708
709
+ function LinearAlgebra. eigvals (A:: Symmetric{<:Dual{Tg,T,N}, <:StaticArrays.StaticMatrix} ) where {Tg,T<: Real ,N}
710
+ λ,Q = eigen (Symmetric (value .(parent (A))))
711
+ parts = ntuple (j -> diag (Q' * getindex .(partials .(A), j) * Q), N)
712
+ Dual {Tg} .(λ, tuple .(parts... ))
713
+ end
714
+
709
715
function LinearAlgebra. eigvals (A:: Hermitian{<:Complex{<:Dual{Tg,T,N}}} ) where {Tg,T<: Real ,N}
710
716
λ,Q = eigen (Hermitian (value .(real .(parent (A))) .+ im .* value .(imag .(parent (A)))))
711
717
parts = ntuple (j -> diag (real .(Q' * (getindex .(partials .(real .(A)) .+ im .* partials .(imag .(A)), j)) * Q)), N)
730
736
731
737
function LinearAlgebra. eigen (A:: Symmetric{<:Dual{Tg,T,N}} ) where {Tg,T<: Real ,N}
732
738
λ = eigvals (A)
733
- _,Q = eigen (SymTridiagonal (value .(parent (A). dv),value .(parent (A). ev)))
739
+ _,Q = eigen (Symmetric (value .(parent (A))))
740
+ parts = ntuple (j -> Q* _lyap_div! (Q' * getindex .(partials .(A), j) * Q - Diagonal (getindex .(partials .(λ), j)), value .(λ)), N)
741
+ Eigen (λ,Dual {Tg} .(Q, tuple .(parts... )))
742
+ end
743
+
744
+ function LinearAlgebra. eigen (A:: Symmetric{<:Dual{Tg,T,N}, <:StaticArrays.StaticMatrix} ) where {Tg,T<: Real ,N}
745
+ λ = eigvals (A)
746
+ _,Q = eigen (Symmetric (value .(parent (A))))
734
747
parts = ntuple (j -> Q* _lyap_div! (Q' * getindex .(partials .(A), j) * Q - Diagonal (getindex .(partials .(λ), j)), value .(λ)), N)
735
748
Eigen (λ,Dual {Tg} .(Q, tuple .(parts... )))
736
749
end
0 commit comments