10 REM Probleem van Labrujere 20 REM ====================== 50 REM MESH GENERATOR 60 REM -------------- 130 INPUT "Aantal rasterlijnen in radiale richting (7) : ",NDR 140 INPUT "Aantal rasterlijnen in omtreks-richting (5) : ",NPH 150 IF NDR<=0 THEN NDR=7 160 IF NPH<=0 THEN NPH=5 170 REM 180 REM ... Initialisatie ... 190 LIMC=NDR*NPH : REM aantal rasterpunten 193 LIMT=(NDR-1)*(NPH-1) : REM aantal elementen 197 LIMV=NDR*(NPH-1)+NPH*(NDR-1) : REM aantal knooppunten 200 DIM NOV(LIMV,2) : DIM MAV(LIMC,2) : REM Snelheden 210 LIMB=2*(NDR-1)+2*(NPH-1) : REM aantal randpunten 220 REM 230 PRINT "Algemene gegevens ..." 240 OPEN "R",#1,"HDBGENER.BIN",20 250 FIELD #1, 4 AS F1$, 4 AS F2$, 4 AS F3$, 4 AS F4$, 4 AS F5$ 260 LSET F1$=MKI$(LIMC) : LSET F2$=MKI$(LIMT) 265 LSET F3$=MKI$(LIMV) 270 LSET F4$=MKI$(LIMB) : LSET F5$=MKI$(NPH) 280 PUT #1,1 : CLOSE #1 290 REM 300 PRINT "Coordinaten ..." 310 OPEN "R",#1,"HDBCOORD.BIN",8 320 FIELD #1, 4 AS X$, 4 AS Y$ 330 PI=4*ATN(1) : DPHI=.5*PI/(NPH-1) 340 R=10 : P=R^(1/(NDR-1))-1 : REM Laatste radiale meshlijn 350 FOR I=1 TO NDR 360 R=(1+P)^(I-1) : REM Leidt tot equivalente elementen 370 FOR J=1 TO NPH 380 PHI=(J-1)*DPHI : K=(I-1)*NPH+J 390 X=R*COS(PHI) : Y=R*SIN(PHI) 400 LSET X$=MKS$(X) : LSET Y$=MKS$(Y) 410 PUT #1,K : NEXT J : NEXT I 420 CLOSE #1 430 REM 440 PRINT "Topologie ..." 450 OPEN "R",#1,"HDBTOPOL.BIN",16 460 FIELD #1, 4 AS F1$, 4 AS F2Y$, 4 AS F3$, 4 AS F4$ 470 FOR I=1 TO NDR-1 : FOR J=1 TO NPH-1 480 K=(I-1)*(NPH-1)+J 490 KON2=(I-1)*NPH+J : KON1=(I-1)*NPH+J+1 500 KON3=I*NPH+J : KON4=I*NPH+J+1 510 REM PRINT KON1,KON2,KON3,KON4 520 LSET F1$=MKI$(KON1) : LSET F2$=MKI$(KON2) 530 LSET F3$=MKI$(KON3) : LSET F4$=MKI$(KON4) 540 PUT #1,K : NEXT J : NEXT I 550 CLOSE #1 560 REM 570 PRINT "Onbekenden ..." 580 FOR I=1 TO NDR : FOR J=1 TO NPH-1 590 NR1=(I-1)*NPH+J : NR2=(I-1)*NPH+J+1 600 K=(2*NPH-1)*(I-1)+J : NOV(K,1)=NR1 : NOV(K,2)=NR2 610 REM PRINT K,NOV(K,1),NOV(K,2) 620 NEXT J : NEXT I 630 FOR I=1 TO NDR-1 : FOR J=1 TO NPH 640 NR1=(I-1)*NPH+J : NR2=I*NPH+J 650 K=(2*NPH-1)*I+J-NPH : NOV(K,1)=NR1 : NOV(K,2)=NR2 660 REM PRINT K,NOV(K,1),NOV(K,2) 670 NEXT J : NEXT I 680 REM 690 FOR K=1 TO LIMV 700 I=NOV(K,1) : J=NOV(K,2) 710 II=I : IF J<I THEN II=J 720 JJ=ABS(I-J) : IF JJ>2 THEN JJ=2 730 MAV(II,JJ)=K : NEXT K 740 REM 750 OPEN "R",#1,"HDBUNKNO.BIN",8 760 FIELD #1, 4 AS F1$, 4 AS F2$ 770 FOR I=1 TO LIMV 780 LSET F1$=MKI$(NOV(I,1)) : LSET F2$=MKI$(NOV(I,2)) 790 PUT #1,I : NEXT I 800 FOR I=1 TO LIMC 810 LSET F1$=MKI$(MAV(I,1)) : LSET F2$=MKI$(MAV(I,2)) 820 PUT #1,I+LIMV : NEXT I 830 CLOSE #1 840 PRINT "Randvoorwaarden ..." 850 OPEN "R",#1,"HDBBOUND.BIN",12 860 FIELD #1, 4 AS F1$, 4 AS F2Y$, 4 AS F3$ 870 FOR I=1 TO NDR-1 : REM ... Instroming ... 880 NOB1=I*NPH : NOB2=(I+1)*NPH : NOB3=1 890 REM PRINT NOB1,NOB2,NOB3 900 LSET F1$=MKI$(NOB1) : LSET F2$=MKI$(NOB2) 905 LSET F3$=MKI$(NOB3) 910 PUT #1,I : NEXT I : L=NDR-1 920 FOR I=1 TO NPH-1 : REM ... Cirkel ... 930 NOB1=I : NOB2=I+1 : NOB3=2 940 REM PRINT NOB1,NOB2,NOB3 950 LSET F1$=MKI$(NOB1) : LSET F2$=MKI$(NOB2) 955 LSET F3$=MKI$(NOB3) 960 PUT #1,I+L : NEXT I : L=L+NPH-1 970 FOR I=1 TO NDR-1 : REM ... Symmetrie ... 980 NOB1=NPH*(I-1)+1 : NOB2=NPH*I+1 : NOB3=1 990 REM PRINT NOB1,NOB2,NOB3 1000 LSET F1$=MKI$(NOB1) : LSET F2$=MKI$(NOB2) 1005 LSET F3$=MKI$(NOB3) 1010 PUT #1,I+L : NEXT I : L=L+NDR-1 1020 FOR I=1 TO NPH-1 : REM ... Uitstroming ... 1030 NOB1=NPH*(NDR-1)+I : NOB2=NPH*(NDR-1)+I+1 : NOB3=3 1040 REM PRINT NOB1,NOB2,NOB3 1050 LSET F1$=MKI$(NOB1) : LSET F2$=MKI$(NOB2) 1055 LSET F3$=MKI$(NOB3) 1060 PUT #1,I+L : NEXT I : L=L+NPH-1 : CLOSE #1 1070 END
10 REM Probleem van Labrujere 20 REM ====================== 30 REM HOOFDPROGRAMMA 40 REM -------------- 45 PRINT "Gegevens inlezen ..." 100 OPEN "R",#1,"HDBGENER.BIN",20 110 FIELD #1, 4 AS F1$, 4 AS F2$, 4 AS F3$, 4 AS F4$, 4 AS F5$ 120 GET #1,1 : LIMC=CVI(F1$) : LIMT=CVI(F2$) 125 LIMV=CVI(F3$) : LIMB=CVI(F4$) 130 NPH=CVI(F5$) 140 CLOSE #1 : NN=2*LIMV : NB1=4*NPH 150 REM 160 DIM X(LIMC),Y(LIMC),MAV(LIMC,2),S(NN,NB1),B(NN) 170 REM 180 REM Coordinaten: 190 OPEN "R",#1,"HDBCOORD.BIN",8 200 FIELD #1, 4 AS F1$, 4 AS F2$ 210 FOR I=1 TO LIMC : GET #1,I 220 X(I)=CVS(F1$) : Y(I)=CVS(F2$) 230 NEXT I : CLOSE #1 240 REM 250 REM Nummering onbekenden: 260 OPEN "R",#1,"HDBUNKNO.BIN",8 270 FIELD #1, 4 AS F1$, 4 AS F2$ 280 FOR I=1 TO LIMC : GET #1,I+LIMV 290 MAV(I,1)=CVI(F1$) : MAV(I,2)=CVI(F2$) 300 NEXT I : CLOSE #1 305 REM 320 REM Grote matrix en vector schooonmaken: 330 FOR I=1 TO NN : FOR J=1 TO NB1 : S(I,J)=0 335 NEXT J : B(I)=0 : NEXT I 340 REM 350 DIM NO(4),E(8,8),R(2),NR(8),A(8) 490 OPEN "R",#1,"HDBTOPOL.BIN",16 500 FIELD #1, 4 AS F1$, 4 AS F2$, 4 AS F3$, 4 AS F4$ : GET #1,1 510 NO(1)=CVI(F1$) : NO(2)=CVI(F2$) 515 NO(3)=CVI(F3$) : NO(4)=CVI(F4$) 520 PRINT "Repeteerbaar element ..." : GOSUB 1060 530 REM 540 PRINT "Assemblage procedure voor";LIMT;"elementen ..." 550 FOR F=1 TO LIMT : GET #1,F : PRINT F; 560 NO(1)=CVI(F1$) : NO(2)=CVI(F2$) 565 NO(3)=CVI(F3$) : NO(4)=CVI(F4$) 570 REM 580 REM Snelheids-nummering: 590 FOR K=1 TO 4 : L=(K MOD 4)+1 600 II=NO(K) : IF NO(L)<NO(K) THEN II=NO(L) 610 JJ=ABS(NO(K)-NO(L)) : IF JJ>2 THEN JJ=2 620 IJ=MAV(II,JJ) : NR(2*K-1)=2*IJ-1 : NR(2*K)=2*IJ 630 NEXT K 640 REM Element intellen: 650 FOR I=1 TO 8 : IG=NR(I) 660 FOR J=I TO 8 : JG=NR(J) 670 II=IG : IF JG<IG THEN II=JG 680 JJ=ABS(IG-JG)+1 690 S(II,JJ)=S(II,JJ)+E(I,J) 700 NEXT J : NEXT I 710 NEXT F : CLOSE #1 : PRINT : REM Einde bulk. 720 REM 730 PRINT "Randvoorwaarden ..." 740 OPEN "R",#1,"HDBBOUND.BIN",12 750 FIELD #1, 4 AS F1$, 4 AS F2$, 4 AS F3$ 760 FOR F=1 TO LIMB : GET #1,F 770 MU=CVI(F1$) : NU=CVI(F2$) : KIND=CVI(F3$) 780 GOSUB 1970 790 REM Snelheids-nummering: 800 II=MU : IF NU<MU THEN II=NU 810 JJ=ABS(MU-NU) : IF JJ>2 THEN JJ=2 820 IJ=MAV(II,JJ) : NR(1)=2*IJ-1 : NR(2)=2*IJ 830 FOR I=1 TO 2 : IG=NR(I) 840 FOR J=I TO 2 : JG=NR(J) 850 II=IG : IF JG<IG THEN II=JG 860 JJ=ABS(IG-JG)+1 870 S(II,JJ)=S(II,JJ)+E(I,J) 880 NEXT J 890 B(IG)=B(IG)+R(I) 900 NEXT I 910 NEXT F : CLOSE #1 : REM Einde totale assemblage. 920 REM 930 GOSUB 2180 : REM Los de vergelijkingen op ... 940 REM 950 OPEN "R",#1,"HDBVELOC.BIN",8 960 FIELD #1, 4 AS F1$, 4 AS F2$ 970 FOR K=1 TO LIMV 980 LSET F1$=MKS$(B(2*K-1)) : LSET F2$=MKS$(B(2*K)) 990 REM LPRINT B(2*K-1),B(2*K) 1000 PUT #1,K : NEXT K : CLOSE #1 1010 END 1020 REM ========================= 1030 REM Eindige Elementen Matrix 1040 REM ========================= 1050 REM Maak schoon: 1060 FOR I=1 TO 8 : FOR J=1 TO 8 : E(I,J)=0 : NEXT J : NEXT I 1570 REM Lokaliseer gegevens: 1580 X1=X(NO(1)) : X2=X(NO(2)) : X3=X(NO(3)) : X4=X(NO(4)) 1590 Y1=Y(NO(1)) : Y2=Y(NO(2)) : Y3=Y(NO(3)) : Y4=Y(NO(4)) 1600 X21=X2-X1 : X32=X3-X2 : X43=X4-X3 : X14=X1-X4 1610 Y21=Y2-Y1 : Y32=Y3-Y2 : Y43=Y4-Y3 : Y14=Y1-Y4 1620 REM Onsamendrukbaar: 1630 A(1)=-Y21 : A(3)=-Y32 : A(5)=-Y43 : A(7)=-Y14 1640 A(2)=+X21 : A(4)=+X32 : A(6)=+X43 : A(8)=+X14 1650 GOSUB 1900 : REM Voeg toe aan element ... 1660 REM Rotatievrij: 1670 A(1)=+X21 : A(3)=+X32 : A(5)=+X43 : A(7)=+X14 1680 A(2)=+Y21 : A(4)=+Y32 : A(6)=+Y43 : A(8)=+Y14 1690 GOSUB 1900 : REM Voeg toe aan element ... 1700 REM Isoparametriek: 1710 A(1)=+1 : A(2)=0 : A(3)=-1 : A(4)=0 1715 A(5)=+1 : A(6)=0 : A(7)=-1 : A(8)=0 1720 GOSUB 1900 : REM Voeg toe aan element ... 1730 A(1)=0 : A(2)=+1 : A(3)=0 : A(4)=-1 1735 A(5)=0 : A(6)=+1 : A(7)=0 : A(8)=-1 1740 GOSUB 1900 : REM Voeg toe aan element ... 1750 RETURN 1760 REM -------------------- 1770 REM Voeg toe aan element 1780 REM -------------------- 1790 REM Spoorwegen: 1900 SUM=0 : FOR I=1 TO 8 : SUM=SUM+A(I)*A(I) 1905 NEXT I : SUM=1/SUM 1905 REM Kleinste kwadraten methode: 1910 FOR I=1 TO 8 : FOR J=1 TO 8 1920 E(I,J)=E(I,J)+A(I)*A(J)*SUM 1930 NEXT J : NEXT I 1940 RETURN 1950 REM =============== 1960 REM Randvoorwaarden 1970 REM =============== 1980 FOR I=1 TO 2 : R(I)=0 : FOR J=1 TO 2 : E(I,J)=0 1985 NEXT J : NEXT I 1990 REM 2000 ON KIND GOTO 2030,2060,2120 2010 REM 2020 REM ... V = 0 ... 2030 E(2,2)=1 : RETURN 2040 REM 2050 REM ... Y.U - X.V = 0 ... 2060 X21=X(NU)-X(MU) : Y21=Y(NU)-Y(MU) 2070 SUM=X21*X21+Y21*Y21 2080 E(1,1)=Y21*Y21/SUM : E(2,2)=X21*X21/SUM 2090 E(1,2)=-X21*Y21/SUM : E(2,1)=-X21*Y21/SUM 2100 RETURN 2110 REM ... U = 1 ... 2120 E(1,1)=1 : R(1)=1 : RETURN 2130 REM 2140 REM ============================================== 2150 REM OPLOSSEN VAN LINEAIRE VERGELIJKINGEN VOOR 2160 REM POSITIEF DEFINIETE SYMMETRISCHE BAND MATRICES 2170 REM ============================================== 2180 IF NN<2 THEN PRINT "GAUSS: NN=";NN : END 2190 IF NB1<2 THEN PRINT "GAUSS: NB1=";NB1 : END 2200 REM 2210 PRINT "Vegen voor";NN;"vergelijkingen ..." 2220 II=NN-1 : KK=NB1-1 2230 FOR I=1 TO II : DIAG=S(I,1) : PRINT I; 2240 IF DIAG=0 THEN PRINT "Nul op de diagonaal" : END 2250 IF I>NN-NB1 THEN KK=NN-I 2260 FOR K=1 TO KK 2270 PIVOT=S(I,K+1)/DIAG : IF PIVOT=0 THEN GOTO 2300 2280 B(I+K)=B(I+K)-PIVOT*B(I) : JJ=KK-K+1 2290 FOR J=1 TO JJ : S(I+K,J)=S(I+K,J)-PIVOT*S(I,K+J) : NEXT J 2300 NEXT K : NEXT I 2310 PRINT "Terugsubstitutie ..." 2320 KK=NB1-1 : FOR N=2 TO NN : I=NN-N+2 : PRINT I; 2330 B(I)=B(I)/S(I,1) : IF I<NB1 THEN KK=I-1 2340 FOR K=1 TO KK : B(I-K)=B(I-K)-B(I)*S(I-K,K+1) : NEXT K 2350 NEXT N : B(1)=B(1)/S(1,1) : RETURN 2360 REM
10 REM Probleem van Labrujere 20 REM ====================== 50 REM Plot mesh & snelheden 60 REM --------------------- 100 REM Algemeen ... 110 OPEN "R",#1,"HDBGENER.BIN",20 120 FIELD #1, 4 AS F1$, 4 AS F2$, 4 AS F3$, 4 AS F4$, 4 AS F5$ 130 GET #1,1 : LIMC=CVI(F1$) : LIMT=CVI(F2$) : LIMV=CVI(F3$) 140 CLOSE #1 150 DIM X(LIMC),Y(LIMC) 160 REM Coordinaten ... 170 OPEN "R",#1,"HDBCOORD.BIN",8 180 FIELD #1, 4 AS F1$, 4 AS F2$ 190 FOR I=1 TO LIMC : GET #1,I 200 X(I)=CVS(F1$) : Y(I)=CVS(F2$) 210 REM PRINT X(I),Y(I) 220 NEXT I : CLOSE #1 230 REM 240 REM Plot mesh ... 250 SCREEN 2 : DIM NR(4) 260 OPEN "R",#1,"HDBTOPOL.BIN",16 270 FIELD #1, 4 AS F1$, 4 AS F2$, 4 AS F3$, 4 AS F4$ 280 FOR I=1 TO LIMT : GET #1,I 290 NR(1)=CVI(F1$) : NR(2)=CVI(F2$) 295 NR(3)=CVI(F3$) : NR(4)=CVI(F4$) 300 FOR M=1 TO 4 : L=(M MOD 4)+1 310 X1=40*X(NR(M)) : Y1=190-20*Y(NR(M)) 320 X2=40*X(NR(L)) : Y2=190-20*Y(NR(L)) 330 LINE (X1,Y1)-(X2,Y2) 340 NEXT M : NEXT I : CLOSE #1 350 REM 360 REM Vectorplot snelheden ... 370 OPEN "R",#1,"HDBUNKNO.BIN",8 380 OPEN "R",#2,"HDBVELOC.BIN",8 390 FIELD #1, 4 AS F1$, 4 AS F2$ 400 FIELD #2, 4 AS FU$, 4 AS FV$ 410 FOR I=1 TO LIMV : GET #1,I : GET #2,I 420 N1=CVI(F1$) : N2=CVI(F2$) : UU=CVS(FU$) : VV=CVS(FV$) 430 X1=40*.5*(X(N1)+X(N2)) : Y1=190-20*.5*(Y(N1)+Y(N2)) 440 X2=X1+40*UU : Y2=Y1-20*VV : LINE (X1,Y1)-(X2,Y2) 450 NEXT I : CLOSE #1 : CLOSE #2 460 END
10 REM Probleem van Labrujere 20 REM ====================== 50 REM Snelheidsprofiel cylinder 60 REM ------------------------- 80 REM Algemeen: 90 OPEN "R",#1,"HDBGENER.BIN",20 100 FIELD #1, 4 AS F1$, 4 AS F2$, 4 AS F3$, 4 AS F4$, 4 AS F5$ 110 GET #1,1 : NPH=CVI(F5$) 120 CLOSE #1 130 DIM X(NPH+1),Y(NPH+1) 140 REM Coordinaten: 150 OPEN "R",#1,"HDBCOORD.BIN",8 160 FIELD #1, 4 AS F1$, 4 AS F2$ 170 FOR I=1 TO NPH+1 : GET #1,I 180 X(I)=CVS(F1$) : Y(I)=CVS(F2$) 190 NEXT I : CLOSE #1 200 REM 210 XO=10 : YO=150 : SX=200 : SY=50 : SCREEN 2 220 LINE (XO,YO-SY)-(XO+SX,YO-SY) : LINE (XO,YO)-(XO,YO-4*SY) 230 REM 240 REM Plot snelheden: 250 OPEN "R",#1,"HDBVELOC.BIN",8 260 FIELD #1, 4 AS F1$, 4 AS F2$ 270 FOR I=1 TO NPH : GET #1,I 280 U(I)=CVS(F1$) : V(I)=CVS(F2$) 290 NEXT I : CLOSE #1 300 REM 310 XN=XO+SX*X(1) : YN=YO-SY 320 REM Horizontale component: 330 FOR I=1 TO NPH-1 340 XM=XN : XN=XO+SX*.5*(X(I)+X(I+1)) 350 YM=YN : YN=YO-SY*(1+U(I)) 360 LINE(XM,YM)-(XN,YN) : NEXT I 370 LINE(XN,YN)-(XO+SX*X(NPH),YO-SY*(1+2)) 380 XN=XO+SX*X(1) : YN=YO-SY 390 REM Verticale component: 400 XN=XO+SX*X(1) : YN=YO-SY 410 FOR I=1 TO NPH-1 420 XM=XN : XN=XO+SX*.5*(X(I)+X(I+1)) 430 YM=YN : YN=YO-SY*(1+V(I)) 440 LINE(XM,YM)-(XN,YN) : NEXT I 450 LINE(XN,YN)-(XO+SX*X(NPH),YO-SY) 460 REM 470 REM Analytische oplossingen: 480 LIMIT=25 490 XN=0 : YN=YO-SY 500 FOR I=1 TO LIMIT 510 PHI=2*ATN(1)/(LIMIT-1)*(I-1) 520 UU=1-COS(2*PHI) 530 XM=XN : XN=XO+COS(PHI)*SX 540 YM=YN : YN=YO-SY*(1+UU) 550 LINE(XM,YM)-(XN,YN) : NEXT I 560 XN=0 : YN=YO-SY 570 FOR I=1 TO LIMIT 580 PHI=2*ATN(1)/(LIMIT-1)*(I-1) 590 VV=-SIN(2*PHI) 600 XM=XN : XN=XO+COS(PHI)*SX 610 YM=YN : YN=YO-SY*(1+VV) 620 LINE(XM,YM)-(XN,YN) : NEXT I 630 END
10 REM Probleem van Labrujere 20 REM ====================== 50 REM Stroomfunktie berekenen 60 REM ----------------------- 90 OPEN "R",#1,"HDBGENER.BIN",20 : REM Algemeen 100 FIELD #1, 4 AS F1$, 4 AS F2$, 4 AS F3$, 4 AS F4$, 4 AS F5$ 110 GET #1,1 : CLOSE #1 120 LIMC=CVI(F1$) : LIMV=CVI(F3$) : NPH=CVI(F5$) 130 NN=LIMC : NB1=NPH+1 140 REM 150 DIM X(LIMC),Y(LIMC),S(NN,NB1),B(NN) 160 REM 170 REM Coordinaten ... 180 OPEN "R",#1,"HDBCOORD.BIN",8 190 FIELD #1, 4 AS F1$, 4 AS F2$ 200 FOR I=1 TO LIMC : GET #1,I 210 X(I)=CVS(F1$) : Y(I)=CVS(F2$) 220 NEXT I : CLOSE #1 230 REM 240 PRINT "Assemblage procedure voor";LIMV;"elementen ..." 250 REM 260 DIM NR(2),E(2,2),R(2) 270 FOR I=1 TO NN : FOR J=1 TO NB1 : S(I,J)=0 275 NEXT J : B(I)=0 : NEXT I 280 REM 290 OPEN "R",#1,"HDBUNKNO.BIN",8 295 FIELD #1, 4 AS F1$, 4 AS F2$ 300 OPEN "R",#2,"HDBVELOC.BIN",8 305 FIELD #2, 4 AS FU$, 4 AS FV$ 310 FOR F=1 TO LIMV : GET #1,F : GET #2,F : PRINT F; 320 NR(1)=CVI(F1$) : NR(2)=CVI(F2$) 325 U=CVS(FU$) : V=CVS(FV$) 330 REM 340 GOSUB 600 : REM Element matrix ... 350 REM 360 FOR I=1 TO 2 : IG=NR(I) 370 FOR J=I TO 2 : JG=NR(J) 380 II=IG : IF JG<IG THEN II=JG 390 JJ=ABS(IG-JG)+1 400 S(II,JJ)=S(II,JJ)+E(I,J) 410 NEXT J 420 B(IG)=B(IG)+R(I) 430 NEXT I 440 NEXT F : CLOSE #1 : PRINT 450 REM 460 REM Randvoorwaarde ... 470 S(NPH,1)=S(NPH,1)+10 480 REM 490 GOSUB 740 : REM Los vergelijkingen op ... 500 REM 510 OPEN "R",#1,"HDBPSI.BIN",4 : FIELD #1, 4 AS F1$ 520 FOR K=1 TO LIMC 530 LSET F1$=MKS$(B(K)) : REM LPRINT B(K) 540 PUT #1,K : NEXT K : CLOSE #1 550 END 560 REM ------------------------ 570 REM Eindige Elementen Matrix 580 REM ------------------------ 590 REM Matrix schoonmaken: 600 FOR I=1 TO 2 : R(I)=0 : FOR J=1 TO 2 : E(I,J)=0 605 NEXT J : NEXT I 610 REM Differentie-schema: 620 X21=X(NR(2))-X(NR(1)) : Y21=Y(NR(2))-Y(NR(1)) 630 A(1)=-1 : A(2)=+1 : W=Y21*U-X21*V 650 REM Kleinste kwadraten element: 660 FOR I=1 TO 2 : FOR J=I TO 2 670 E(I,J)=E(I,J)+A(I)*A(J) 680 NEXT J : R(I)=R(I)+A(I)*W : NEXT I 690 RETURN 700 REM -------------------------------------------- 710 REM Oplossen van stelsel lineaire vergelijkingen 720 REM Positief definiet symmetrische band matrices 730 REM -------------------------------------------- 740 IF NN<2 THEN PRINT "GAUSS: NN=";NN : END 750 IF NB1<2 THEN PRINT "GAUSS: NB1=";NB1 : END 760 REM 770 PRINT "Vegen voor";NN;"vergelijkingen ..." 780 II=NN-1 : KK=NB1-1 790 FOR I=1 TO II : DIAG=S(I,1) : PRINT I; 800 IF DIAG=0 THEN PRINT "Nul op diagonaal" : END 810 IF I>NN-NB1 THEN KK=NN-I 820 FOR K=1 TO KK 830 PIVOT=S(I,K+1)/DIAG : IF PIVOT=0 THEN GOTO 860 840 B(I+K)=B(I+K)-PIVOT*B(I) : JJ=KK-K+1 850 FOR J=1 TO JJ : S(I+K,J)=S(I+K,J)-PIVOT*S(I,K+J) : NEXT J 860 NEXT K : NEXT I : PRINT 870 PRINT "Terugsubstitutie ..." 880 KK=NB1-1 : FOR N=2 TO NN : I=NN-N+2 : PRINT I; 890 B(I)=B(I)/S(I,1) : IF I<NB1 THEN KK=I-1 900 FOR K=1 TO KK : B(I-K)=B(I-K)-B(I)*S(I-K,K+1) : NEXT K 910 NEXT N : B(1)=B(1)/S(1,1) : PRINT : RETURN 920 REM
10 REM Probleem van Labrujere 20 REM ====================== 30 REM Contour plot van de stroom-funktie (stroomlijnen) 40 REM ------------------------------------------------- 45 PRINT "Gegevens inlezen ..." 50 OPEN "R",#1,"HDBGENER.BIN",20 60 FIELD #1, 4 AS F1$, 4 AS F2$, 4 AS F3$, 4 AS F4$, 4 AS F5$ 70 GET #1,1 : CLOSE #1 : LIMC=CVI(F1$) : LIMT=CVI(F2$) 90 DIM X(LIMC),Y(LIMC),B(LIMC) 110 REM 190 REM Coordinaten ... 200 OPEN "R",#1,"HDBCOORD.BIN",8 205 FIELD #1, 4 AS F1$, 4 AS F2$ 210 FOR I=1 TO LIMC 220 GET #1,I : X(I)=CVS(F1$) : Y(I)=CVS(F2$) 230 NEXT I : CLOSE #1 240 REM 250 REM Oplossing ... 260 OPEN "R",#1,"HDBPSI.BIN",4 : FIELD #1, 4 AS F1$ 270 FOR I=1 TO LIMC : GET #1,I : B(I)=CVS(F1$) : NEXT I 280 CLOSE #1 290 BOT=B(1) : TOP=B(1) : FOR I=2 TO LIMC 300 IF TOP<B(I) THEN TOP=B(I) 310 IF BOT>B(I) THEN BOT=B(I) 320 NEXT I 325 PRINT "Voorbereiding ..." 330 DIM ND(3,4) 332 DATA 1,2,3 , 1,2,4 , 4,3,1 , 4,3,2 334 FOR J=1 TO 4 : FOR I=1 TO 3 : READ ND(I,J) 335 NEXT I : NEXT J 336 DIM NR(4),XQ(4),YQ(4),ZQ(4),XD(3),YD(3),ZD(3),FD(3) 340 DIM NP(3,6),MUST(27),MOVE(27),R(6),NUM(3),NO(3) 350 GOSUB 1000 355 REM Doorloop mesh ... 360 SCREEN 2 : MOST=32 : N=MOST : GOSUB 920 370 OPEN "R",#1,"HDBTOPOL.BIN",16 380 FIELD #1, 4 AS F1$, 4 AS F2$, 4 AS F3$, 4 AS F4$ 390 FOR F=1 TO LIMT : GET #1,F 400 NR(1)=CVI(F1$) : NR(2)=CVI(F2$) 405 NR(3)=CVI(F3$) : NR(4)=CVI(F4$) 410 FOR K=1 TO 4 : L=NR(K) 420 XQ(K)=X(L) : YQ(K)=Y(L) : ZQ(K)=(B(L)-BOT)/(TOP-BOT) 430 NEXT K 435 REM Vierhoeken: 440 QMIN=1 : QMAX=0 450 FOR K=1 TO 4 : REM Extrema: 460 IF ZQ(K)<QMIN THEN QMIN=ZQ(K) 470 IF ZQ(K)>QMAX THEN QMAX=ZQ(K) 480 NEXT K : REM Niets overbodigs: 490 Q=QMIN : GOSUB 800 : NQ1=N1 500 Q=QMAX : GOSUB 800 : NQ2=N2 505 REM 510 REM Doorloop driehoeken: 520 FOR D=1 TO 4 : FOR N=1 TO 3 530 K=ND(N,D) : XD(N)=XQ(K) : YD(N)=YQ(K) : ZD(N)=ZQ(K) 540 NEXT N 550 REM Doorloop niveaus: 560 FOR N=NQ1 TO NQ2 : ZERO=N/MOST 570 REM Elementaire contouren: 580 GOSUB 2000 : NEXT N : NEXT D 590 NEXT F : CLOSE #1 : END 790 REM 800 REM Bepaal onder & boven-grenzen 810 REM ---------------------------- 830 N1=0 : N2=MOST : M=MOST 840 FOR K=1 TO LOG2+1 850 M=M\2 : N1=N1+M : N2=N2-M 860 IF Q<=N1/MOST THEN N1=N1-M 870 IF Q>=N2/MOST THEN N2=N2+M 880 NEXT K : RETURN 890 REM 900 REM Bepaal 2-log van getal 910 REM ---------------------- 920 IF N<=0 THEN PRINT "LOG2: fout argument" : END 930 FOR K=1 TO 64 940 N=N\2 : LOG2=K-1 : IF N=0 THEN RETURN 950 NEXT K : PRINT "LOG2: draait rondjes" : END 1000 REM 1010 REM Initialiseer NP(3,6),MUST(27),MOVE(27) 1015 REM -------------------------------------- 1020 REM Aantal elementen = 3 1030 REM Aantal eigenschappen = 3 1050 REM Maak alle permutaties van (0,1,2): 1060 FOR L=1 TO 6 : N=3 : GOSUB 1330 1070 FOR J=1 TO 3 : NP(J,L)=R(J) : NEXT J 1075 NEXT L 1080 REM Equivalentie-klassen: 1090 N=0 : FOR L=1 TO 27 : IF MUST(L)<>0 THEN 1220 1100 N=N+1 : REM Decimalen (in 3-tallig stelsel): 1110 M=L-1 : FOR K=1 TO 3 1115 NUM(3-K+1)=M MOD 3 : M=M\3 : NEXT K 1120 FOR KEER=1 TO 2 1125 FOR I=1 TO 6 : REM Inverse permutatie: 1130 FOR J=1 TO 3 : NO(NP(J,I))=J : NEXT J 1140 M=0 : FOR J=1 TO 3 : M=M*3+NUM(NO(J)) 1145 NEXT J : M=M+1 1150 REM Toekennen van equivalente elementen: 1160 IF MUST(M)=0 THEN MUST(M)=N : REM Klasse 1170 IF MOVE(M)=0 THEN MOVE(M)=I : REM Permutatie 1180 NEXT I : REM Alle cijfer-permutaties behandeld. 1200 FOR K=1 TO 3 : NUM(K)=(3-NUM(K)) MOD 3 : NEXT K 1205 M=0 : FOR J=1 TO 3 : M=M*3+NUM(NO(J)) 1207 NEXT J : M=M+1 : IF MUST(M)<>0 THEN 1220 1210 NEXT KEER : REM < en > de tweede KEER verwisseld 1220 NEXT L : RETURN 1260 REM 1270 REM Permutaties van array R(N) 1280 REM -------------------------- 1290 REM L = volgnummer permutatie (invoer) 1300 REM N = aantal elementen van: (invoer) 1310 REM R = rij die de permutatie bevat (uitvoer) 1320 REM 1330 H=1 : FOR K=1 TO N : R(K)=K : H=H*K : NEXT K 1340 REM Welk item: 1350 FOR K=1 TO N : P=N-K+1 : H=H\P 1360 Q=(((L-1)\H) MOD P)+1 : IF Q=1 THEN 1400 1370 REM Roteer data: 1380 S=R(K+Q-1) : FOR M=K+Q-1 TO K+1 STEP -1 1390 R(M)=R(M-1) : NEXT M : R(K)=S 1400 NEXT K : RETURN 2000 REM 2010 REM Contourlijnen in een driehoek 2020 REM ----------------------------- 2030 REM Invoer : XD(3),YD(3),ZD(3),ZERO 2050 FOR K=1 TO 3 : FD(K)=ZD(K)-ZERO : NEXT K 2060 REM 2065 REM Coderen van elk geval: 2070 MORE=0 : FOR K=1 TO 3 2080 IF FD(K)=0 THEN MORE=MORE*3 2090 IF FD(K)<0 THEN MORE=MORE*3+1 2100 IF FD(K)>0 THEN MORE=MORE*3+2 2110 NEXT K : LABEL=MUST(MORE+1) 2115 IF LABEL=1 OR LABEL=3 OR LABEL=5 THEN RETURN 2120 REM 2130 REM Permutatie van (1,2,3): 2140 KEUS=MOVE(MORE+1) 2145 NP1=NP(1,KEUS) : NP2=NP(2,KEUS) : NP3=NP(3,KEUS) 2150 X1=XD(NP1) : X2=XD(NP2) : X3=XD(NP3) 2160 Y1=YD(NP1) : Y2=YD(NP2) : Y3=YD(NP3) 2170 F1=FD(NP1) : F2=FD(NP2) : F3=FD(NP3) 2180 REM 2195 REM Aktie: 1 2 3 4 5 6 2200 ON LABEL GOTO 2210,2230,2210,2270,2210,2330 2210 REM Niets doen: === , =<< , <<< 2220 RETURN 2230 REM Lijn door EEN zijde: ==< 2240 LINE (50*X1,190-20*Y1)-(50*X2,190-20*Y2) 2260 RETURN 2270 REM Lijn door EEN hoekpunt: =<> 2275 ONDER=1/(F2-F3) 2280 XC=(F2*X3-F3*X2)*ONDER 2290 YC=(F2*Y3-F3*Y2)*ONDER 2300 LINE (50*X1,190-20*Y1)-(50*XC,190-20*YC) 2320 RETURN 2330 REM Lijn door twee zijden: <<> 2335 ONDER=1/(F1-F3) 2340 XB=(F1*X3-F3*X1)*ONDER 2350 YB=(F1*Y3-F3*Y1)*ONDER 2355 ONDER=1/(F2-F3) 2360 XC=(F2*X3-F3*X2)*ONDER 2370 YC=(F2*Y3-F3*Y2)*ONDER 2380 LINE (50*XB,190-20*YB)-(50*XC,190-20*YC) 2400 RETURN