⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 srotmg.f

📁 贝尔实验室多年开发的矩阵计算程序库的说明文件
💻 F
字号:
      SUBROUTINE SROTMG(SD1,SD2,SX1,SY1,SPARAM)*     .. Scalar Arguments ..      REAL SD1,SD2,SX1,SY1*     ..*     .. Array Arguments ..      REAL SPARAM(5)*     ..**  Purpose*  =======**     CONSTRUCT THE MODIFIED GIVENS TRANSFORMATION MATRIX H WHICH ZEROS*     THE SECOND COMPONENT OF THE 2-VECTOR  (SQRT(SD1)*SX1,SQRT(SD2)**     SY2)**T.*     WITH SPARAM(1)=SFLAG, H HAS ONE OF THE FOLLOWING FORMS..**     SFLAG=-1.E0     SFLAG=0.E0        SFLAG=1.E0     SFLAG=-2.E0**       (SH11  SH12)    (1.E0  SH12)    (SH11  1.E0)    (1.E0  0.E0)*     H=(          )    (          )    (          )    (          )*       (SH21  SH22),   (SH21  1.E0),   (-1.E0 SH22),   (0.E0  1.E0).*     LOCATIONS 2-4 OF SPARAM CONTAIN SH11,SH21,SH12, AND SH22*     RESPECTIVELY. (VALUES OF 1.E0, -1.E0, OR 0.E0 IMPLIED BY THE*     VALUE OF SPARAM(1) ARE NOT STORED IN SPARAM.)**     THE VALUES OF GAMSQ AND RGAMSQ SET IN THE DATA STATEMENT MAY BE*     INEXACT.  THIS IS OK AS THEY ARE ONLY USED FOR TESTING THE SIZE*     OF SD1 AND SD2.  ALL ACTUAL SCALING OF DATA IS DONE USING GAM.***  Arguments*  =========***  SD1    (input/output) REAL**  SD2    (input/output) REAL**  SX1    (input/output) REAL**  SY1    (input) REAL***  SPARAM (input/output)  REAL array, dimension 5*     SPARAM(1)=SFLAG*     SPARAM(2)=SH11*     SPARAM(3)=SH21*     SPARAM(4)=SH12*     SPARAM(5)=SH22**  =====================================================================**     .. Local Scalars ..      REAL GAM,GAMSQ,ONE,RGAMSQ,SFLAG,SH11,SH12,SH21,SH22,SP1,SP2,SQ1,     +     SQ2,STEMP,SU,TWO,ZERO      INTEGER IGO*     ..*     .. Intrinsic Functions ..      INTRINSIC ABS*     ..*     .. Data statements ..*      DATA ZERO,ONE,TWO/0.E0,1.E0,2.E0/      DATA GAM,GAMSQ,RGAMSQ/4096.E0,1.67772E7,5.96046E-8/*     ..      IF (.NOT.SD1.LT.ZERO) GO TO 10*       GO ZERO-H-D-AND-SX1..      GO TO 60   10 CONTINUE*     CASE-SD1-NONNEGATIVE      SP2 = SD2*SY1      IF (.NOT.SP2.EQ.ZERO) GO TO 20      SFLAG = -TWO      GO TO 260*     REGULAR-CASE..   20 CONTINUE      SP1 = SD1*SX1      SQ2 = SP2*SY1      SQ1 = SP1*SX1*      IF (.NOT.ABS(SQ1).GT.ABS(SQ2)) GO TO 40      SH21 = -SY1/SX1      SH12 = SP2/SP1*      SU = ONE - SH12*SH21*      IF (.NOT.SU.LE.ZERO) GO TO 30*         GO ZERO-H-D-AND-SX1..      GO TO 60   30 CONTINUE      SFLAG = ZERO      SD1 = SD1/SU      SD2 = SD2/SU      SX1 = SX1*SU*         GO SCALE-CHECK..      GO TO 100   40 CONTINUE      IF (.NOT.SQ2.LT.ZERO) GO TO 50*         GO ZERO-H-D-AND-SX1..      GO TO 60   50 CONTINUE      SFLAG = ONE      SH11 = SP1/SP2      SH22 = SX1/SY1      SU = ONE + SH11*SH22      STEMP = SD2/SU      SD2 = SD1/SU      SD1 = STEMP      SX1 = SY1*SU*         GO SCALE-CHECK      GO TO 100*     PROCEDURE..ZERO-H-D-AND-SX1..   60 CONTINUE      SFLAG = -ONE      SH11 = ZERO      SH12 = ZERO      SH21 = ZERO      SH22 = ZERO*      SD1 = ZERO      SD2 = ZERO      SX1 = ZERO*         RETURN..      GO TO 220*     PROCEDURE..FIX-H..   70 CONTINUE      IF (.NOT.SFLAG.GE.ZERO) GO TO 90*      IF (.NOT.SFLAG.EQ.ZERO) GO TO 80      SH11 = ONE      SH22 = ONE      SFLAG = -ONE      GO TO 90   80 CONTINUE      SH21 = -ONE      SH12 = ONE      SFLAG = -ONE   90 CONTINUE      GO TO IGO(120,150,180,210)*     PROCEDURE..SCALE-CHECK  100 CONTINUE  110 CONTINUE      IF (.NOT.SD1.LE.RGAMSQ) GO TO 130      IF (SD1.EQ.ZERO) GO TO 160      ASSIGN 120 TO IGO*              FIX-H..      GO TO 70  120 CONTINUE      SD1 = SD1*GAM**2      SX1 = SX1/GAM      SH11 = SH11/GAM      SH12 = SH12/GAM      GO TO 110  130 CONTINUE  140 CONTINUE      IF (.NOT.SD1.GE.GAMSQ) GO TO 160      ASSIGN 150 TO IGO*              FIX-H..      GO TO 70  150 CONTINUE      SD1 = SD1/GAM**2      SX1 = SX1*GAM      SH11 = SH11*GAM      SH12 = SH12*GAM      GO TO 140  160 CONTINUE  170 CONTINUE      IF (.NOT.ABS(SD2).LE.RGAMSQ) GO TO 190      IF (SD2.EQ.ZERO) GO TO 220      ASSIGN 180 TO IGO*              FIX-H..      GO TO 70  180 CONTINUE      SD2 = SD2*GAM**2      SH21 = SH21/GAM      SH22 = SH22/GAM      GO TO 170  190 CONTINUE  200 CONTINUE      IF (.NOT.ABS(SD2).GE.GAMSQ) GO TO 220      ASSIGN 210 TO IGO*              FIX-H..      GO TO 70  210 CONTINUE      SD2 = SD2/GAM**2      SH21 = SH21*GAM      SH22 = SH22*GAM      GO TO 200  220 CONTINUE      IF (SFLAG) 250,230,240  230 CONTINUE      SPARAM(3) = SH21      SPARAM(4) = SH12      GO TO 260  240 CONTINUE      SPARAM(2) = SH11      SPARAM(5) = SH22      GO TO 260  250 CONTINUE      SPARAM(2) = SH11      SPARAM(3) = SH21      SPARAM(4) = SH12      SPARAM(5) = SH22  260 CONTINUE      SPARAM(1) = SFLAG      RETURN      END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -