PROGRAM D12R11 C Driver for routine FIXRTS PARAMETER(NPOLES=6,NPOL=NPOLES+1) DIMENSION D(NPOLES) COMPLEX ZCOEF(NPOL),ZEROS(NPOLES),Z LOGICAL POLISH DATA D/6.0,-15.0,20.0,-15.0,6.0,0.0/ C Finding roots of (z-1.0)**6=1.0 C First print roots ZCOEF(NPOLES+1)=CMPLX(1.0,0.0) DO 11 I=NPOLES,1,-1 ZCOEF(I)=CMPLX(-D(NPOLES+1-I),0.0) 11 CONTINUE POLISH=.TRUE. CALL ZROOTS(ZCOEF,NPOLES,ZEROS,POLISH) WRITE(*,'(/1X,A)') 'Roots of (z-1.0)^6 = 1.0' WRITE(*,'(1X,T20,A,T42,A)') 'Root','(z-1.0)^6' DO 12 I=1,NPOLES Z=(ZEROS(I)-1.0)**6 WRITE(*,'(1X,I6,4F12.6)') I,ZEROS(I),Z 12 CONTINUE C Now fix them to lie within unit circle CALL FIXRTS(D,NPOLES) C Check results ZCOEF(NPOLES+1)=CMPLX(1.0,0.0) DO 13 I=NPOLES,1,-1 ZCOEF(I)=CMPLX(-D(NPOLES+1-I),0.0) 13 CONTINUE CALL ZROOTS(ZCOEF,NPOLES,ZEROS,POLISH) WRITE(*,'(/1X,A)') 'Roots reflected in unit circle' WRITE(*,'(1X,T20,A,T42,A)') 'Root','(z-1.0)^6' DO 14 I=1,NPOLES Z=(ZEROS(I)-1.0)**6 WRITE(*,'(1X,I6,4F12.6)') I,ZEROS(I),Z 14 CONTINUE END