Skip to content

orthogonalize R to X in lobpcg.c #2

@lobpcg

Description

@lobpcg

https://github.com/lobpcg/blopex/blob/master/blopex_abstract/krylov/lobpcg.c is a somewhat simplified C version, following https://arxiv.org/abs/0705.2626, of my original MATLAB implementation https://github.com/lobpcg/blopex/blob/master/blopex_tools/matlab/lobpcg/lobpcg.m

Comparing my original MATLAB implementation https://github.com/lobpcg/blopex/blob/master/blopex_tools/matlab/lobpcg/lobpcg.m with https://github.com/lobpcg/blopex/blob/master/blopex_abstract/krylov/lobpcg.c code, I see an important step missing: MATLAB lines 601-608

%Making active (preconditioned) residuals orthogonal to blockVectorX
if isempty(operatorB)
    blockVectorR(:,activeMask) = blockVectorR(:,activeMask) - ...
        blockVectorX*(blockVectorX'*blockVectorR(:,activeMask));
else
    blockVectorR(:,activeMask) = blockVectorR(:,activeMask) - ...
        blockVectorX*(blockVectorBX'*blockVectorR(:,activeMask));
end

that should have been before line 1026 /*--- orthonormilize blockVectorR */ of https://github.com/lobpcg/blopex/blob/master/blopex_abstract/krylov/lobpcg.c

Other relevant improvements are implemented in scikit-learn/scikit-learn#12319

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions