PROGRAM xzroots
!	driver for routine zroots
	USE nrtype
	USE nr
	IMPLICIT NONE
	INTEGER(I4B), PARAMETER :: M=4,M1=M+1
	INTEGER(I4B) :: i
	COMPLEX(SP), DIMENSION(M) :: roots
	COMPLEX(SP), DIMENSION(M1) :: a = (/ (0.0_sp,2.0_sp),(0.0_sp,0.0_sp),&
		(-1.0_sp,-2.0_sp),(0.0_sp,0.0_sp),(1.0_sp,0.0_sp) /)
	LOGICAL(LGT) :: polish
	write(*,'(/1x,a)') 'Roots of the polynomial x^4-(1+2i)*x^2+2i'
	polish=.false.
	call zroots(a,roots,polish)
	write(*,'(/1x,a)') 'Unpolished roots:'
	write(*,'(1x,t10,a,t25,a,t37,a)') 'Root #','Real','Imag.'
	do i=1,M
		write(*,'(1x,i11,5x,2f12.6)') i,roots(i)
	end do
	write(*,'(/1x,a)') 'Corrupted roots:'
	do i=1,M
		roots(i)=roots(i)*(1.0_sp+0.01_sp*i)
	end do
	write(*,'(1x,t10,a,t25,a,t37,a)') 'Root #','Real','Imag.'
	do i=1,M
		write(*,'(1x,i11,5x,2f12.6)') i,roots(i)
	end do
	polish=.true.
	call zroots(a,roots,polish)
	write(*,'(/1x,a)') 'Polished roots:'
	write(*,'(1x,t10,a,t25,a,t37,a)') 'Root #','Real','Imag.'
	do i=1,M
		write(*,'(1x,i11,5x,2f12.6)') i,roots(i)
	end do
	END PROGRAM xzroots