Skip to content

Commit 3396f0b

Browse files
authored
Avoid symmetrizing diagonal in hermitian power (#1321)
This would make these operations work with immutable matrices as well. The `Hermitian` wrapper ensures that the result has a real diagonal.
1 parent 95703b5 commit 3396f0b

File tree

1 file changed

+1
-11
lines changed

1 file changed

+1
-11
lines changed

src/symmetric.jl

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -866,24 +866,14 @@ function ^(A::Hermitian, p::Integer)
866866
else
867867
retmat = Base.power_by_squaring(A, p)
868868
end
869-
for i in diagind(retmat, IndexStyle(retmat))
870-
retmat[i] = real(retmat[i])
871-
end
872869
return Hermitian(retmat)
873870
end
874871
function ^(A::Hermitian{T}, p::Real) where T
875872
isinteger(p) && return integerpow(A, p)
876873
F = eigen(A)
877874
if all-> λ 0, F.values)
878875
retmat = (F.vectors * Diagonal((F.values).^p)) * F.vectors'
879-
if T <: Real
880-
return Hermitian(retmat)
881-
else
882-
for i in diagind(retmat, IndexStyle(retmat))
883-
retmat[i] = real(retmat[i])
884-
end
885-
return Hermitian(retmat)
886-
end
876+
return Hermitian(retmat)
887877
else
888878
retmat = (F.vectors * Diagonal((complex.(F.values).^p))) * F.vectors'
889879
if T <: Real

0 commit comments

Comments
 (0)