# Eigenvalues of symmetric matrix in packed format (upper triangular entries stacked in vector)

I am trying to compute the eigenvalues of a symmetric matrix in packed format, i.e. you stack the upper triangular entries in a vector (http://www.netlib.org/lapack/lug/node123.html )

It seems like there exists a LAPACK function for that, e.g. `spev`.
However, it seems like that function is not yet supported in Julia’s LAPACK package.

Another way would be to recreate the original matrix and then call `eigen!` or `LAPACK.syevr!`, like so:

``````
using LinearAlgebra

# represent the matrix [1 2 4; 2 3 5; 4 5 6] in packed form
x_packed = [1;2;3;4;5;6]

function populate_upper_triangle!(A::AbstractMatrix, x::AbstractVector)
k = 0
for j in 1:size(A,1)
for i in 1:j
k += 1
A[i,j] = x[k]
end
end
nothing
end

function packed_eigen(x)

# compute original matrix size
n = Int(sqrt(0.25 + 2 * length(x)) - 0.5)
# allocate memory for orignal matrix
X = zeros(n, n)
populate_upper_triangle!(X, x)
# solve eigenvalue problem
(W, Z) = LAPACK.syevr!('V', 'A', 'U', X, 0.0, 0.0, 0, 0, -1.0);
return W
end

packed_eigen(x_packed)
``````

My question is, what is the most efficient way to do this without allocating a lot of memory (I want to compute the eigenvalues hundreds of times)? I want to avoid

`````` X = zeros(n, n)
populate_upper_triangle!(X, x)
``````

and was envisioning something like `reshape` to create a view-based upper triangular matrix that can be passed to `LAPACK.syevr!`.