File: JACORD.BA of Tape: Various/ETH/ba1
(Source file text) 

10 DIM C2(15,15)
20 DIM P1(15,15)
30 PRINT "'JACORD' CYCLIC JACOBI ROTATION OF MATRIX"
40 PRINT "GIVE SIZE OF MATRIX";
50 INPUT M
60 M=M-1
70 PRINT "ENTER MATRIX"
80 PRINT
100 FOR J=0 TO M
110 FOR K=J TO M
115 PRINT "A("&STR$(J)&","&STR$(K)&")";
120 INPUT C2(J,K)
130 NEXT K
140 PRINT
150 NEXT J
160 GOSUB 2000
162 PRINT "NUMBER OF ITERATIONS";L
165 PRINT\PRINT "EIGENVALUES"\PRINT
170 FOR I=0 TO M
180 PRINT C2(I,I),
190 NEXT I
200 PRINT\PRINT\PRINT "EIGENVECTORS"
210 FOR J=0 TO M
220 PRINT
230 FOR K=0 TO M
240 PRINT P1(J,K),
250 NEXT K
260 NEXT J
270 STOP
2000 FOR J=0 TO M
2010 FOR K=0 TO M
2020 P1(J,K)=0
2030 NEXT K
2040 P1(J,J)=1
2050 NEXT J
2100 FOR L=1 TO 50
2110 S9=0
2120 FOR J=0 TO M-1
2130 FOR K=J+1 TO M
2140 S9=S9+C2(J,K)*C2(J,K)
2150 NEXT K
2160 NEXT J
2170 T9=0
2180 IF L>3 THEN 2200
2190 T9=.2*SQR(2*S9)/(M+1)
2200 FOR J=0 TO M-1
2210 FOR K=J+1 TO M
2220 IF C2(J,J)+C2(J,K)<>C2(J,J) THEN 2240
2230 IF C2(K,K)+C2(J,K)=C2(K,K) THEN 2300
2240 IF C2(J,K)*C2(J,K)=0 THEN 2300
2250 IF ABS(C2(J,K))<=T9 THEN 2900
2260 T8=.5*(C2(K,K)-C2(J,J))/C2(J,K)
2270 IF .1/(T8*T8)=0 THEN 2290
2275 T=1/(ABS(T8)+SQR(1+T8*T8))
2280 IF T8>0 THEN 2285
2283 T=-T
2285 C=1/SQR(1+T*T)\S=T*C\GOTO 2400
2290 S=.5/T8\C=1\GOTO 2400
2300 C2(J,K)=0
2330 IF C2(J,J)>=C2(K,K) THEN 2900
2350 C=0
2380 S=1
2400 H=C*C*C2(J,J)-2*C*S*C2(J,K)+S*S*C2(K,K)
2410 G=S*S*C2(J,J)+2*C*S*C2(J,K)+C*C*C2(K,K)
2420 C2(J,K)=C*S*(C2(J,J)-C2(K,K))+C2(J,K)*(C*C-S*S)
2430 C2(J,J)=H\C2(K,K)=G
2440 FOR I=0 TO J-1
2450 H=C*C2(I,J)-S*C2(I,K)
2460 C2(I,K)=S*C2(I,J)+C*C2(I,K)\C2(I,J)=H
2470 NEXT I
2480 FOR I=J+1 TO K-1
2490 H=C*C2(J,I)-S*C2(I,K)
2500 C2(I,K)=S*C2(J,I)+C*C2(I,K)\C2(J,I)=H
2510 NEXT I
2520 FOR I=K+1 TO M
2530 H=C*C2(J,I)-S*C2(K,I)
2540 C2(K,I)=S*C2(J,I)+C*C2(K,I)\C2(J,I)=H
2550 NEXT I
2560 FOR I=0 TO M
2570 H=C*P1(I,J)-S*P1(I,K)
2580 P1(I,K)=S*P1(I,J)+C*P1(I,K)\P1(I,J)=H
2590 NEXT I
2600 C2(J,K)=0
2900 NEXT K
2910 NEXT J
2920 IF S9=0 THEN 2950
2930 NEXT L
2950 RETURN
3000 END