00000000: 39 30 30 30 20 50 52 4F 43 20 4D 41 54 49 4E 56 |9000 PROC MATINV|
00000010: 45 52 54 28 52 45 46 20 41 28 2C 29 2C 4E 2C 52 |ERT(REF A(,),N,R|
00000020: 45 46 20 41 49 28 2C 29 29 20 43 4C 4F 53 45 44 |EF AI(,)) CLOSED|
00000030: 0D 39 30 31 30 20 44 49 4D 20 41 41 28 4E 2C 4E |.9010 DIM AA(N,N|
00000040: 29 2C 20 55 28 4E 2C 4E 29 0D 39 30 32 30 20 4D |), U(N,N).9020 M|
00000050: 41 54 45 51 55 41 4C 28 41 2C 4E 2C 4E 2C 41 41 |ATEQUAL(A,N,N,AA|
00000060: 29 0D 39 30 33 30 20 4D 41 54 55 4E 49 54 28 55 |).9030 MATUNIT(U|
00000070: 2C 4E 29 0D 39 30 34 30 20 46 4F 52 20 4B 23 3A |,N).9040 FOR K#:|
00000080: 3D 31 20 54 4F 20 4E 20 44 4F 0D 39 30 35 30 20 |=1 TO N DO.9050 |
00000090: 46 4F 52 20 49 23 3A 3D 31 20 54 4F 20 4E 20 44 |FOR I#:=1 TO N D|
000000A0: 4F 0D 39 30 36 30 20 41 49 28 4B 23 2C 49 23 29 |O.9060 AI(K#,I#)|
000000B0: 3A 3D 41 28 4B 23 2C 49 23 29 2F 41 28 4B 23 2C |:=A(K#,I#)/A(K#,|
000000C0: 4B 23 29 0D 39 30 37 30 20 55 28 4B 23 2C 49 23 |K#).9070 U(K#,I#|
000000D0: 29 3A 3D 55 28 4B 23 2C 49 23 29 2F 41 28 4B 23 |):=U(K#,I#)/A(K#|
000000E0: 2C 4B 23 29 0D 39 30 38 30 20 45 4E 44 46 4F 52 |,K#).9080 ENDFOR|
000000F0: 20 49 23 0D 39 30 39 30 20 46 4F 52 20 49 23 3A | I#.9090 FOR I#:|
00000100: 3D 31 20 54 4F 20 4E 20 44 4F 0D 39 31 30 30 20 |=1 TO N DO.9100 |
00000110: 41 28 4B 23 2C 49 23 29 3A 3D 41 49 28 4B 23 2C |A(K#,I#):=AI(K#,|
00000120: 49 23 29 0D 39 31 31 30 20 45 4E 44 46 4F 52 20 |I#).9110 ENDFOR |
00000130: 49 23 0D 39 31 32 30 20 46 4F 52 20 49 23 3A 3D |I#.9120 FOR I#:=|
00000140: 31 20 54 4F 20 4E 20 44 4F 0D 39 31 33 30 20 49 |1 TO N DO.9130 I|
00000150: 46 20 49 23 3D 4B 23 20 54 48 45 4E 20 47 4F 54 |F I#=K# THEN GOT|
00000160: 4F 20 53 4B 49 50 0D 39 31 34 30 20 46 4F 52 20 |O SKIP.9140 FOR |
00000170: 4A 23 3A 3D 31 20 54 4F 20 4E 20 44 4F 0D 39 31 |J#:=1 TO N DO.91|
00000180: 35 30 20 41 49 28 49 23 2C 4A 23 29 3A 3D 41 28 |50 AI(I#,J#):=A(|
00000190: 49 23 2C 4A 23 29 2D 41 28 49 23 2C 4B 23 29 2A |I#,J#)-A(I#,K#)*|
000001A0: 41 28 4B 23 2C 4A 23 29 0D 39 31 36 30 20 55 28 |A(K#,J#).9160 U(|
000001B0: 49 23 2C 4A 23 29 3A 3D 55 28 49 23 2C 4A 23 29 |I#,J#):=U(I#,J#)|
000001C0: 2D 41 28 49 23 2C 4B 23 29 2A 55 28 4B 23 2C 4A |-A(I#,K#)*U(K#,J|
000001D0: 23 29 0D 39 31 37 30 20 45 4E 44 46 4F 52 20 4A |#).9170 ENDFOR J|
000001E0: 23 0D 39 31 38 30 20 46 4F 52 20 4A 23 3A 3D 31 |#.9180 FOR J#:=1|
000001F0: 20 54 4F 20 4E 20 44 4F 0D 39 31 39 30 20 41 28 | TO N DO.9190 A(|
00000200: 49 23 2C 4A 23 29 3A 3D 41 49 28 49 23 2C 4A 23 |I#,J#):=AI(I#,J#|
00000210: 29 0D 39 32 30 30 20 45 4E 44 46 4F 52 20 4A 23 |).9200 ENDFOR J#|
00000220: 0D 39 32 31 30 20 53 4B 49 50 3A 0D 39 32 32 30 |.9210 SKIP:.9220|
00000230: 20 45 4E 44 46 4F 52 20 49 23 0D 39 32 33 30 20 | ENDFOR I#.9230 |
00000240: 45 4E 44 46 4F 52 20 4B 23 0D 39 32 34 30 20 4D |ENDFOR K#.9240 M|
00000250: 41 54 45 51 55 41 4C 28 55 2C 4E 2C 4E 2C 41 49 |ATEQUAL(U,N,N,AI|
00000260: 29 0D 39 32 35 30 20 4D 41 54 4D 55 4C 54 28 41 |).9250 MATMULT(A|
00000270: 41 2C 4E 2C 4E 2C 41 49 2C 4E 2C 55 29 0D 39 32 |A,N,N,AI,N,U).92|
00000280: 36 30 20 46 4F 52 20 49 23 3A 3D 31 20 54 4F 20 |60 FOR I#:=1 TO |
00000290: 4E 20 44 4F 0D 39 32 37 30 20 46 4F 52 20 4A 23 |N DO.9270 FOR J#|
000002A0: 3A 3D 31 20 54 4F 20 4E 20 44 4F 0D 39 32 38 30 |:=1 TO N DO.9280|
000002B0: 20 53 3A 3D 53 2B 41 42 53 28 55 28 49 23 2C 4A | S:=S+ABS(U(I#,J|
000002C0: 23 29 29 0D 39 32 39 30 20 45 4E 44 46 4F 52 20 |#)).9290 ENDFOR |
000002D0: 4A 23 0D 39 33 30 30 20 45 4E 44 46 4F 52 20 49 |J#.9300 ENDFOR I|
000002E0: 23 0D 39 33 31 30 20 53 4D 41 58 3A 3D 31 45 2D |#.9310 SMAX:=1E-|
000002F0: 30 38 0D 39 33 32 30 20 53 3A 3D 53 2D 4E 0D 39 |08.9320 S:=S-N.9|
00000300: 33 33 30 20 53 3A 3D 53 2F 28 4E 2A 28 4E 2D 31 |330 S:=S/(N*(N-1|
00000310: 29 29 0D 39 33 34 30 20 49 46 20 53 3E 53 4D 41 |)).9340 IF S>SMA|
00000320: 58 20 54 48 45 4E 20 50 52 49 4E 54 20 22 4E 4F |X THEN PRINT "NO|
00000330: 52 4D 41 4C 49 5A 45 44 20 45 52 52 4F 52 3D 20 |RMALIZED ERROR= |
00000340: 22 2C 53 2C 22 20 49 4E 20 4D 41 54 49 4E 56 45 |",S," IN MATINVE|
00000350: 52 54 20 45 58 43 45 45 44 53 20 4C 49 4D 49 54 |RT EXCEEDS LIMIT|
00000360: 22 0D 39 33 35 30 20 45 4E 44 50 52 4F 43 20 4D |".9350 ENDPROC M|
00000370: 41 54 49 4E 56 45 52 54 0D |ATINVERT. |
9000 PROC MATINVERT(REF A(,),N,REF AI(,)
) CLOSED.9010 DIM AA(N,N), U(N,N).9020 M
ATEQUAL(A,N,N,AA).9030 MATUNIT(U,N).9040
FOR K#:=1 TO N DO.9050 FOR I#:=1 TO N D
O.9060 AI(K#,I#):=A(K#,I#)/A(K#,K#).9070
U(K#,I#):=U(K#,I#)/A(K#,K#).9080 ENDFOR
I#.9090 FOR I#:=1 TO N DO.9100 A(K#,I#)
:=AI(K#,I#).9110 ENDFOR I#.9120 FOR I#:=
1 TO N DO.9130 IF I#=K# THEN GOTO SKIP.9
140 FOR J#:=1 TO N DO.9150 AI(I#,J#):=A(
I#,J#)-A(I#,K#)*A(K#,J#).9160 U(I#,J#):=
U(I#,J#)-A(I#,K#)*U(K#,J#).9170 ENDFOR J
#.9180 FOR J#:=1 TO N DO.9190 A(I#,J#):=
AI(I#,J#).9200 ENDFOR J#.9210 SKIP:.9220
ENDFOR I#.9230 ENDFOR K#.9240 MATEQUAL(
U,N,N,AI).9250 MATMULT(AA,N,N,AI,N,U).92
60 FOR I#:=1 TO N DO.9270 FOR J#:=1 TO N
DO.9280 S:=S+ABS(U(I#,J#)).9290 ENDFOR
J#.9300 ENDFOR I#.9310 SMAX:=1E-08.9320
S:=S-N.9330 S:=S/(N*(N-1)).9340 IF S>SMA
X THEN PRINT "NORMALIZED ERROR= ",S," IN
MATINVERT EXCEEDS LIMIT".9350 ENDPROC M
ATINVERT.
×
C64 Image
> CLICK IMAGE PREVIEW FOR FULL MODAL