📡
https://www.mathworks.com/matlabcentral/fileexchange/48-locally-optimal-block-preconditioned-conjugate-gradient### Titlelobpcg — Locally Optimal Block Preconditioned Conjugate Gradient eigensolver### Short Summarylobpcg computes a few extreme eigenpairs of large Hermitian standard and generalized eigenproblems using a block preconditioned conjugate gradient method. It supports matrix and function-handle operators, optional constraints, optional preconditioning, and iteration histories for convergence analysis. Tested in GNU Octave Version: 11.3.0 and MATLAB with Parallel Computing Toolbox 26.2 (R2026b), but is expected to work on any post 2008 MATLAB and Octave.### Descriptionlobpcg is an iterative eigensolver for large-scale Hermitian problems where forming a full factorization is impractical. It is designed to compute partial spectra efficiently, especially for sparse matrices and operators supplied as functions or function handles.The solver accepts:- a full or sparse initial block of vectors,- a Hermitian operator A,- optional generalized operator B,- optional preconditioner T,- optional constraint vectors Y,- tolerance, iteration limit, and verbosity settings.It returns orthonormalized eigenvectors, the corresponding eigenvalues, a convergence flag, and optional histories of eigenvalue estimates and residual norms.### Features- Standard and generalized Hermitian eigenproblems- Block iterations for clustered and repeated eigenvalues- Optional preconditioning- Optional orthogonality constraints- Supports matrix, function-name, and function-handle operators- Works with sparse and full inputs- Residual and eigenvalue history output for diagnostics- Pure MATLAB (GNU Octave compatible) code- Support for MATLAB distributed or codistributed arrays- Support for double. single, and complex data types - Suitable for MATLAB and GNU Octave workflows### Typical Use CasesThis solver is useful for:- structural mechanics and vibration modes,- graph and network spectral problems,- repeated or clustered eigenvalue problems,- efficient preconditioning available,- large problems where MATLAB's built-in eig is too expensive and eigs is not the desired workflow.### Notes- A does not need to be positive definite- The code computes the algebraically smallest eigenvalues but can trivially be used for the largest simply applied to -A.- B and T should be positive definite when used. There is no check, and the code may break otherwise.- The code is intended for partial eigensolutions, not high-precision full diagonalization.- Performance and convergence depend on block size, preconditioner quality, and the spectral distribution.### Other implementations- A simplified C-version of this code is a part of the
https://github.com/lobpcg/blopexpackage and is directly available, e.g., in SLEPc and HYPRE.- A Python version LOBPCG is in
https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.linalg.lobpcg.html- LOBPCG is implemented in many open-source packages in various languages for a great variety of applications; see
https://en.wikipedia.org/wiki/LOBPCG- https://mfem.org/examples/ Maxwell Eigenproblem LOBPCG run generates the image used to identify this package.### ReferenceA. V. Knyazev, “Toward the Optimal Preconditioned Eigensolver: Locally Optimal Block Preconditioned Conjugate Gradient Method,” SIAM Journal on Scientific Computing, 23(2), 517–541, 2001.### Docstring%LOBPCG solves Hermitian partial eigenproblems using preconditioning%% [blockVectorX,lambda]=lobpcg(blockVectorX,operatorA)%% outputs the array of algebraic smallest eigenvalues lambda and% corresponding matrix of ortho-normalized eigenvectors blockVectorX of the% Hermitian (full or sparse) operator operatorA using input matrix% blockVectorX as an initial guess, without preconditioning, somewhat% similar to%% opts.issym=1;opts.isreal=1;K=size(blockVectorX,2);% [blockVectorX,lambda]=eigs(operatorA,K,'SR',opts);%% for real symmetric operator operatorA, or%% K=size(blockVectorX,2);[blockVectorX,lambda]=eigs(operatorA,K,'SR');% for
---------
🔀
https://t.me/RoutifyBot?start=from-aximo — 在 Telegram 聊天之间自动转发消息。