9000  REM  *****  ROOTER  *****  MATHEMATICS PROGRAM  *****
9001  REM  *****  VERSION 1  *****  7/31/69  *****
9002  REM  FINDS THE ROOTS OF POLYNOMIALS
9003  DIM A[26],B[26],X[26]
9004  LET G8=0
9005  PRINT 
9006  LET C1=0
9007  LET D1=1
9008  LET O=0
9009  LET G8=G8+1
9010  PRINT 
9011  READ N
9012  IF N=0 THEN 9133
9013  PRINT 
9014  PRINT "POLYNOMIAL NUMBER";G8;"IS OF ORDER";N
9015  PRINT 
9016  PRINT "   COEFFICIENTS (IN DESCENDING ORDER) ARE:"
9017  PRINT 
9018  PRINT "      ";
9019  FOR I=1 TO N+1
9020  READ A[I]
9021  PRINT A[I];
9022  LET B[I]=A[I]
9023  NEXT I
9024  PRINT 
9025  PRINT 
9026  PRINT "   THE ROOTS ARE:"
9027  PRINT 
9028  IF N <= 2 THEN 9093
9029  IF A[N+1]=O THEN 9101
9030  IF (N/2-INT(N/2))=0 THEN 9033
9031  GOSUB 9109
9032  GOTO 9028
9033  IF ABS(A[N-1])<1.E-25 THEN 9037
9034  LET P=A[N]/A[N-1]
9035  LET Q=A[N+1]/A[N-1]
9036  GOTO 9039
9037  LET P=A[N]
9038  LET Q=A[N+1]
9039  FOR I=1 TO N+1
9040  LET X[I]=A[I]
9041  NEXT I
9042  GOSUB 9104
9043  FOR I=1 TO N-1
9044  LET B[I]=X[I]
9045  NEXT I
9046  LET R=X[N]
9047  LET S=A[N+1]-P*X[N]-Q*X[N-1]
9048  GOSUB 9104
9049  LET X[N]=P*X[N-1]-Q*X[N-2]
9050  LET D=X[N-1]^2-X[N]*X[N-2]
9051  IF ABS(D)>1.E-25 THEN 9054
9052  PRINT "SOLUTIONS UNOBTAINABLE WITH THIS PROGRAM."
9053  GOTO 9005
9054  LET P1=P+(R*X[N-1]-S*X[N-2])/D
9055  LET Q1=Q+(S*X[N-1]-R*X[N])/D
9056  IF ABS(P)>1.E-25 THEN 9060
9057  IF ABS(P1)>1.E-25 THEN 9060
9058  IF ABS(Q)>1.E-25 THEN 9061
9059  GOTO 9062
9060  IF ABS(P1/P-1)>.000001 THEN 9062
9061  IF ABS(Q1/Q-1)<.000001 THEN 9076
9062  LET P=P1
9063  LET Q=Q1
9064  LET C1=C1+1
9065  IF C1=D1*25 THEN 9067
9066  GOTO 9039
9067  PRINT 
9068  PRINT "THE SOLUTION DID NOT CONVERGE AFTER";C1;"ITERATIONS TO"
9069  PRINT "CONTINUE THE SOLUTION FOR 25 MORE ITERATIONS TYPE 1 OTHERWISE"
9070  PRINT "TYPE 0."
9071  INPUT K1
9072  IF K1=1 THEN 9074
9073  GOTO 9005
9074  LET D1=D1+1
9075  GOTO 9039
9076  FOR I=2 TO N-1
9077  LET A[I]=B[I]
9078  NEXT I
9079  LET N=N-2
9080  LET D=P*P-4*Q
9081  IF D<0 THEN 9088
9082  LET D=SQR(D)
9083  PRINT "      ";(-P+D)/2;" AND  ";(-P-D)/2
9084  LET C1=0
9085  LET D1=1
9086  IF N-2>0 THEN 9029
9087  GOTO 9093
9088  LET D=SQR(-D)
9089  PRINT "      ";-P/2;"+ J *";D/2;" AND  ";-P/2;"- J *";D/2
9090  LET C1=0
9091  LET D1=1
9092  IF N-2>0 THEN 9029
9093  IF N=1 THEN 9099
9094  IF N=0 THEN 9005
9095  LET P=B[2]/B[1]
9096  LET Q=B[3]/B[1]
9097  LET N=0
9098  GOTO 9080
9099  PRINT "      ";-B[2]/B[1]
9100  GOTO 9005
9101  PRINT "       0.00000"
9102  LET N=N-1
9103  GOTO 9028
9104  LET X[2]=X[2]-P*X[1]
9105  FOR I=3 TO N
9106  LET X[I]=X[I]-P*X[I-1]-Q*X[I-2]
9107  NEXT I
9108  RETURN 
9109  IF B[2]=0 THEN 9112
9110  LET X=-B[2]/B[1]
9111  GOTO 9113
9112  LET X=-B[N+1]/B[1]
9113  LET F=0
9114  LET F1=0
9115  FOR I=1 TO N+1
9116  LET J=N-I+2
9117  IF B[J]=0 THEN 9121
9118  LET F=B[J]*X^(I-1)+F
9119  IF I-1=O THEN 9121
9120  LET F1=(I-1)*B[J]*X^(I-2)+F1
9121  NEXT I
9122  LET X1=X-F/F1
9123  IF ABS(X/X1-1)<.000001 THEN 9126
9124  LET X=X1
9125  GOTO 9113
9126  PRINT "      ";X1
9127  LET N=N-1
9128  FOR I=2 TO N+1
9129  LET A[I]=B[I]+X1*A[I-1]
9130  LET B[I]=A[I]
9131  NEXT I
9132  RETURN 
9133  STOP 
9900  DATA 3,1,6,11,6,2,1,0,1,0
9999  END 
