How to work with quite large matrices?

4 ビュー (過去 30 日間)
Dominik V
Dominik V 2018 年 12 月 6 日
コメント済み: Dominik V 2018 年 12 月 11 日
Hi,
i`m working with the state-space matrices (sparse format) for a 3d FEM model which become quite large (DOF >= 400k).
My System is a first order ODE
with quadratic matrices . In order to perform Model order reduction (Arnoldi algorithm) i need to rewrite my system in a form like
where obviously K and L are obtained by leftdivision of A within the equation. Unfortunately i do encounter big problems with the memory due to the size of the matrices.
I`ve already tried to decompose the matrix A using different decomposition algorithms, but nothing suceed so far. How to deal with such a problem?
Tall arrays can also not be applied, since the matrices are sparse and way to large to be computed as full matrices.
Thanks,
Vierl
  5 件のコメント
Dominik V
Dominik V 2018 年 12 月 6 日
Thanks a lot. I`ll try this out.
Regards,
Dominik
Dominik V
Dominik V 2018 年 12 月 6 日
Unfortunetely the matrix has to be inverted, i. e. the linear system has to be solved. The MOR needs the A^(-1)B structure for the moment matching of the transfer function.
The only way is to try some iterative solvers.

サインインしてコメントする。

回答 (1 件)

Christine Tobler
Christine Tobler 2018 年 12 月 6 日
The matrices A\B and A\C are very likely to be dense, even if A, B, C are sparse matrices. Since these are of size 400'000, no matter the method you will run into memory problems, and probably need to use a distributed system and the Parallel Computing Toolbox.
However, are you sure you can't modify the Arnoldi method to directly apply to the generalized system with A, B, and C? This paper, Introduction to Krylov Subspace Methods in Model Order Reduction, seems to say that is possible (see page 4).
  5 件のコメント
Christine Tobler
Christine Tobler 2018 年 12 月 10 日
Sorry for the late follow-up. Is the problem with computing the decomposition of A that this goes out-of-memory, or that A is singular? Or is it that decomposition A works, but then A\K and A\L can't be stored in-memory?
Some ideas, maybe one of them will help:
  • There's no need to compute A\K, storing a decomposition of A and the matrix K will allow the computation of A\(K*x) for each step of building the Krylov subspace.
  • Maybe the storage needed for a decomposition of A (LU or LDL, I assume) can be reduced by first applying a reordering to the matrix (see functions amd and dissect).
  • If A is singular, is it possible that this is only caused by all-zero rows and columns which could be removed in a pre-processing step?
  • If all else fails, you could build a new Krylov subspace vector by replacing the A\v step with an iterative method (this would be a bit painful because there are so many parameters to choose at that point).
Dominik V
Dominik V 2018 年 12 月 11 日
No problem, thanks for the response.
The problem occurs when i`m trying to decompose A, because the computer runs out of memory. I`ve tried a lot of different decomposition algorithms, but always the same problem.
I also tried to save the matrix as a tall array, which does not work because A is sparse (and full runs out of memory). Also it is now possible to decompose A in blocks and put those together after going to tall arrays, because then the size of the tall arrays decreases because of memory issus ...
Thanks a lot, i will try to follow the suggested solutions. Maybe it will work then.
Best regards,
Dominik

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeOperating on Diagonal Matrices についてさらに検索

製品


リリース

R2018a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by