# Low memory algorithm for matrix diagonalisation

I'm trying to find the largest eigenvalues of very large $N \times N$ matrices ($N = 10^{10}$ and larger). The matrices are not sparse but the multiplication operation is fast.

For now, I'm using methods without explicit matrix storage, from the simple power method to Krylov-Schur (using petsc/slepc in C). But all these methods require to store at least a vector of size $N$.

Is there a diagonalisation algorithm which does not need as much memory?

• Wouldn't computing just one matrix vector product already require $O(N)$ memory just to look at the answer? Or is it some sort of streaming process where you get parts of the resultant vector piece by piece? – Nick Alger Nov 22 '17 at 15:11
• The fact that you possess a non-sparse A, whose action can be applied quickly, suggests structure to the problem that these black-box methods cannot access (think FFT-like or FMM-like). I think you will have to appeal to that structure if you hope to beat them in space complexity. For instance, the eigenvalues of DFT are known, you don't need numerical diagonalization to find them. Perhaps your structure can also be diagonalized analytically? I am pessimistic - these Krylov/matvec based methods are already pretty lean to do their work in as little as O(N) space .. – rchilton1980 Nov 22 '17 at 15:40
• Yes, a full matrix vector multiplication (with a random vector) already require a $O(N)$ memory (to store the result at least). But I can, by example, only consider a subspace of smaller dimension. To be more precise, I can compute quickly any coefficient of the matrix. – Jeannette Nov 22 '17 at 15:40
• .. that said, you are only looking for an output that requires O(1) space, if you only need the eigenvalue and not the eigenvector. So I hesitate to say it's impossible [eg, if your A was the DFT, your problem already solved] See en.wikipedia.org/wiki/…, for example. – rchilton1980 Nov 22 '17 at 15:41
• To answer the second comment I cannot compute analytically the eigenvalues in this case (it's the transfer matrix of a non-integrable statistical model). And I'm also on the "impossible" side, but I've been wrong before – Jeannette Nov 22 '17 at 15:49
{"extraction_info": {"found_math": true, "script_math_tex": 0, "script_math_asciimath": 0, "math_annotations": 0, "math_alttext": 0, "mathml": 0, "mathjax_tag": 0, "mathjax_inline_tex": 1, "mathjax_display_tex": 0, "mathjax_asciimath": 0, "img_math": 0, "codecogs_latex": 0, "wp_latex": 0, "mimetex.cgi": 0, "/images/math/codecogs": 0, "mathtex.cgi": 0, "katex": 0, "math-container": 0, "wp-katex-eq": 0, "align": 0, "equation": 0, "x-ck12": 0, "texerror": 0, "math_score": 0.802128791809082, "perplexity": 669.7721337874933}, "config": {"markdown_headings": true, "markdown_code": true, "boilerplate_config": {"ratio_threshold": 0.18, "absolute_threshold": 10, "end_threshold": 15, "enable": true}, "remove_buttons": true, "remove_image_figures": true, "remove_link_clusters": true, "table_config": {"min_rows": 2, "min_cols": 3, "format": "plain"}, "remove_chinese": true, "remove_edit_buttons": true, "extract_latex": true}, "warc_path": "s3://commoncrawl/crawl-data/CC-MAIN-2019-04/segments/1547583807724.75/warc/CC-MAIN-20190121193154-20190121215154-00599.warc.gz"}