|
27 | 27 | @test vals::SVector ≈ vals_a
|
28 | 28 | @test eigvals(m) ≈ vals
|
29 | 29 | @test (vecs*diagm(vals)*vecs')::SMatrix ≈ m
|
30 |
| - |
| 30 | + |
31 | 31 | (vals, vecs) = eig(Hermitian(m))
|
32 | 32 | @test vals::SVector ≈ vals_a
|
33 | 33 | @test eigvals(Hermitian(m)) ≈ vals
|
34 | 34 | @test eigvals(Hermitian(m, :L)) ≈ vals
|
35 | 35 | @test (vecs*diagm(vals)*vecs')::SMatrix ≈ m
|
36 |
| - |
| 36 | + |
37 | 37 | m_d = randn(SVector{2}); m = diagm(m_d)
|
38 | 38 | (vals, vecs) = eig(Hermitian(m))
|
39 | 39 | @test vals::SVector ≈ sort(m_d)
|
|
60 | 60 | @test eigvals(Hermitian(m)) ≈ vals
|
61 | 61 | @test eigvals(Hermitian(m, :L)) ≈ vals
|
62 | 62 | @test (vecs*diagm(vals)*vecs')::SMatrix ≈ m
|
63 |
| - |
| 63 | + |
64 | 64 | (vals, vecs) = eig(Symmetric(m, :L))
|
65 | 65 | @test vals::SVector ≈ vals_a
|
66 |
| - |
| 66 | + |
67 | 67 | m_d = randn(SVector{3}); m = diagm(m_d)
|
68 | 68 | (vals, vecs) = eig(Hermitian(m))
|
69 | 69 | @test vals::SVector ≈ sort(m_d)
|
|
77 | 77 | # Rank 1
|
78 | 78 | v = randn(SVector{3,Float64})
|
79 | 79 | m = v*v'
|
| 80 | + vv = sum(abs2, v) |
80 | 81 | vals, vecs = eig(m)::Tuple{SVector,SMatrix}
|
81 | 82 |
|
82 | 83 | @test vecs'*vecs ≈ eye(SMatrix{3,3,Float64})
|
83 |
| - @test vals ≈ SVector(0.0, 0.0, sumabs2(v)) |
| 84 | + @test vals ≈ SVector(0.0, 0.0, vv) |
84 | 85 | @test eigvals(m) ≈ vals
|
85 | 86 |
|
86 | 87 | # Rank 2
|
87 | 88 | v2 = randn(SVector{3,Float64})
|
88 |
| - v2 -= dot(v,v2)*v/sumabs2(v) |
| 89 | + v2 -= dot(v,v2)*v/(vv) |
| 90 | + v2v2 = sum(abs2, v2) |
89 | 91 | m += v2*v2'
|
90 | 92 | vals, vecs = eig(m)::Tuple{SVector,SMatrix}
|
91 | 93 |
|
92 | 94 | @test vecs'*vecs ≈ eye(SMatrix{3,3,Float64})
|
93 |
| - if sumabs2(v) < sumabs2(v2) |
94 |
| - @test vals ≈ SVector(0.0, sumabs2(v), sumabs2(v2)) |
| 95 | + if vv < v2v2 |
| 96 | + @test vals ≈ SVector(0.0, vv, v2v2) |
95 | 97 | else
|
96 |
| - @test vals ≈ SVector(0.0, sumabs2(v2), sumabs2(v)) |
| 98 | + @test vals ≈ SVector(0.0, v2v2, vv) |
97 | 99 | end
|
98 | 100 | @test eigvals(m) ≈ vals
|
99 | 101 |
|
100 | 102 | # Degeneracy (2 large)
|
101 |
| - m = -99*(v*v')/sumabs2(v) + 100*eye(SMatrix{3,3,Float64}) |
| 103 | + m = -99*(v*v')/vv + 100*eye(SMatrix{3,3,Float64}) |
102 | 104 | vals, vecs = eig(m)::Tuple{SVector,SMatrix}
|
103 | 105 |
|
104 | 106 | @test vecs'*vecs ≈ eye(SMatrix{3,3,Float64})
|
105 | 107 | @test vals ≈ SVector(1.0, 100.0, 100.0)
|
106 | 108 | @test eigvals(m) ≈ vals
|
107 | 109 |
|
108 | 110 | # Degeneracy (2 small)
|
109 |
| - m = (v*v')/sumabs2(v) + 1e-2*eye(SMatrix{3,3,Float64}) |
| 111 | + m = (v*v')/vv + 1e-2*eye(SMatrix{3,3,Float64}) |
110 | 112 | vals, vecs = eig(m)::Tuple{SVector,SMatrix}
|
111 | 113 |
|
112 | 114 | @test vecs'*vecs ≈ eye(SMatrix{3,3,Float64})
|
|
141 | 143 | @test vecs*diagm(vals)*vecs' ≈ m
|
142 | 144 | @test eigvals(m) ≈ vals
|
143 | 145 | end
|
144 |
| - |
| 146 | + |
145 | 147 | @testset "4×4" for i = 1:100
|
146 | 148 | m_a = randn(4,4)
|
147 | 149 | m_a = m_a*m_a'
|
|
159 | 161 | @test eigvals(Hermitian(m)) ≈ vals
|
160 | 162 | @test eigvals(Hermitian(m, :L)) ≈ vals
|
161 | 163 | @test (vecs*diagm(vals)*vecs')::SMatrix ≈ m
|
162 |
| - |
| 164 | + |
163 | 165 | (vals, vecs) = eig(Symmetric(m, :L))
|
164 | 166 | @test vals::SVector ≈ vals_a
|
165 | 167 | m_d = randn(SVector{4}); m = diagm(m_d)
|
|
0 commit comments