StridedMatrix? Hermitian and SymTridiagonal for LinAlg

linearalgebra

#1

Julia V0.6.2

Is this a bug? Am I using these type wrappers properly?

julia> A = Hermitian(SymTridiagonal([1, 2, 3], [1im, 2im]));

julia> eigfact(A)
ERROR: MethodError: no method matching eigfact!(::Hermitian{Complex{Float64},Sym
Tridiagonal{Complex{Float64}}})
...

The fact is that SymTridiagonal is not an StridedMatrix, and hence there is no method for such case. The same would happen with many more types such as Diagonal, …

Maybe complex hermitian tridiagonal type should be considered and add a method for them. Or don’t allow for SymTridiagonal as a container for the data of the Hermitian type.


#2

Is this a bug? Am I using these type wrappers properly?

This is not really a problem with the Hermitian wrapper, there are no specialized eig* version for complex SymTridiagonal, at least not that is wrapped by julia.


#3

There is a diagonal similarity transformation which reduces a Hermitian tridiagonal to a real symmetric tridiagonal. IINM this constructs it:

function simx(A)
  d=diag(A,1)
  Diagonal(vcat([one(eltype(A))+0im],cumprod(d.*(1./(abs.(d))))))
end

Perhaps this could be used to build the requested methods.