Trailing-Edge
-
PDP-10 Archives
-
decuslib20-02
-
decus/20-0026/dprbm.ssp
There are 2 other files named dprbm.ssp in the archive. Click here to see a list.
C DPRB 10
C ..................................................................DPRB 20
C DPRB 30
C SUBROUTINE DPRBM DPRB 40
C DPRB 50
C PURPOSE DPRB 60
C TO CALCULATE ALL REAL AND COMPLEX ROOTS OF A GIVEN DPRB 70
C POLYNOMIAL WITH REAL COEFFICIENTS. DPRB 80
C DPRB 90
C USAGE DPRB 100
C CALL DPRBM (C,IC,RR,RC,POL,IR,IER) DPRB 110
C DPRB 120
C DESCRIPTION OF PARAMETERS DPRB 130
C C - DOUBLE PRECISION INPUT VECTOR CONTAINING THE DPRB 140
C COEFFICIENTS OF THE GIVEN POLYNOMIAL. COEFFICIENTS DPRB 150
C ARE ORDERED FROM LOW TO HIGH. ON RETURN COEFFI- DPRB 160
C CIENTS ARE DIVIDED BY THE LAST NONZERO TERM. DPRB 170
C IC - DIMENSION OF VECTORS C, RR, RC, AND POL. DPRB 180
C RR - RESULTANT DOUBLE PRECISION VECTOR OF REAL PARTS DPRB 190
C OF THE ROOTS. DPRB 200
C RC - RESULTANT DOUBLE PRECISION VECTOR OF COMPLEX PARTS DPRB 210
C OF THE ROOTS. DPRB 220
C POL - RESULTANT DOUBLE PRECISION VECTOR OF COEFFICIENTS DPRB 230
C OF THE POLYNOMIAL WITH CALCULATED ROOTS. DPRB 240
C COEFFICIENTS ARE ORDERED FROM LOW TO HIGH (SEE DPRB 250
C REMARK 4). DPRB 260
C IR - OUTPUT VALUE SPECIFYING THE NUMBER OF CALCULATED DPRB 270
C ROOTS. NORMALLY IR IS EQUAL TO IC-1. DPRB 280
C IER - RESULTANT ERROR PARAMETER CODED AS FOLLOWS DPRB 290
C IER=0 - NO ERROR, DPRB 300
C IER=1 - SUBROUTINE DPQFB RECORDS POOR CONVERGENCEDPRB 310
C AT SOME QUADRATIC FACTORIZATION WITHIN DPRB 320
C 100 ITERATION STEPS, DPRB 330
C IER=2 - POLYNOMIAL IS DEGENERATE, I.E. ZERO OR DPRB 340
C CONSTANT, DPRB 350
C OR OVERFLOW IN NORMALIZATION OF GIVEN DPRB 360
C POLYNOMIAL, DPRB 370
C IER=3 - THE SUBROUTINE IS BYPASSED DUE TO DPRB 380
C SUCCESSIVE ZERO DIVISORS OR OVERFLOWS DPRB 390
C IN QUADRATIC FACTORIZATION OR DUE TO DPRB 400
C COMPLETELY UNSATISFACTORY ACCURACY, DPRB 410
C IER=-1 - CALCULATED COEFFICIENT VECTOR HAS LESS DPRB 420
C THAN SIX CORRECT SIGNIFICANT DIGITS. DPRB 430
C THIS REVEALS POOR ACCURACY OF CALCULATED DPRB 440
C ROOTS. DPRB 450
C DPRB 460
C REMARKS DPRB 470
C (1) REAL PARTS OF THE ROOTS ARE STORED IN RR(1) UP TO RR(IR)DPRB 480
C AND CORRESPONDING COMPLEX PARTS IN RC(1) UP TO RC(IR). DPRB 490
C (2) ERROR MESSAGE IER=1 INDICATES POOR CONVERGENCE WITHIN DPRB 500
C 100 ITERATION STEPS AT SOME QUADRATIC FACTORIZATION DPRB 510
C PERFORMED BY SUBROUTINE DPQFB. DPRB 520
C (3) NO ACTION BESIDES ERROR MESSAGE IER=2 IN CASE OF A ZERO DPRB 530
C OR CONSTANT POLYNOMIAL. THE SAME ERROR MESSAGE IS GIVEN DPRB 540
C IN CASE OF AN OVERFLOW IN NORMALIZATION OF GIVEN DPRB 550
C POLYNOMIAL. DPRB 560
C (4) ERROR MESSAGE IER=3 INDICATES SUCCESSIVE ZERO DIVISORS DPRB 570
C OR OVERFLOWS OR COMPLETELY UNSATISFACTORY ACCURACY AT DPRB 580
C ANY QUADRATIC FACTORIZATION PERFORMED BY DPRB 590
C SUBROUTINE DPQFB. IN THIS CASE CALCULATION IS BYPASSED. DPRB 600
C IR RECORDS THE NUMBER OF CALCULATED ROOTS. DPRB 610
C POL(1),...,POL(J-IR) ARE THE COEFFICIENTS OF THE DPRB 620
C REMAINING POLYNOMIAL, WHERE J IS THE ACTUAL NUMBER OF DPRB 630
C COEFFICIENTS IN VECTOR C (NORMALLY J=IC). DPRB 640
C (5) IF CALCULATED COEFFICIENT VECTOR HAS LESS THAN SIX DPRB 650
C CORRECT SIGNIFICANT DIGITS THOUGH ALL QUADRATIC DPRB 660
C FACTORIZATIONS SHOWED SATISFACTORY ACCURACY, THE ERROR DPRB 670
C MESSAGE IER=-1 IS GIVEN. DPRB 680
C (6) THE FINAL COMPARISON BETWEEN GIVEN AND CALCULATED DPRB 690
C COEFFICIENT VECTOR IS PERFORMED ONLY IF ALL ROOTS HAVE DPRB 700
C BEEN CALCULATED. IN THIS CASE THE NUMBER OF ROOTS IR IS DPRB 710
C EQUAL TO THE ACTUAL DEGREE OF THE POLYNOMIAL (NORMALLY DPRB 720
C IR=IC-1). THE MAXIMAL RELATIVE ERROR OF THE COEFFICIENT DPRB 730
C VECTOR IS RECORDED IN RR(IR+1). DPRB 740
C DPRB 750
C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED DPRB 760
C SUBROUTINE DPQFB QUADRATIC FACTORIZATION OF A POLYNOMIAL DPRB 770
C BY BAIRSTOW ITERATION. DPRB 780
C DPRB 790
C METHOD DPRB 800
C THE ROOTS OF THE POLYNOMIAL ARE CALCULATED BY MEANS OF DPRB 810
C SUCCESSIVE QUADRATIC FACTORIZATION PERFORMED BY BAIRSTOW DPRB 820
C ITERATION. X**2 IS USED AS INITIAL GUESS FOR THE FIRST DPRB 830
C QUADRATIC FACTOR, AND FURTHER EACH CALCULATED QUADRATIC DPRB 840
C FACTOR IS USED AS INITIAL GUESS FOR THE NEXT ONE. AFTER DPRB 850
C COMPUTATION OF ALL ROOTS THE COEFFICIENT VECTOR IS DPRB 860
C CALCULATED AND COMPARED WITH THE GIVEN ONE. DPRB 870
C FOR REFERENCE, SEE J. H. WILKINSON, THE EVALUATION OF THE DPRB 880
C ZEROS OF ILL-CONDITIONED POLYNOMIALS (PART ONE AND TWO), DPRB 890
C NUMERISCHE MATHEMATIK, VOL.1 (1959), PP.150-180. DPRB 900
C DPRB 910
C ..................................................................DPRB 920
C DPRB 930
SUBROUTINE DPRBM(C,IC,RR,RC,POL,IR,IER) DPRB 940
C DPRB 950
C DPRB 960
DIMENSION C(1),RR(1),RC(1),POL(1),Q(4) DPRB 970
DOUBLE PRECISION C,RR,RC,POL,Q,EPS,A,B,H,Q1,Q2 DPRB 980
C DPRB 990
C TEST ON LEADING ZERO COEFFICIENTS DPRB1000
EPS=1.D-6 DPRB1010
LIM=100 DPRB1020
IR=IC+1 DPRB1030
1 IR=IR-1 DPRB1040
IF(IR-1)42,42,2 DPRB1050
2 IF(C(IR))3,1,3 DPRB1060
C DPRB1070
C WORK UP ZERO ROOTS AND NORMALIZE REMAINING POLYNOMIAL DPRB1080
3 IER=0 DPRB1090
J=IR DPRB1100
L=0 DPRB1110
A=C(IR) DPRB1120
DO 8 I=1,IR DPRB1130
IF(L)4,4,7 DPRB1140
4 IF(C(I))6,5,6 DPRB1150
5 RR(I)=0.D0 DPRB1160
RC(I)=0.D0 DPRB1170
POL(J)=0.D0 DPRB1180
J=J-1 DPRB1190
GO TO 8 DPRB1200
6 L=1 DPRB1210
IST=I DPRB1220
J=0 DPRB1230
7 J=J+1 DPRB1240
C(I)=C(I)/A DPRB1250
POL(J)=C(I) DPRB1260
CALL OVERFL(N) DPRB1270
IF(N-2)42,8,8 DPRB1280
8 CONTINUE DPRB1290
C DPRB1300
C START BAIRSTOW ITERATION DPRB1310
Q1=0.D0 DPRB1320
Q2=0.D0 DPRB1330
9 IF(J-2)33,10,14 DPRB1340
C DPRB1350
C DEGREE OF RESTPOLYNOMIAL IS EQUAL TO ONE DPRB1360
10 A=POL(1) DPRB1370
RR(IST)=-A DPRB1380
RC(IST)=0.D0 DPRB1390
IR=IR-1 DPRB1400
Q2=0.D0 DPRB1410
IF(IR-1)13,13,11 DPRB1420
11 DO 12 I=2,IR DPRB1430
Q1=Q2 DPRB1440
Q2=POL(I+1) DPRB1450
12 POL(I)=A*Q2+Q1 DPRB1460
13 POL(IR+1)=A+Q2 DPRB1470
GO TO 34 DPRB1480
C THIS IS BRANCH TO COMPARISON OF COEFFICIENT VECTORS C AND POL DPRB1490
C DPRB1500
C DEGREE OF RESTPOLYNOMIAL IS GREATER THAN ONE DPRB1510
14 DO 22 L=1,10 DPRB1520
N=1 DPRB1530
15 Q(1)=Q1 DPRB1540
Q(2)=Q2 DPRB1550
CALL DPQFB(POL,J,Q,LIM,I) DPRB1560
IF(I)16,24,23 DPRB1570
16 IF(Q1)18,17,18 DPRB1580
17 IF(Q2)18,21,18 DPRB1590
18 GO TO (19,20,19,21),N DPRB1600
19 Q1=-Q1 DPRB1610
N=N+1 DPRB1620
GO TO 15 DPRB1630
20 Q2=-Q2 DPRB1640
N=N+1 DPRB1650
GO TO 15 DPRB1660
21 Q1=1.D0+Q1 DPRB1670
22 Q2=1.D0-Q2 DPRB1680
C DPRB1690
C ERROR EXIT DUE TO UNSATISFACTORY RESULTS OF FACTORIZATION DPRB1700
IER=3 DPRB1710
IR=IR-J DPRB1720
RETURN DPRB1730
C DPRB1740
C WORK UP RESULTS OF QUADRATIC FACTORIZATION DPRB1750
23 IER=1 DPRB1760
24 Q1=Q(1) DPRB1770
Q2=Q(2) DPRB1780
C DPRB1790
C PERFORM DIVISION OF FACTORIZED POLYNOMIAL BY QUADRATIC FACTOR DPRB1800
B=0.D0 DPRB1810
A=0.D0 DPRB1820
I=J DPRB1830
25 H=-Q1*B-Q2*A+POL(I) DPRB1840
POL(I)=B DPRB1850
B=A DPRB1860
A=H DPRB1870
I=I-1 DPRB1880
IF(I-2)26,26,25 DPRB1890
26 POL(2)=B DPRB1900
POL(1)=A DPRB1910
C DPRB1920
C MULTIPLY POLYNOMIAL WITH CALCULATED ROOTS BY QUADRATIC FACTOR DPRB1930
L=IR-1 DPRB1940
IF(J-L)27,27,29 DPRB1950
27 DO 28 I=J,L DPRB1960
28 POL(I-1)=POL(I-1)+POL(I)*Q2+POL(I+1)*Q1 DPRB1970
29 POL(L)=POL(L)+POL(L+1)*Q2+Q1 DPRB1980
POL(IR)=POL(IR)+Q2 DPRB1990
C DPRB2000
C CALCULATE ROOT-PAIR FROM QUADRATIC FACTOR X*X+Q2*X+Q1 DPRB2010
H=-.5D0*Q2 DPRB2020
A=H*H-Q1 DPRB2030
B=DSQRT(DABS(A)) DPRB2040
IF(A)30,30,31 DPRB2050
30 RR(IST)=H DPRB2060
RC(IST)=B DPRB2070
IST=IST+1 DPRB2080
RR(IST)=H DPRB2090
RC(IST)=-B DPRB2100
GO TO 32 DPRB2110
31 B=H+DSIGN(B,H) DPRB2120
RR(IST)=Q1/B DPRB2130
RC(IST)=0.D0 DPRB2140
IST=IST+1 DPRB2150
RR(IST)=B DPRB2160
RC(IST)=0.D0 DPRB2170
32 IST=IST+1 DPRB2180
J=J-2 DPRB2190
GO TO 9 DPRB2200
C DPRB2210
C SHIFT BACK ELEMENTS OF POL BY 1 AND COMPARE VECTORS POL AND C DPRB2220
33 IR=IR-1 DPRB2230
34 A=0.D0 DPRB2240
DO 38 I=1,IR DPRB2250
Q1=C(I) DPRB2260
Q2=POL(I+1) DPRB2270
POL(I)=Q2 DPRB2280
IF(Q1)35,36,35 DPRB2290
35 Q2=(Q1-Q2)/Q1 DPRB2300
36 Q2=DABS(Q2) DPRB2310
IF(Q2-A)38,38,37 DPRB2320
37 A=Q2 DPRB2330
38 CONTINUE DPRB2340
I=IR+1 DPRB2350
POL(I)=1.D0 DPRB2360
RR(I)=A DPRB2370
RC(I)=0.D0 DPRB2380
IF(IER)39,39,41 DPRB2390
39 IF(A-EPS)41,41,40 DPRB2400
C DPRB2410
C WARNING DUE TO POOR ACCURACY OF CALCULATED COEFFICIENT VECTOR DPRB2420
40 IER=-1 DPRB2430
41 RETURN DPRB2440
C DPRB2450
C ERROR EXIT DUE TO DEGENERATE POLYNOMIAL OR OVERFLOW IN DPRB2460
C NORMALIZATION DPRB2470
42 IER=2 DPRB2480
IR=0 DPRB2490
RETURN DPRB2500
END DPRB2510