Skip to content

Commit 81f6c7c

Browse files
authored
Fix eigvals for complex 3x3 matrices (#995)
* fix eigvals for complex 3x3 matrices * bump version
1 parent d73fc37 commit 81f6c7c

File tree

3 files changed

+15
-2
lines changed

3 files changed

+15
-2
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "StaticArrays"
22
uuid = "90137ffa-7385-5640-81b9-e52037218182"
3-
version = "1.3.5"
3+
version = "1.3.6"
44

55
[deps]
66
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"

src/eigen.jl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,11 @@ end
5050
end
5151

5252
@inline function _eigvals(::Size{(3,3)}, A::LinearAlgebra.RealHermSymComplexHerm{T}, permute, scale) where {T <: Real}
53-
S = arithmetic_closure(T)
53+
S = if typeof(A) <: Hermitian{Complex{T}}
54+
complex(arithmetic_closure(T))
55+
else
56+
arithmetic_closure(T)
57+
end
5458
Sreal = real(S)
5559

5660
@inbounds a11 = convert(Sreal, A.data[1])

test/eigen.jl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,15 @@ using StaticArrays, Test, LinearAlgebra
134134
@test (@inferred_maybe_allow SVector{3,ComplexF64} eigvals(m1, m2)) eigvals(m1_a, m2_a)
135135
end
136136

137+
@testset "3×3 complex" begin
138+
m = SMatrix{3,3}(ComplexF64[
139+
0.0 + 0.0im -0.0 - 1.3823165541274323im -0.0 - 0.29894503384118465im;
140+
0.0 + 1.3823165541274323im 0.0 + 0.0im -0.0 - 1.9507754416262268im;
141+
0.0 + 0.29894503384118465im 0.0 + 1.9507754416262268im 0.0 + 0.0im])
142+
vals = eigvals(m)
143+
@test isapprox(vals, eigvals(Matrix(m)))
144+
end
145+
137146
@testset "3x3 degenerate cases" begin
138147
# Rank 1
139148
v = randn(SVector{3,Float64})

0 commit comments

Comments
 (0)