oseledets / TT-Toolbox

The git repository for the TT-Toolbox
Other
189 stars 73 forks source link

dmr_eig for generalised EP #48

Closed rkuoyemnbeek closed 4 years ago

rkuoyemnbeek commented 4 years ago

Hi,

I am reading with interest your paper https://www.sciencedirect.com/science/article/pii/S0010465513004293?via%3Dihub about calculating exteme eigenvalues of a matrix in tensor-train format.

In my application I have a generalised eigenvalue problem Ax = lamba B x with A, B in tensor-train format (internal ranks <= 3 and nbr dimensions is 3) and the eigenvectors are of rank 1 when writing in tensor-train format. I was wondering if I could, make it works for generalised eigenvalue problem. The only issue that I have, is the following:

In the paper, we calculate in every iteration eigenvalues eigenvalues of X{\neq p}^* A X{\neq p}, For the eigenvalue-solver we need to define an operator that can calculate X{\neq p}^* A X{\neq p} x, which is done in the code dmrg_eig as "localmatvec( .)" For my problem, I need to be able to define the operator (X{\neq p}^ B X{\neq p}) \x (solving a system). In fact X{\neq p}^ B X{\neq p} can be written as a matrix if your tensor is small enough, but this becomes unfeasible for larger tensors. (It works for small tensors) I was wondering if you think it is possible to construct the operator ((X{\neq p}^ B X_{\neq p})^(-1) in a similar way to "local_matvec(.)".

Thanks in advance, Koen

dolgov commented 4 years ago

Hi Koen,

you can use the same inner functions leftreduce_matrix, rightreduce_matrix, local_matvec and assemble_local_matrix and just copy all the lines where they are used on A for B, except of course the local eigensolver itself.

If rx1nlocrx2 is large, you cannot construct X{\neq p}^* B X{\neq p}, let alone an inverse thereof, but often B is a well-conditioned mass matrix, so you should be able to run a simple pcg or bicgstab to approximate the action of the inverse.

However, lobpcg for example needs a function of operatorB itself, so you can just use local_matvec.

Best, Sergey.

rkuoyemnbeek commented 4 years ago

Thanks for the info.