Skip to content

Commit ba8fb8b

Browse files
authored
Merge pull request #3837 from martin-frbg/lapack655+697
Improve convergence of LAPACK ?LAED4 and fix a bug in DORCSD2BY1 (Reference-LAPACK PRs 655+697)
2 parents cabf945 + d321357 commit ba8fb8b

File tree

3 files changed

+13
-7
lines changed

3 files changed

+13
-7
lines changed

lapack-netlib/SRC/dlaed4.f

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -328,9 +328,12 @@ SUBROUTINE DLAED4( N, I, D, Z, DELTA, RHO, DLAM, INFO )
328328
IF( C.LT.ZERO )
329329
$ C = ABS( C )
330330
IF( C.EQ.ZERO ) THEN
331-
* ETA = B/A
331+
* ETA = B/A
332332
* ETA = RHO - TAU
333-
ETA = DLTUB - TAU
333+
* ETA = DLTUB - TAU
334+
*
335+
* Update proposed by Li, Ren-Cang:
336+
ETA = -W / ( DPSI+DPHI )
334337
ELSE IF( A.GE.ZERO ) THEN
335338
ETA = ( A+SQRT( ABS( A*A-FOUR*B*C ) ) ) / ( TWO*C )
336339
ELSE

lapack-netlib/SRC/dorcsd2by1.f

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -580,7 +580,7 @@ SUBROUTINE DORCSD2BY1( JOBU1, JOBU2, JOBV1T, M, P, Q, X11, LDX11,
580580
* Simultaneously diagonalize X11 and X21.
581581
*
582582
CALL DBBCSD( JOBV1T, 'N', JOBU1, JOBU2, 'T', M, Q, P, THETA,
583-
$ WORK(IPHI), V1T, LDV1T, DUM2, 1, U1, LDU1, U2,
583+
$ WORK(IPHI), V1T, LDV1T, DUM1, 1, U1, LDU1, U2,
584584
$ LDU2, WORK(IB11D), WORK(IB11E), WORK(IB12D),
585585
$ WORK(IB12E), WORK(IB21D), WORK(IB21E),
586586
$ WORK(IB22D), WORK(IB22E), WORK(IBBCSD), LBBCSD,
@@ -635,7 +635,7 @@ SUBROUTINE DORCSD2BY1( JOBU1, JOBU2, JOBV1T, M, P, Q, X11, LDX11,
635635
* Simultaneously diagonalize X11 and X21.
636636
*
637637
CALL DBBCSD( 'N', JOBV1T, JOBU2, JOBU1, 'T', M, M-Q, M-P,
638-
$ THETA, WORK(IPHI), DUM2, 1, V1T, LDV1T, U2,
638+
$ THETA, WORK(IPHI), DUM1, 1, V1T, LDV1T, U2,
639639
$ LDU2, U1, LDU1, WORK(IB11D), WORK(IB11E),
640640
$ WORK(IB12D), WORK(IB12E), WORK(IB21D),
641641
$ WORK(IB21E), WORK(IB22D), WORK(IB22E),
@@ -706,7 +706,7 @@ SUBROUTINE DORCSD2BY1( JOBU1, JOBU2, JOBV1T, M, P, Q, X11, LDX11,
706706
* Simultaneously diagonalize X11 and X21.
707707
*
708708
CALL DBBCSD( JOBU2, JOBU1, 'N', JOBV1T, 'N', M, M-P, M-Q,
709-
$ THETA, WORK(IPHI), U2, LDU2, U1, LDU1, DUM2,
709+
$ THETA, WORK(IPHI), U2, LDU2, U1, LDU1, DUM1,
710710
$ 1, V1T, LDV1T, WORK(IB11D), WORK(IB11E),
711711
$ WORK(IB12D), WORK(IB12E), WORK(IB21D),
712712
$ WORK(IB21E), WORK(IB22D), WORK(IB22E),

lapack-netlib/SRC/slaed4.f

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -328,9 +328,12 @@ SUBROUTINE SLAED4( N, I, D, Z, DELTA, RHO, DLAM, INFO )
328328
IF( C.LT.ZERO )
329329
$ C = ABS( C )
330330
IF( C.EQ.ZERO ) THEN
331-
* ETA = B/A
331+
* ETA = B/A
332332
* ETA = RHO - TAU
333-
ETA = DLTUB - TAU
333+
* ETA = DLTUB - TAU
334+
*
335+
* Update proposed by Li, Ren-Cang:
336+
ETA = -W / ( DPSI+DPHI )
334337
ELSE IF( A.GE.ZERO ) THEN
335338
ETA = ( A+SQRT( ABS( A*A-FOUR*B*C ) ) ) / ( TWO*C )
336339
ELSE

0 commit comments

Comments
 (0)