marcusps/ExpmV.jl

exponentiation over a time interval

Opened this issue · 6 comments

My problem of interest is imaginary time evolution of a Schrodinger-like equation, so I need to discretize time and re-normalize the wavefunction after each time step in order to avoid the trivial zero-solution.

In point 5 of their preprint, Mohy and Higham talk about efficiently computing e^{tA}B over a time interval. I think this can be useful in my case. Is it implemented in ExpmV?

I found the following code comment which might be related

    #   If repeated invocation of EXPMV is required for several values of t
    #   or B, it is recommended to provide M as an external parameter as
    #   M = SELECT_TAYLOR_DEGREE(A,m_max,p_max,prec,shift,bal,true).
    #   This also allows choosing different m_max and p_max.

I am guessing this comes directly from the MATLAB code, as the function SELECT_TAYLOR_DEGREE is not defined.

So here is a code example of my typical usage:

b = ones(Float64, N^2)
for k in 1:10
    b = expmv(0.1,A,b/norm(b))
end 
aout = b/norm(b)

Nah, it's not really implemented. The code is a direct translation of the MATLAB code with minimal modifications to make it run. Exponentiation over a number of time samples is one of the features that would be nice to add, but that takes lower precedence over the proper/working implementation of the 1 norm estimate.

BTW, is normalization really an issue? When you say the evolution is Schrodinger-like, do you mean the integrated evolution is unitary? If so, I would not think that normalization is a big issue for this algorithm.

It is an evolution in imaginary time \tau = i t, because I am interested in obtaining the ground state after the time evolution. So the decaying exponential e^{-\tau H} kills the norm of the wavefunction.

Ah, sorry, I glossed over "imaginary time".

@berceanu I will push a working 1-norm estimation algorithm soon, and then I will move on to exponentiation of a time interval.