10 REM ***********
ΠΡΟΓΡΑΜΜΑ Π207 ***************
20 REM * *
30 REM * Εύρεση Πραγματικών και Μιγαδικών Ριζών *
40 REM
*
*
50 REM
**********************************************
60 CLS
70 DIM
A(20),B(20),C(20),D(20)
80 INPUT "ΔΩΣΕ ΤΟ ΒΑΘΜΟ ΠΟΛΥΩΝΥΜΟΥ";N
90
E=.000001
100
PRINT
110 NN=N
120 D=1
130 PRINT "ΔΩΣΕ ΤΟΥΣ ΣΥΝΤΕΛΕΣΤΕΣ ΤΟΥ
ΠΟΛΥΩΝΥΜΟΥ"
140
PRINT
150 FOR
I=0 TO N
160
PRINT "A(";I;")";
170
INPUT A(I)
180 NEXT
I
190
PRINT
200 IF
INT(N/2)=N/2 THEN GOTO 480
210 X=0
220 REM ΒΡΙΣΚΟΥΜΕ ΤΗ ΠΡΑΓΜΑΤΙΚΗ ΡΙΖΑ ΑΝ Ν ΕΙΝΑΙ ΠΕΡΙΤΤΟΣ
230 FOR
I=1 TO 100
240
GOSUB 360
250 IF
ABS(C(N-1))<1E-08 THEN GOTO 460
260
XN=X-B(N)/C(N-1)
270 IF
ABS(XN-X)<.000001 THEN GOTO 320
280 X=XN
290 NEXT
I
300 IF
I>100 THEN STOP
310 GOTO
690
320
PRINT:PRINT "X(";D;")= ";X
330
N=N-1
340 FOR
L=0 TO N:A(L)=B(L):NEXT L
350 GOTO
490
360
B(0)=A(0)
370 FOR
J=1 TO N
380
B(J)=B(J-1)*X+A(J)
390 NEXT
J
400
C(0)=B(0)
410 FOR
T=1 TO N-1
420
C(T)=C(T-1)*X+B(T)
430 NEXT
T
440
RETURN
450 END
460 IF
I=1 THEN X=X+1
470 GOTO
230
480 D=-1
490
TEMP=A(0)
500 FOR
I=1 TO N
510
A(I-1)=A(I)/TEMP
520 NEXT
I
530 IF
N=2 THEN GOTO 960
540
PRINT
550 REM ΒΡΙΣΚΟΥΜΕ ΟΛΕΣ ΤΙΣ ΡΙΖΕΣ ΜΕ ΤΗ ΜΕΘΟΔΟ BAIRSTOW
560 REM ΥΠΟΛΟΓΙΖΟΝΤΑΙ ΤΑ b(j)
570
P=0:Q=0
580 IN=0
590
B(0)=A(0)-P
600
B(1)=A(1)-P*B(0)-Q
610 FOR
J=2 TO N-3
620
B(J)=A(J)-P*B(J-1)-Q*B(J-2)
630 NEXT
J
640
R=A(N-2)-P*B(N-3)-Q*B(N-4)
650 S=A(N-1)-Q*B(N-3)
660 REM ΥΠΟΛΟΓΙΖΟΝΤΑΙ ΤΑ c(j)
670
C(0)=-1
680
C(1)=-B(0)+P
690 FOR
J=2 TO N-3
700
C(J)=-B(J-1)-P*C(J-1)-Q*C(J-2)
710 NEXT
J
720
RP=-B(N-3)-P*C(N-3)-Q*C(N-4)
730 SP=-Q*C(N-3)
740 REM ΥΠΟΛΟΓΙΖΟΝΤΑΙ ΤΑ d(j)
750
D(0)=0
760
D(1)=-1
770 FOR
J=2 TO N-3
780
D(J)=-B(J-1)-P*D(J-1)-Q*D(J-2)
790 NEXT
J
800
RQ=-B(N-4)-P*D(N-3)-Q*D(N-4)
810
SQ=-B(N-3)-Q*D(N-3)
820 REM
830
DT=RP*SQ-SP*RQ
840
DP=(S*RQ-R*SQ)/DT
850
DQ=(R*SP-S*RP)/DT
860 IF
ABS(DP)>E AND ABS(DQ)>E THEN GOTO 900
870
P=P+DP
880
Q=Q+DP
890 GOTO
950
900
IN=IN+1
910 IF
IN>100 THEN GOTO 1210
920
P=P+DP
930
Q=Q+DQ
940 GOTO
590
950
GOSUB 970
960
P=A(0):Q=A(1)
970
F=P*P-4*Q
980
T=SQR(ABS(F))
990
D=D+2
1000 IF
ABS(F)<1E-08 THEN GOTO 1130
1010 IF
F<0 THEN GOTO 1080
1020
PRINT
1030
PRINT "X(";D;")=";.5*(-P+T)
1040
PRINT
1050
PRINT "X(";D+1;")=";.5*(-P-T)
1060
PRINT
1070
GOTO 1150
1080
PRINT "X(";D;")=";-.5*P;"+";.5*T;"i"
1090
PRINT
1100
PRINT "X(";D+1;")=";-.5*P;"-";.5*T;"i"
1110
PRINT
1120
GOTO 1150
1130
PRINT "X(";D;")=X(";D+1;")=";-.5*P
1140 PRINT
1150
N=N-2
1160 IF
N=0 THEN STOP
1170 FOR
L=0 TO N-1
1180
A(L)=B(L)
1190 NEXT L
1200 GOTO 530
1210 PRINT "ΜΕΤΑ ΑΠΟ 100 ΕΠΑΝΑΛΗΨΕΙΣ ΔΕΝ ΕΧΟΥΜΕ
ΣΥΓΚΛΙΣΗ"