Skip to content

Normalize eig_trunc_pullback! iteration by the smallest eigenvalue and use _smith_iteration! - #294

Draft
leburgel wants to merge 1 commit into
lb/onesided_svd_trunc_pullbackfrom
lb/eig_trunc_pullback_smith
Draft

leburgel wants to merge 1 commit into
lb/onesided_svd_trunc_pullbackfrom
lb/eig_trunc_pullback_smith

Conversation

@leburgel

@leburgel leburgel commented Oct 2, 2026 •

Copy link
Copy Markdown
Member

Stacked on #287, which introduces a dedicated helper for the doubling-iteration Sylvester solve.

eig_trunc_pullback! still normalized its Sylvester iteration by the largest |eigenvalue|, so max|D̄⁻¹| = max|D| / min|D| can grow under repeated squaring and overflow when the retained eigenvalues span a large range. This is the same issue #282 fixed for eigh_trunc_pullback!.

Changes:

  • Normalize by the smallest |eigenvalue| instead, which caps max|D̄⁻¹| at 1 so squaring can only shrink it.
  • Replace the inline doubling loop with the shared _smith_iteration! helper, as already done for eigh_trunc_pullback! and svd_trunc_pullback! in Sum only one Neumann series in svd_trunc_pullback! #287.
  • Build APᴴ = A' - ViG * (V * D)' directly rather than AP, so the helper receives a plain matrix instead of an Adjoint, which avoids generic fallbacks on GPU.

Behavioural note: as for eigh_trunc_pullback! in #287, the first term APᴴ X₀ D̄⁻¹ is now also subject to the degeneracy_atol stopping test instead of always being added.

@leburgel
leburgel added this pull request to stack #295 October 2, 2026 07:01
@leburgel leburgel changed the title lb/eig trunc pullback smith Normalize eig_trunc_pullback! iteration by the smallest eigenvalue and use _smith_iteration! Oct 2, 2026
@leburgel
leburgel force-pushed the lb/eig_trunc_pullback_smith branch from d95f96a to d4fcb97 Compare October 2, 2026 11:27

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant