Fachhochschule Gießen-Friedberg

BASIC-Programme für Taschenrechner zu einigen Verfahren der numerischen Mathematik


Inhaltsübersicht

  • Bisektions-Verfahren
  • Newton-Verfahren
  • Simpson-Verfahren
  • Bode-Verfahren
  • Gauss-Jordan-Verfahren
  • Gauss-Seidel-Verfahren
  • Euler-Cauchy-Verfahren
  • Heun-Verfahren
  • Runge-Kutta-Verfahren
  • Runge-Kutta-Verfahren für Systeme
  • Differenzenverfahren
  • Schießverfahren
  • Berechnung von Ausgleichspolynomen
  • Berechnung von kubischen Splines
  • 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!


    Bisektions-Verfahren

    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
    

    [Zurück zur Inhaltsübersicht]


    Newton-Verfahren

    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
    

    [Zurück zur Inhaltsübersicht]


    Simpson-Verfahren

    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
    

    [Zurück zur Inhaltsübersicht]


    Bode-Verfahren

    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
    

    [Zurück zur Inhaltsübersicht]


    Gauss-Jordan-Verfahren

    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
    

    [Zurück zur Inhaltsübersicht]


    Gauss-Seidel-Verfahren

    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
    

    [Zurück zur Inhaltsübersicht]


    Euler-Cauchy-Verfahren

    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
    

    [Zurück zur Inhaltsübersicht]


    Heun-Verfahren

    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
    

    [Zurück zur Inhaltsübersicht]


    Runge-Kutta-Verfahren

    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
    

    [Zurück zur Inhaltsübersicht]


    Runge-Kutta-Verfahren für Systeme

    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
    

    [Zurück zur Inhaltsübersicht]


    Differenzenverfahren

    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
    

    [Zurück zur Inhaltsübersicht]


    Schießverfahren

    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
    

    [Zurück zur Inhaltsübersicht]


    Berechnung von Ausgleichspolynomen

    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
    

    [Zurück zur Inhaltsübersicht]


    Berechnung von kubischen Splines

    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
    

    [Zurück zur Inhaltsübersicht]



    H.-R. Metz, home page
    Seite zuletzt aktualisiert am 19.5.1998
    © Copyright 1998, H.-R. Metz