|
|
DataMuseum.dkPresents historical artifacts from the history of: RegneCentralen RC3600/RC7000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RegneCentralen RC3600/RC7000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 6656 (0x1a00)
Types: COMAL_SAVE
Names: »INTEG«
└─⟦d85593a46⟧ Bits:30000470 DOMUS disk image - User files
└─⟦this⟧ »/INTEG«
SAVE filename: "INTEG"
0010 REM (+ HOVEDPROGRAM UDVIKLET AF IB OLSEN - 1982 +)«nul»
0020 PRINT "<27>AF"
0030 PRINT "<27><12>"
0040 DELAY = 1
0050 PRINT TAB ( 10 ) ; "*** NUMERISK LOESNING AF ***"
0060 PRINT TAB ( 10 ) ; "** DIFFERINTIALLIGNINGER **"
0070 PRINT
0080 PRINT
0090 PRINT "PROGRAMMET KAN LØSE OP TIL TI FORSKELLIGE FØRSTEORDENS DIFFE-"
0100 PRINT "RINTIALLIGNINGER AF NUMERISK VEJ. RESULTATET KOMMER UD SOM EN GRA-"
0110 PRINT "FISK MODEL, HVOR SAMTLIGE LIGNINGER VIL BLIVE AFBILDET SOM FUNKTION"
0120 PRINT "AF PARAMETEREN AF PRAKTISKE GRUNDE HEDDER PARAMETEREN "
0130 PRINT " -T- OG FUNKTIONSVAERDIEN V(1....10)"
0140 PRINT "EKSEMPEL: "
0150 PRINT " DX/DT = (A + BY)X"
0160 PRINT " DY/DT = (CX + D)Y"
0170 PRINT "BLIVER:"
0180 PRINT " D(1)=(A+B*V(2))*V(1) *DT"
0190 PRINT " D(2)=(C*V(1)+D)*V(2) *DT"
0200 PRINT
0210 DIM DIF$ ( 30 )
0220 INPUT "TAST -RETURN- NAR DU ER KLAR PAA OVERSTAAENDE !!" , DIF$
0230 PRINT "<27><12>"
0240 DELAY = 1
0250 INPUT "INDTAST ANTAL DIFFERINTIALLIGNINGER : " , NUMDIF
0255 EXEC START
0260 CREATE "GEM" , 0
0270 EXEC FILWORK
0280 FOR I = 1 TO NUMDIF
0290 ON ERR THEN GOTO 0330
0300 OPEN FILE ( 0 , 3 ) "GEM"
0310 OPEN FILE ( 0 , 3 ) "GEM"
0330 ON ERR THEN GOTO 0370
0340 PRINT "INDTAST D(" ; I ; ") = " ;
0350 INPUT "" , DIF$
0355 READ FIR$ , NEX$
0360 WRITE FILE ( 0 ) " " , FIR$ , "LET D(" , NEX$ , ")=" , DIF$ , "<13><10>"
0370 CLOSE
0380 ENTER "GEM"
0390 IF SYS ( 7 ) <> 42 THEN PRINT "DER ER FEJL I LIGNINGEN,. PROEV IGEN!"
0400 IF SYS ( 7 ) <> 42 THEN GOTO 0290
0410 PRINT "INDTAST STARTVAERDIEN FOR V(" ; I ; "): " ;
0420 INPUT "" , V ( I )
0430 NEXT
0432 CLOSE
0434 DELETE "GEM"
0435 ON ERR THEN STOP «nul»
0440 DIM STEPV ( NUMDIF ) , MINV ( NUMDIF ) , A1 ( NUMDIF ) , A2 ( NUMDIF ) , A3 ( NUMDIF )
0450 INPUT "INDTAST PARAMETEREMNS START- OG SLUT- VAERDI : " , TBEGIN , TEND
0460 LET DT = ( TEND - TBEGIN ) / 100
0470 FOR I = 1 TO NUMDIF
0480 LET VBEGIN ( I ) = V ( I )
0490 NEXT
0500 FOR T = TBEGIN TO TEND STEP DT
0510 EXEC MODEL
0520 FOR I = 1 TO NUMDIF
0530 LET V ( I ) = V ( I ) + D ( I )
0540 IF V ( I ) > A1 ( I ) THEN LET A1 ( I ) = V ( I )
0550 IF V ( I ) < A2 ( I ) THEN LET A2 ( I ) = V ( I )
0560 NEXT
0570 NEXT
0580 FOR I = 1 TO NUMDIF
0590 WHILE A1 ( I ) > 10 AND A2 ( I ) < - 10 DO
0600 LET A1 ( I ) = A1 ( I ) / 10 A2 ( I ) = A2 ( I ) / 10 A3 ( I ) = A3 ( I ) + 1
0610 ENDWHILE
0620 NEXT
0630 LET ST = A1 ( 1 ) MI = A2 ( 1 )
0640 FOR I = 2 TO NUMDIF
0650 IF A1 ( I ) > ST THEN LET ST = A1 ( I )
0660 IF A2 ( I ) < MI THEN LET MI = A2 ( I )
0670 NEXT
0680 FOR I = 1 TO NUMDIF
0690 LET A1 ( I ) = INT ( ST + 1 ) * 10 ^ A3 ( I )
0700 LET MINV ( I ) = INT ( MI ) * 10 ^ A3 ( I )
0710 NEXT
0720 EXEC RESTART
0730 LET S = 700 / ( ST - MI )
0740 FOR I = 1 TO NUMDIF
0750 LET X = 25 + ( I - 1 ) * 50
0760 CALL "GRAPH" , X , 60
0770 CALL "OUTVECT" , X , 760
0780 CALL "OUTVECT" , X + 4 , 756
0790 CALL "OUTVECT" , X - 4 , 756
0800 CALL "OUTVECT" , X , 760
0810 CALL "GRAPH" , X - 25 , 760
0820 CALL "ALPHA"
0830 PRINT A1 ( I )
0840 FOR J = 760 - S TO 60 STEP - S
0850 CALL "GRAPH" , X - 4 , J
0860 CALL "OUTVECT" , X + 4 , J
0870 NEXT
0880 CALL "GRAPH" , X - 25 , 45
0890 CALL "ALPHA"
0900 PRINT MINV ( I )
0910 CALL "GRAPH" , X - 25 , 20
0920 CALL "ALPHA"
0930 PRINT "V(" ; I ; ")"
0940 NEXT
0950 LET Y = 60
0960 IF MI < 0 THEN LET Y = - MI * S + 60
0970 CALL "GRAPH" , X + 25 , Y
0980 CALL "OUTVECT" , 1150 , Y
0990 CALL "OUTVECT" , 1146 , Y - 4
1000 CALL "OUTVECT" , 1146 , Y + 4
1010 CALL "OUTVECT" , 1150 , Y
1020 CALL "GRAPH" , 1155 , Y
1030 CALL "ALPHA"
1040 PRINT "T"
1050 CALL "GRAPH" , 1135 , Y - 15
1060 CALL "ALPHA"
1070 PRINT TEND
1080 LET S = ( 1125 - X ) / ( TEND - TBEGIN ) J = X + 25
1090 IF TBEGIN < 0 THEN
1100 LET MI = J - TBEGIN * S
1110 CALL "GRAPH" , M1 , Y - 4
1120 CALL "OUTVECT" , MI , Y + 4
1130 CALL "GRAPH" , MI - 2 , Y - 19
1140 CALL "ALPHA"
1150 PRINT "0"
1160 ENDIF
1180 FOR I = 1 TO NUMDIF
1190 LET STEPV ( I ) = 700 / ( A1 ( I ) - MINV ( I ) )
1200 NEXT
1210 EXEC RUNMODEL
1220 FOR I = 1 TO NUMDIF
1230 CALL "GRAPH" , 1150 , ( V ( I ) - MINV ( I ) ) * STEPV ( I ) + 53
1240 CALL "ALPHA"
1250 PRINT "V(" ; I ; ")"
1260 NEXT
1270 PRINT "<27>AF"
1280 END «nul»
1300 PROC MODEL
1310 LET D ( 1 ) = SIN ( V ( 1 ) ) * DT
1320 REM (*D2*)«nul»
1330 REM (*D3*)«nul»
1340 REM (*D4*)«nul»
1350 REM (*D5*)«nul»
1360 REM (*D6*)«nul»
1370 REM (*D7*)«nul»
1380 REM (*D8*)«nul»
1390 REM (*D9*)«nul»
1400 REM (*D10*)«nul»)
1410 ENDPROC
1500 PROC FILWORK
1510 DATA "1310" , "1" , "1320" , "2" , "1330" , "3"
1520 DATA "1340" , "4" , "1350" , "5" , "1360" , "6"
1530 DATA "1370" , "7" , "1380" , "8" , "1390" , "1400" , "9" , "1410" , "10"
1540 DIM FIR$ ( 4 ) , NEX$ ( 2 )
1550 ENDPROC
2000 PROC REPORT
2010 FOR I = 1 TO NUMDIF
2020 LET X = ( TLAST - TBEGIN ) * S + J Y = ( VLAST ( I ) - MINV ( I ) ) * STEPV ( I ) + 60
2030 CALL "GRAPH" , X , Y
2040 LET X = ( T - TBEGIN ) * S + J Y = ( V ( I ) - MINV ( I ) ) * STEPV ( I ) + 60
2050 CALL "OUTVECT" , X , Y
2060 NEXT
2070 ENDPROC +++REPORT+++«nul»
9000 PROC RUNMODEL
9001 IF TBEGIN >= TEND THEN
9002 PRINT "ERROR: START-VAERDIEN ER STOERRE END SLUT-VAERDIEN"
9003 STOP «nul»4
9004 ENDIF
9005 LET ABSERROR = ABS ( ABSERROR ) RELERROR = ABS ( RELERROR )
9006 LET DTMIN = ABS ( DTMIN ) DTMAX = ABS ( DTMAX ) DT = ABS ( DT )
9007 IF DTMAX = 0 THEN LET DTMAX = TEND - TBEGIN
9008 IF DT = 0 THEN LET DT = DTMAX / 100
9009 IF DT > DTMAX THEN LET DT = DTMAX
9010 IF DTMIN = 0 THEN LET DTMIN = DT / 1000
9011 IF DT < DTMIN THEN LET DTMIN = DT
9012 IF RUNNO = 1 THEN
9013 LET T = TBEGIN NEXTREP = TBEGIN
9014 FOR I = 1 TO NUMDIF
9015 LET VBEGIN ( I ) = V ( I )
9016 NEXT
9017 ELSE
9018 IF T >= TEND THEN EXEC RESTART
9019 ENDIF
9020 LET DTFULL = DT STOPCOND = 0
9021 EXEC MODEL
9022 IF ( REPINT > 0 AND NEXTREP = T ) OR REPINT = 0 THEN
9023 EXEC REPORT
9024 LET NEXTREP = T + REPINT
9025 ENDIF
9026 IF T >= TEND OR STOPCOND THEN GOTO 9055
9027 LET TLAST = T DT = DTFULL TNEXT = TLAST + DT
9028 IF TNEXT > TEND THEN
9029 LET TNEXT = TEND DT = TNEXT - TLAST
9030 ELSE
9031 IF TNEXT > NEXTREP AND REPINT > 0 THEN
9032 LET TNEXT = NEXTREP DT = TNEXT - TLAST
9033 ENDIF
9034 ENDIF
9035 FOR I = 1 TO NUMDIF
9036 LET VLAST ( I ) = V ( I ) DLAST ( I ) = D ( I )
9037 NEXT
9038 EXEC TAKESTEP
9039 WHILE NOT ERRORACC OR ( STOPCOND AND DT > DTMIN ) DO
9040 IF DT <= DTMIN THEN
9041 PRINT "ERROR: THE REQUESTED INTEGRATION ACCURACY"
9042 PRINT " CAN NOT BE ACHIEVED"
9043 STOP «nul»
9044 ENDIF
9045 LET DT = DT / 2
9046 IF DT < DTMIN THEN LET DT = DTMIN
9047 LET DTFULL = DT TNEXT = TLAST + DT
9048 EXEC TAKESTEP
9049 ENDWHILE
9050 IF ERRORLOW AND DT < DTMAX AND DT = DTFULL THEN
9051 LET DTFULL = 2 * DTFULL
9052 IF DTFULL > DTMAX THEN LET DTFULL = DTMAX
9053 ENDIF
9054 GOTO 9022
9055 LET RUNNO = RUNNO + 1 DT = DTFULL
9056 IF REPINT < 0 THEN LET NEXTREP = TEND
9057 ENDPROC ** KRUNMODEL ***«nul»
9058 PROC START
9059 DIM V ( NUMDIF ) , D ( NUMDIF ) , VLAST ( NUMDIF ) , DLAST ( NUMDIF ) , VBEGIN ( NUMDIF )
9060 LET RUNNO = 1 DT = 0 DTMIN = 0 DTMAX = 0 TBEGIN = 0 TEND = 0 REPINT = - 1
9061 LET ABSERROR = 0 RELERROR = 0.0001 ERRORACC = 1 ERRORLOW = 0
9062 ENDPROC ** START ***«nul»
9063 PROC RESTART
9064 LET T = TBEGIN NEXTREP = TBEGIN
9065 FOR I = 1 TO NUMDIF
9066 LET V ( I ) = VBEGIN ( I )
9067 NEXT
9068 ENDPROC ** RESTART ***«nul»
9500 PROC TAKESTEP
9501 DIM A1 ( NUMDIF ) , A2 ( NUMDIF ) , A3 ( NUMDIF ) , A4 ( NUMDIF ) , A5 ( NUMDIF )
9502 FOR I = 1 TO NUMDIF
9503 LET TEMP = DT * DLAST ( I ) A1 ( I ) = TEMP
9504 LET V ( I ) = VLAST ( I ) + 0.25 * TEMP
9505 NEXT
9506 LET T = TLAST + 0.25 * DT
9507 EXEC MODEL
9508 FOR I = 1 TO NUMDIF
9509 LET TEMP = DT * D ( I ) A2 ( I ) = TEMP
9510 LET V ( I ) = VLAST ( I ) + ( 0.09375 * A1 ( I ) + 0.28125 * TEMP )
9511 NEXT
9512 LET T = TLAST + 0.375 * DT
9513 EXEC MODEL
9514 FOR I = 1 TO NUMDIF
9515 LET TEMP = DT * D ( I ) A3 ( I ) = TEMP
9516 LET V ( I ) = VLAST ( I ) + ( 0.879381 * A1 ( I ) - 3.2772 * A2 ( I ) + 3.32089 * TEMP )
9517 NEXT
9518 LET T = TLAST + 0.923077 * DT
9519 EXEC MODEL
9520 FOR I = 1 TO NUMDIF
9521 LET TEMP = DT * D ( I ) A4 ( I ) = TEMP
9522 LET DV = 2.03241 * A1 ( I ) - 8 * A2 ( I ) + 7.17349 * A3 ( I ) - 0.205897 * TEMP
9523 LET V ( I ) = VLAST ( I ) + DV
9524 NEXT
9525 LET T = TLAST + DT
9526 EXEC MODEL
9527 FOR I = 1 TO NUMDIF
9528 LET TEMP = DT * D ( I ) A5 ( I ) = TEMP
9529 LET DV = - 0.296296 * A1 ( I ) + 2 * A2 ( I ) - 1.38168 * A3 ( 1 )
9530 LET V ( I ) = VLAST ( I ) + ( DV + 0.452973 * A4 ( I ) - 0.275 * TEMP )
9531 NEXT
9532 LET T = TLAST + 0.5 * DT
9533 EXEC MODEL
9534 LET I = 1 ERRORACC = 1 ERRORLOW = 1
9535 WHILE I <= NUMDIF AND ERRORACC DO
9536 LET DV = 0.00277778 * A1 ( I ) - 0.0299415 * A3 ( I ) - 0.0291999 * A4 ( I )
9537 LET IERROR = DV + 0.02 * A5 ( I ) + 0.0363636 * DT * D ( I )
9538 LET DV = 0.115741 * A1 ( I ) + 0.548928 * A3 ( I ) + 0.535331 * A4 ( I ) - 0.2 * A5 ( I )
9539 LET V ( I ) = VLAST ( I ) + DV + IERROR
9540 LET TEMP = ABSERROR + RELERROR * ABS ( V ( I ) ) IERROR = ABS ( IERROR )
9541 LET ERRORACC = IERROR <= TEMP ERRORLOW = ERRORLOW AND IERROR < 0.02 * TEMP
9542 LET I = I + 1
9543 ENDWHILE
9544 LET T = TNEXT
9545 EXEC MODEL
9546 ENDPROC ** TAKESTEP ***«nul»
FNA definition = 0xffff
FNB definition = 0xffff
FNC definition = 0xffff
FND definition = 0xffff
FNE definition = 0xffff
FNF definition = 0xffff
FNG definition = 0xffff
FNH definition = 0xffff
FNI definition = 0xffff
FNJ definition = 0xffff
FNK definition = 0xffff
FNL definition = 0xffff
FNM definition = 0xffff
FNN definition = 0xffff
FNO definition = 0xffff
FNP definition = 0xffff
FNQ definition = 0xffff
FNR definition = 0xffff
FNS definition = 0xffff
FNT definition = 0xffff
FNU definition = 0xffff
FNV definition = 0xffff
FNW definition = 0xffff
FNX definition = 0xffff
FNY definition = 0xffff
FNZ definition = 0xffff
FN[ definition = 0xffff
FN\ definition = 0xffff
FN] definition = 0xffff
GOSUB-RETURN stack pointer = 0x0001
stack[0] = 0x01ee
stack[1] = 0x0302
stack[2] = 0x02f9
stack[3] = 0x02f9
stack[4] = 0x0000
stack[5] = 0x0000
stack[6] = 0x0000
FOR-NEXT stack pointer = 0x0000
Var# = 0x0000
Loop Top = 0x0000
To Val = 0 (0x00000000)
Step Val = 0 (0x00000000)
Var# = 0x0000
Loop Top = 0x0000
To Val = 0 (0x00000000)
Step Val = 0 (0x00000000)
Var# = 0x0000
Loop Top = 0x0000
To Val = 0 (0x00000000)
Step Val = 0 (0x00000000)
Var# = 0x0000
Loop Top = 0x0000
To Val = 0 (0x00000000)
Step Val = 0 (0x00000000)
Var# = 0x0084
Loop Top = 0x0398
To Val = 1 (0x41100000)
Step Val = 1 (0x41100000)
Var# = 0x0084
Loop Top = 0x0302
To Val = 1 (0x41100000)
Step Val = 1 (0x41100000)
Var# = 0x0000
Loop Top = 0x0000
To Val = 0 (0x00000000)
Step Val = 0 (0x00000000)
REPEAT-UNTIL stack pointer = 0x0000
stack[0] = 0x0000
stack[1] = 0x0000
stack[2] = 0x0000
stack[3] = 0x0000
stack[4] = 0x0000
stack[5] = 0x0000
stack[6] = 0x0000
WHILE-ENDWHILE stack pointer = 0x0000
stack[0] = 0x0000
stack[1] = 0x0000
stack[2] = 0x0000
stack[3] = 0x0000
stack[4] = 0x0000
stack[5] = 0x0000
stack[6] = 0x0000
IF-ELSE stack pointer = 0x0000
stack[0] = 0x0000
stack[1] = 0x0000
stack[2] = 0x0000
stack[3] = 0x0000
stack[4] = 0x0000
stack[5] = 0x0000
stack[6] = 0x0000
Variables:
0x80 0xffff 0x00
0x81 0x0000 0x02 DIF$
0x82 0x0012 0x00 NUMDIF
0x83 0xffff 0x00 FILWORK
0x84 0xffff 0x00 I
0x85 0xffff 0x00 V
0x86 0xffff 0x00 STEPV
0x87 0xffff 0x00 MINV
0x88 0xffff 0x00 A1
0x89 0xffff 0x00 A2
0x8a 0xffff 0x00 A3
0x8b 0xffff 0x00 TBEGIN
0x8c 0xffff 0x00 TEND
0x8d 0xffff 0x00 REPINT
0x8e 0xffff 0x00 VBEGIN
0x8f 0xffff 0x00 T
0x90 0xffff 0x00 MODEL
0x91 0xffff 0x00 D
0x92 0xffff 0x00 ENDWHILW
0x93 0xffff 0x00 ST
0x94 0xffff 0x00 MI
0x95 0xffff 0x00 RESTART
0x96 0xffff 0x00 S
0x97 0xffff 0x00 X
0x98 0xffff 0x00 J
0x99 0xffff 0x00 Y
0x9a 0xffff 0x00 M1
0x9b 0xffff 0x00 RUNMODEL
0x9c 0xffff 0x00 REPORT
0x9d 0xffff 0x00 TLAST
0x9e 0xffff 0x00 VLAST
0x9f 0xffff 0x02 FIRST$
0xa0 0xffff 0x02 FIR$
0xa1 0xffff 0x02 NEX$
0xa2 0xffff 0x00 ENDF
0xa3 0xffff 0x00 DT
0xa4 0xffff 0x00 LIDST
0xa5 0xffff 0x00 TT
0xa6 0xffff 0x00 START
0xa7 0xffff 0x00 ABSERROR
0xa8 0xffff 0x00 RELERROR
0xa9 0xffff 0x00 DTMIN
0xaa 0xffff 0x00 DTMAX
0xab 0xffff 0x00 RUNNO
0xac 0xffff 0x00 NEXTREP
0xad 0xffff 0x00 DTFULL
0xae 0xffff 0x00 STOPCOND
0xaf 0xffff 0x00 TNEXT
0xb0 0xffff 0x00 DLAST
0xb1 0xffff 0x00 TAKESTEP
0xb2 0xffff 0x00 ERRORACC
0xb3 0xffff 0x00 ERRORLOW
0xb4 0xffff 0x00 A4
0xb5 0xffff 0x00 A5
0xb6 0xffff 0x00 TEMP
0xb7 0xffff 0x00 DV
0xb8 0xffff 0x00 IERROR
.magic = 0x4e32 .u_pas = 0x0a82 // Length of UPAS in words .u_das = 0x0199 // Length of UDAS in words .u_dvs = 0x0185 // Start på savede variabel indhold (word adr) .u_nds = 0x0860 // Address på næste prog.sætning (word adr) .u_cps = 0x0851 // Address på curr prog.sætning (word adr) .u_tll = 0x0048 // Page størrelse .u_tts = 0x000e // TAP størrelse .u_ran = 0x0001 // Random tal .u_cdl = 0x0006 // Current DATA sætning ptr .u_cdb = 0x0000 // Current DATA byte ptr .u_esa = 0x0042 // ON ESE (word adr) .u_era = 0x0000 // ON ERR (word adr) .u_cas = 0xffff // CASE dybde .u_las = 0xffff // last (-1)