-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathzroots.f
35 lines (35 loc) · 849 Bytes
/
zroots.f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
SUBROUTINE ZROOTS(A,M,ROOTS,POLISH)
PARAMETER (EPS=1.E-6,MAXM=101)
COMPLEX A(*),ROOTS(M),AD(MAXM),X,B,C
LOGICAL POLISH
DO 11 J=1,M+1
AD(J)=A(J)
11 CONTINUE
DO 13 J=M,1,-1
X=CMPLX(0.,0.)
CALL LAGUER(AD,J,X,EPS,.FALSE.)
IF(ABS(AIMAG(X)).LE.2.*EPS**2*ABS(REAL(X))) X=CMPLX(REAL(X),0.)
ROOTS(J)=X
B=AD(J+1)
DO 12 JJ=J,1,-1
C=AD(JJ)
AD(JJ)=B
B=X*B+C
12 CONTINUE
13 CONTINUE
IF (POLISH) THEN
DO 14 J=1,M
CALL LAGUER(A,M,ROOTS(J),EPS,.TRUE.)
14 CONTINUE
ENDIF
DO 16 J=2,M
X=ROOTS(J)
DO 15 I=J-1,1,-1
IF(REAL(ROOTS(I)).LE.REAL(X))GO TO 10
ROOTS(I+1)=ROOTS(I)
15 CONTINUE
I=0
10 ROOTS(I+1)=X
16 CONTINUE
RETURN
END