Skip to content

dlasd2/slasd2: Increase deflation tolerance to match dlasd7/slasd7#1286

Open
jschueller wants to merge 1 commit into
Reference-LAPACK:masterfrom
jschueller:issue255
Open

dlasd2/slasd2: Increase deflation tolerance to match dlasd7/slasd7#1286
jschueller wants to merge 1 commit into
Reference-LAPACK:masterfrom
jschueller:issue255

Conversation

@jschueller

Copy link
Copy Markdown
Contributor

Fix DBDSDC/SBDSDC returning non-orthogonal U/V for bidiagonal matrices with many nearly-equal singular values (e.g., all singular values ≈ 1).

The divide-and-conquer bidiagonal SVD has two code paths:

  • Full vector path (DLASD2/SLASD2): deflation tolerance = 8 * EPS
  • Compact path (DLASD7/SLASD7): deflation tolerance = 64 * EPS

With the weaker tolerance (8EPS), singular values differing by only ~10EPS (e.g., ~2e-15 for double precision) escape deflation. The subsequent Z computation in DLASD3 then suffers catastrophic cancellation from denominators (σ_i - σ_j) that are tiny, polluting the singular vectors and causing loss of orthogonality.

Raise DLASD2 and SLASD2 to 64*EPS, matching DLASD7 and SLASD7, so more close singular values are deflated and the singular-vector computation remains stable.

Closes #255

Fix DBDSDC/SBDSDC returning non-orthogonal U/V for bidiagonal matrices
with many nearly-equal singular values (e.g., all singular values ≈ 1).

The divide-and-conquer bidiagonal SVD has two code paths:
- Full vector path (DLASD2/SLASD2): deflation tolerance = 8 * EPS
- Compact path  (DLASD7/SLASD7): deflation tolerance = 64 * EPS

With the weaker tolerance (8*EPS), singular values differing by only
~10*EPS (e.g., ~2e-15 for double precision) escape deflation.  The
subsequent Z computation in DLASD3 then suffers catastrophic
cancellation from denominators (σ_i - σ_j) that are tiny, polluting the
singular vectors and causing loss of orthogonality.

Raise DLASD2 and SLASD2 to 64*EPS, matching DLASD7 and SLASD7, so more
close singular values are deflated and the singular-vector computation
remains stable.

Closes Reference-LAPACK#255
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.

DBDSDC returns non-orthogonal U and V for a specific matrix

1 participant