Die Programme wurden auf dem SHARP PC-1403H getestet.
Die Programme zum Newton-, Simpson-, Gauss-Jordan- und Runge-Kutta-Verfahren
sowie Teile des Programms zu den kubischen Splines wurden mir von Kollegen zur
Verfügung gestellt. Besten Dank!
10:REM ***Bisektion*** 20:INPUT "A=";A,"B=";B 30:X=A 40:GOSUB 300 50:YA=Y 60:X=B 70:GOSUB 300 80:IF YA*Y<0 THEN GOTO 110 90:PRINT "F(A)*F(B) >= 0" 100:END 110:X=(A+B)/2 120:GOSUB 300 130:IF YA*Y<0 THEN GOTO 160 140:A=X 150:GOTO 170 160:B=X 170:IF ABS(B-A)>1E-8 THEN GOTO 110 180:PRINT "X=",X 190:PRINT "Y=",Y 200:END 300:Y= ... (Funktionsgleichung) 310:RETURN
10:REM ***Newton-Verfahren*** 20:INPUT "X0=";X 30:GOSUB 200 40:DX=0.1 50:X0=X:Y0=Y:DX=DX/2:X=X+DX 60:GOSUB 200 70:YS=(Y-Y0)/DX 80:X=X0-Y0/YS 90:GOSUB 200 100:PRINT "X=";X 110:PRINT "Y=",Y 120:INPUT "WEITER (J/N)";J$ 130:IF J$="J" THEN GOTO 50 140:END 200:Y= ... (Funktion eingeben.) 210:RETURN
10:REM ***SIMPSON-VERFAHREN*** 20:INPUT "A=";A 30:INPUT "B=";B 40:INPUT "N=";N 50:H=0.5*(B-A)/N:S=0 60:X=A:GOSUB 200:Y=F 70:FOR I=1 TO N 80:X=X+H:GOSUB 200 90:S=S+Y+4*F 100:X=X+H:GOSUB 200:Y=F 110:S=S+Y 120:NEXT I 130:S=S*H/3 140:PRINT S 150:END 200:F= ... (Funktion eingeben) 210:RETURN
10:REM ***BODE-VERFAHREN*** 20:INPUT "A=";A 30:INPUT "B=";B 40:INPUT "N=";N 50:H=0.25*(B-A)/N:S=0 60:X=A:GOSUB 200:Y=F 70:FOR I=1 TO N 80:X=X+H:GOSUB 200 90:S=S+7*Y+32*F 100:X=X+H:GOSUB 200 110:S=S+12*F 120:X=X+H:GOSUB 200 130:S=S+32*F 140:X=X+H:GOSUB 200:Y=F 150:S=S+7*Y 160:NEXT I 170:S=S*2*H/45 180:PRINT S 190:END 200:F= ... (Funktion eingeben) 210:RETURN
10:REM ***GAUSS-JORDAN-VERFAHREN*** 20:INPUT "N=";N 30:DIM M(N,N+1) 40:FOR I=1 TO N 50:PRINT "ZEILE";I;"ENTER" Eingabe der erweiterten 60:FOR J=1 TO N+1 Matrix 70:INPUT M(I,J) 80:NEXT J 90:NEXT I 100:FOR K=1 TO N 110:FOR I=K TO N 120:IF M(I,K)<>0 THEN 160 Suche nach Hauptdiagonal- 130:NEXT I elementen M(K,K) <> 0, 140:PRINT "MATRIX SINGULAER" ("Pivot") 150:GOTO 360 160:FOR J=K TO N+1 170:C=M(K,J) 180:M(K,J)=M(I,J) Zeilentausch 190:M(I,J)=C 200:NEXT J 210:C=1/M(K,K) 220:FOR J=K TO N+1 230:M(K,J)=C*M(K,J) 1 0 0 0 x1 R1 240:NEXT J 250:FOR I=1 TO N 0 1 0 0 x2 R2 260:IF I=K THEN 310 . = 270:C=-M(I,K) 0 0 1 0 x3 R3 280:FOR J=K TO N+1 290:M(I,J)=M(I,J)+C*M(K,J) 0 0 0 1 x4 R4 300:NEXT J 310:NEXT I 320:NEXT K 330:FOR I=1 TO N 340:PRINT "X(";I;")=";M(I,N+1) Ausgabe 350:NEXT I 360:END
10:REM ***GAUSS-SEIDEL MIT RELAXATION*** 20:INPUT "N=";N Anzahl Unbekannte. 30:DIM M(N,N+1),X(N),S(N) Erweiterte Matrix, Iterationsvektoren. 40:PRINT "ERWEITERTE MATRIX" Koeffizientenmatrix 50:FOR I=1 TO N und "rechte Seite" 60:PRINT "ZEILE: ";I eingeben. 70:FOR J=1 TO N+1 80:INPUT M(I,J) 90:NEXT J 100:NEXT I 110:PRINT "STARTVEKTOR" Naeherungsloesung 120:FOR I=1 TO N eingeben. 130:INPUT X(I) 140:NEXT I 150:PRINT "RELAXATIONS-PARAMETER" 160:INPUT "R=";R 170:PRINT "FEHLERSCHRANKE" 180:INPUT "F=";F 190:FOR I=1 TO N Division jeder 200:IF M(I,I)<>0 THEN 230 Gleichung durch den 210:PRINT "DIAGONALKOEFF. NULL" Koeffizienten aus 220:GOTO 490 der Matrixdiagonalen. 230:A=M(I,I) 240:FOR J=1 TO N+1 250:M(I,J)=M(I,J)/A (i-te Gl.) : a(i,i) 260:NEXT J 270:NEXT I 280:FOR I=1 TO 20 Bis max. Iter.anzahl. 290:FOR J=1 TO N Von Zeile 1 bis n. 300:S(J)=X(J) Alten Wert sichern. 310:X(J)=M(J,N+1) Einzelschritt-Iter. 320:FOR K=1 TO N nach Gauss-Seidel. 330:IF K=J THEN 350 (Koeffizient von X(J) 340:X(J)=X(J)-M(J,K)*X(K) wurde zu 1 gemacht; 350:NEXT K also keine Division.) 360:NEXT J 370:FOR J=1 TO N 380:X(J)=R*X(J)+(1-R)*S(J) Relaxation. 390:NEXT J 400:FOR J=1 TO N 410:IF ABS(X(J)-S(J))>F THEN 470 Fehler zu gross? 420:NEXT J 430:FOR K=1 TO N Nein: Ausgabe der Lsg. 440:PRINT "X(";K;")=";X(K) 450:NEXT K 460:END 470:NEXT I Ja: Weiter Iterieren. 480:PRINT "KEINE KONVERGENZ" Nach max. Iter.anzahl. 490:END
10:REM ***EULER-CAUCHY: DGL 1. ORDNUNG*** 20:INPUT "H=";H,"X0=";X,"Y0=";Y,"N=";N 30:FOR I=1 TO N 40:GOSUB 100 50:X=X+H:Y=Y+H*F 60:PRINT X,Y 70:NEXT I 80:END 100:F= ... (Funktion von X und Y) 110:RETURN
10:REM ***HEUN-VERFAHREN: DGL 1. ORDNUNG*** 20:INPUT "H=";H,"X0=";X,"Y0=";Y0,"N=";N 30:FOR I=1 TO N 40:Y=Y0 50:GOSUB 200 60:P=F 70:X=X+H:Y=Y0+H*P 80:GOSUB 200 90:Y0=Y0+H*(P+F)/2 100:PRINT X,Y0 110:NEXT I 120:END 200:F= ... (Funktion von X und Y) 210:RETURN
10:REM ***RUNGE-KUTTA: DGL 1. ORDNUNG*** 20:INPUT "H=";H,"X0=";X0,"Y0=";Y0,"N=";N 30:FOR I=1 TO N 40:X=X0:Y=Y0 50:GOSUB 500 60:K1=H*F 70:X=X0+H/2:Y=Y0+K1/2 80:GOSUB 500 90:K2=H*F 100:Y=Y0+K2/2 110:GOSUB 500 120:K3=H*F 130:X=X0+H:Y=Y0+K3 140:GOSUB 500 150:K4=H*F 160:K=(K1+2*K2+2*K3+K4)/6 170:X0=X0+H:Y0=Y0+K 180:PRINT X0,Y0 190:NEXT I 200:END 500:F= ... (Funktion von X und Y) 510:RETURN
10:REM ***RUNGE-KUTTA: SYSTEM VON DGLN 1. ORDNUNG*** 20:GOSUB 600 30:DIM Y0(A):DIM Y(A):DIM F(A) 40:DIM K1(A):DIM K2(A):DIM K3(A):DIM K4(A) 50:INPUT "X0=";X0 60:FOR J=1 TO A 70:INPUT "Y0()=";Y0(J) 80:NEXT J 90:INPUT "H=";H,"N=";N 100:FOR I=1 TO N 110:X=X0 120:FOR J=1 TO A 130:Y(J)=Y0(J) 140:NEXT J 150:GOSUB 500 160:FOR J=1 TO A 170:K1(J)=H*F(J) 180:Y(J)=Y0(J)+K1(J)/2 190:NEXT J 200:X=X0+H/2 210:GOSUB 500 220:FOR J=1 TO A 230:K2(J)=H*F(J) 240:Y(J)=Y0(J)+K2(J)/2 250:NEXT J 260:GOSUB 500 270:FOR J=1 TO A 280:K3(J)=H*F(J) 290:Y(J)=Y0(J)+K3(J) 300:NEXT J 310:X=X0+H 320:GOSUB 500 330:FOR J=1 TO A 340:K4(J)=H*F(J) 350:Y0(J)=Y0(J)+(K1(J)+2*K2(J)+2*K3(J)+K4(J))/6 360:NEXT J 370:X0=X0+H 380:PRINT X0 390:FOR J=1 TO A 400:PRINT J,Y0(J) 410:NEXT J 420:NEXT I 430:END 500:F(1)= ... 510:F(2)= ... 520:RETURN 600:A= ... 610:REM A = ANZAHL DER DGLN 620:RETURN
10:REM ***DIFFERENZENVERFAHREN, RWA 2.ORDNUNG*** 20:INPUT "XA=";XA,"YA=";YA 30:INPUT "XB=";XB,"YB=";YB 40:INPUT "N=";N 50:IF N<3 PRINT "N: GROESSER/GLEICH 3":GOTO 40 60:DIM M(N-1,4):DIM Y(N-1) 70:H=(XB-XA)/N 80:X=XA 90:REM GLEICHUNGSSYSTEM AUFSTELLEN 100:FOR I=1 TO N-1 110:X=X+H 120:GOSUB 500 130:M(I,1)=1-(H*P)/2 140:M(I,2)=H*H*Q-2 150:M(I,3)=2-M(I,1) 160:M(I,4)=H*H*R 170:NEXT I 180:X=XA+H 190:GOSUB 500 200:M(1,4)=M(1,4)-YA*(1-(H*P)/2) 210:X=XB-H 220:GOSUB 500 230:M(N-1,4)=M(N-1,4)-YB*(1+(H*P)/2) 240:REM TRIDIAGONALSYSTEM LOESEN 250:FOR I=1 TO N-2 260:IF M(I,2)=0 PRINT "GLEICH.SYSTEM SINGULAER":END 270:FOR J=4 TO 2 STEP -1 280:M(I,J)=M(I,J)/M(I,2) 290:NEXT J 300:M(I+1,2)=M(I+1,2)-M(I+1,1)*M(I,3) 310:M(I+1,4)=M(I+1,4)-M(I+1,1)*M(I,4) 320:NEXT I 330:IF M(N-1,2)=0 PRINT "GLEICH.SYSTEM SINGULAER":END 340:Y(N-1)=M(N-1,4)/M(N-1,2) 350:FOR I=N-2 TO 1 STEP -1 360:Y(I)=M(I,4)-M(I,3)*Y(I+1) 370:NEXT I 380:PRINT XA,YA 390:X=XA+H 400:FOR I=1 TO N-1 410:PRINT X,Y(I) 420:X=X+H 430:NEXT I 440:PRINT XB,YB 450:END 500:P=... 510:Q=... 520:R=... 530:RETURN
10:REM ***SCHIESSVERFAHREN, RWA 2.ORDNUNG*** 20:INPUT "XA=";XA,"YA=";YA 30:INPUT "S=";S 40:INPUT "XB=";XB,"YB=";YB 50:INPUT "N=";N 60:H=(XB-XA)/N 70:P=0 80:GOSUB 500 90:F=Y0(1)-YB 100:PRINT "YB-DIFF=",F 110:INPUT "NEUER WERT S (J/N)?";J$ 120:IF J$="N" THEN GOTO 160 130:INPUT "S=";S 140:GOSUB 530 150:GOTO 90 160:PRINT "NEWTON-VERFAHREN" 170:GOSUB 300 180:PRINT "AWA MIT RUNGE-KUTTA" 190:INPUT "H=";H,"N=";N 200:P=1 210:GOSUB 530 220:END 300:REM NEWTON-VERFAHREN 310:DS=0.1 320:S0=S:F0=F:DS=DS/2:S=S+DS 330:GOSUB 530 340:F=Y0(1)-YB 350:FS=(F-F0)/DS 360:S=S0-F0/FS 370:GOSUB 530 380:F=Y0(1)-YB 390:PRINT "YB-DIFF=",F 400:INPUT "WEITER NEWTON-V. (J/N)?";J$ 410:IF J$="J" THEN GOTO 320 420:RETURN 500:REM RUNGE-KUTTA-V. 510:DIM Y0(2):DIM Y(2):DIM F(2) 520:DIM K1(2):DIM K2(2):DIM K3(2):DIM K4(2) 530:X0=XA:Y0(1)=YA:Y0(2)=S 540:FOR I=1 TO N 550:X=X0 560:Y(1)=Y0(1):Y(2)=Y0(2) 570:GOSUB 900 580:K1(1)=H*F(1):K1(2)=H*F(2) 590:X=X0+H/2 600:Y(1)=Y0(1)+K1(1)/2 610:Y(2)=Y0(2)+K1(2)/2 620:GOSUB 900 630:K2(1)=H*F(1):K2(2)=H*F(2) 640:Y(1)=Y0(1)+K2(1)/2 650:Y(2)=Y0(2)+K2(2)/2 660:GOSUB 900 670:K3(1)=H*F(1):K3(2)=H*F(2) 680:X=X0+H 690:Y(1)=Y0(1)+K3(1) 700:Y(2)=Y0(2)+K3(2) 710:GOSUB 900 720:K4(1)=H*F(1):K4(2)=H*F(2) 730:X0=X0+H 740:Y0(1)=Y0(1)+(K1(1)+2*K2(1)+2*K3(1)+K4(1))/6 750:Y0(2)=Y0(2)+(K1(2)+2*K2(2)+2*K3(2)+K4(2))/6 760:IF P=0 THEN GOTO 790 770:PRINT "X=",X0 780:PRINT "Y=",Y0(1) 790:NEXT I 800:RETURN 900:F(1)=Y(2) 910:F(2)= ... (Funktion von X, Y(1), Y(2).) 920:RETURN
10:REM ***Ausgleichspolynom*** 20:INPUT "Anzahl Punkte = ";A 30:INPUT "Polynom-Grad = ";G 40:IF A<=G THEN GOTO 20 50:N=G+1 60:DIM M(N,N+1) Erweiterte Matrix 70:M(1,1)=A:M(1,N+1)=0 80:FOR I=2 TO N 90:M(1,I)=0 100:M(I,N)=0 110:M(I,N+1)=0 120:NEXT I 130:FOR I=1 TO A 140:INPUT "X=";XI,"Y=";Y Einlesen der (x,y)-Punkte 150:M(1,N+1)=M(1,N+1)+Y 160:X=XI 170:FOR J=2 TO N 180:M(1,J)=M(1,J)+X Erste Zeile der Matrix 190:M(J,N+1)=M(J,N+1)+X*Y Rechte Seite der Gleich. 200:X=X*XI 210:NEXT J 220:FOR J=2 TO N 230:M(J,N)=M(J,N)+X Letzte Spalte der Matrix 240:X=X*XI 250:NEXT J 260:NEXT I 270:FOR I=2 TO N 280:FOR J=1 TO N-1 290:M(I,J)=M(I-1,J+1) Aufbau der Restmatrix 300:NEXT J 310:NEXT I 400:FOR K=1 TO N 410:FOR I=K TO N 420:IF M(I,K)<>0 THEN 460 Suche nach Hauptdiagonal- 430:NEXT I elementen M(K,K) <> 0, 440:PRINT "MATRIX SINGULAER" ("Pivot") 450:GOTO 660 460:FOR J=K TO N+1 470:C=M(K,J) 480:M(K,J)=M(I,J) Zeilentausch 490:M(I,J)=C 500:NEXT J 510:C=1/M(K,K) 520:FOR J=K TO N+1 530:M(K,J)=C*M(K,J) 1 0 0 0 x1 R1 540:NEXT J 550:FOR I=1 TO N 0 1 0 0 x2 R2 560:IF I=K THEN 610 . = 570:C=-M(I,K) 0 0 1 0 x3 R3 580:FOR J=K TO N+1 590:M(I,J)=M(I,J)+C*M(K,J) 0 0 0 1 x4 R4 600:NEXT J 610:NEXT I 620:NEXT K 630:FOR I=1 TO N 640:PRINT "A(";I-1;")=";M(I,N+1) Ausgabe 650:NEXT I 660:END
10:REM ***Kubische Splines*** 20:INPUT "Anzahl Punkte = ";A 25:IF A<3 THEN GOTO 20 30:N=A-1 40:DIM X(N),A(N),B(N),C(N),D(N),H(N),G(N),R(N) 50:FOR I=0 TO N 60:INPUT "X=";X(I),"Y=";A(I) Einlesen der (x,y)-Punkte 70:NEXT I 80:FOR I=0 TO N-1 90:H(I)=X(I+1)-X(I) 100:NEXT I 110:FOR I=1 TO N-1 Gleichungssystem aufbauen 120:G(I)=2*(H(I-1)+H(I)) 130:R(I)=3*((A(I+1)-A(I))/H(I)-(A(I)-A(I-1))/H(I-1)) 140:NEXT I 150:FOR I=2 TO N-1 Gauss-Algorithmus 160:Q=H(I-1)/G(I-1) (in vereinfachter Form, 170:G(I)=G(I)-Q*H(I-1) da Gleichungssystem 180:R(I)=R(I)-Q*R(I-1) spezielle Eigenschaften 190:NEXT I besitzt) 200:C(N-1)=R(N-1)/G(N-1) 210:IF N=2 THEN GOTO 250 220:FOR I=N-2 TO 1 STEP -1 230:C(I)=(R(I)-H(I)*C(I+1))/G(I) 240:NEXT I 250:C(0)=0:C(N)=0 260:FOR I=0 TO N-1 270:B(I)=(A(I+1)-A(I))/H(I)-(2*C(I)+C(I+1))*H(I)/3 280:D(I)=(C(I+1)-C(I))/(3*H(I)) 290:NEXT I 300:INPUT "Koeff. ausgeben? (J/N)";K$ 310:IF K$="N" THEN GOTO 380 320:FOR I=0 TO N-1 330:PRINT "A(";I;")=";A(I) 340:PRINT "B(";I;")=";B(I) 350:PRINT "C(";I;")=";C(I) 360:PRINT "D(";I;")=";D(I) 370:NEXT I 380:INPUT "Zwischenwert? (J/N)";Z$ 390:IF Z$="N" THEN GOTO 490 400:INPUT "X=";X 410:FOR I=1 TO N 420:IF X(I)>X THEN GOTO 440 430:NEXT I 440:I=I-1 450:X=X-X(I) 460:Y=((D(I)*X+C(I))*X+B(I))*X+A(I) 470:PRINT "Y=";Y 480:GOTO 380 490:END