| |
|
|
p.specht
| Como en uno hier kubischen Función a esperar, liefern verschiedene Startwerte drei verschiedene real Lösungs-Näherungen en el gefordertern Toleranzbereich. Ejemplo: Newton-Raphson benötigt 44 Iterationen, Steffensen wegen verbessertem Näherungsalgorithmus sólo sieben! Achtung: Goto-Spagetticode Old Style!
Título de la ventana "STEFFENSEN-ALGORITHMUS"
' berechnet implizit el "Biegung" el Funktionskurve, nähert se exponentiell.
' NUR FÜR DEMONSTRATIONSZWECKE! Keine Gewähr! No warranties whatsoever!
' Original: 1987 John H Mathews, Californa State Univ.
Ventana de Estilo 24:Font 2
Selección aleatoria:CLS Rnd(8^8)
Conjunto("Decimals",15)
Declarar DELTA!,EPSILON!,max&,ANS$,P0!,SMALL!,POLD!
Declarar K&,COND&,P1!,P2!,p3!,P4!,DF0!,D1!,D2!,DP!,DF1!,Y3!,RELERR!
'*** HIER DIE FUNKTION SOWIE IHRE ABLEITUNG EINPROGRAMMIEREN:
' FNF (X!) = X!*X!*X! - 3*X! + 2
Def FNF(1) @!(1)*@!(1)*@!(1) - 3 * @!(1) + 2
' FNF1(X!) = 3*X!*X! - 3
Def FNF1(1) 3*@!(1)*@!(1) - 3
'***********************************************************
Goto "G52"'skip imprimir subroutine
S30:
' DIE FUNKTION IN KLARTEXT AUSGEBEN:
REM SUBROUTINE PRINT FUNCTION
PRINT " F(X) = X^3 - 3*X + 2 = 0 "
Volver
'***********************************************************
G52:
Goto "G100"
G100:
REM PROGRAM STEFFENS
DELTA! =Val("1E-16")'Relative Fehlergrenze des Parámetros
EPSILON!=Val("1E-16")'Ansolute Funktionswert-Toleranz
MAX&=99'Maximale Anzahl a Iterationen
G140:
Gosub "S300": REM SUBROUTINE INPUTS
GOSUB "S400": REM SUBROUTINE STEFFENSEN
GOSUB "S1000":REM SUBROUTINE RESULTS
PRINT
Imprimir
PRINT " ANDEREN STARTWERT PROBIEREN <j/n>? ";
Entrada ANS$
Casenote (ANS$="N") Or (ANS$="n"):GOTO "G140"
GOTO "G5000"
S300:
REM SUBROUTINE INPUTS
CLS Rnd(8^8)
PRINT
PRINT " STEFFENSEN'S BESCHLEUNIGUNG DES NEWTON-RAPHSON-ALGORITHMUS "
PRINT " ZUR NULLSTELLENSUCHE IN EINER (NICHTLINEAREN) FUNKTION "
PRINT
Gosub "S30"' ZU SUBROUTINE PRINT FUNCTION
PRINT
PRINT " Lo se una anfänglicher Startwert P0 benötigt:"
PRINT " Gewünschter Startwert P0 = ";
Entrada P0!
PRINT
RETORNO
S400:
REM SUBROUTINE STEFFENSEN
SMALL!=Val("1E-20")
POLD!=P0!
K&=0
COND&=0
P3!=P0!
P2!=P0!+1
P1!=P0!+2
WHILE (K& < MAX&) And (COND& = 0)
P0!=P3!
DF0!=FNF1(P0!)
If DF0!<>0:Goto "G520"
Más:Goto "G540"
EndIf
G520:
P1!=P0! - FNF(P0!)/DF0!' Newton-Raphson-Schritt
Goto "G590"
G540:
REM ELSE
COND&=1
DP!=P3!-P2!
P3!=P0!
Goto "G860"
G590:
REM ENDIF
DF1!=FNF1(P1!)
If DF1! <>0:Goto "G620"
Más:Goto "G640"
EndIf
G620:
P2!=P1! - FNF(P1!)/DF1!
Goto "G690"
G640:
REM ELSE
COND&=1
DP!=P1!-P0!
P3!=P1!
Goto "G860"
G690:
REM ENDIF
D1!=(P1!-P0!)*(P1!-P0!)
D2!=P2!-2*P1!+P0!
IF D2!=0:Goto "G730"
Más:Goto "G770"
EndIf
G730:
COND&=1
DP!=P2!-P1!
P3!=P2!
GOTO "G800"
G770:
REM ELSE
P3!=P0!-D1!/D2!
DP!=P3!-P2!
G800:
REM ENDIF
Y3!=FNF(P3!)
RELERR!=Abs(DP!)/(Abs(P3!)+SMALL!)
Case RELERR! < DELTA!: COND&=2
Case Abs(Y3!) < EPSILON! : COND&=3
Case (RELERR! < DELTA!) And (Abs(Y3!) < EPSILON!) : COND&=4
G860:
REM WEITER
K&=K&+1
ENDWHILE
P0!=POLD!
RETORNO
S1000:
REM SUBROUTINE RESULTS
CLS Rnd(8^8)
PRINT
PRINT " STEFFENSEN'S BESCHLEUNIGUNG DES NEWTON-RAPHSON-ALGORITHMUS "
PRINT " ZUR NULLSTELLENSUCHE IN EINER (NICHTLINEAREN) FUNKTION "
PRINT
Gosub "S30"'PRINT-SUBROUTINE
PRINT
PRINT " Der Startwert war P0 =",P0!
PRINT
PRINT " Nach "+Trim$(Str$(K&))+" Iterationen Quasi-Nullwert gefunden en:"
Imprimir : Imprimir
Imprimir " P =",P3!
Imprimir : Imprimir
PRINT " DP =",ABS(DP!)," es seine relative Genauigkeit."
PRINT
Imprimir " F(";Trim$(Str$(P3!));") =",FNF(P3!)
PRINT
Case FNF(P3!)=0 : PRINT " Berechnete Función ergab GENAU NULL! "
If COND&=0:Goto "G1200"
Más:Goto "G1240"
EndIf
PRINT " El Konvergenz des Verfahrens es zweifelhaft. Begründung:"
PRINT
G1220:
PRINT " Maximale Iterationszahl überschritten!"
Goto "G1400"
G1240:
REM ELSEIF
If COND&=1:Goto "G1260"
Más:Goto "G1280"
EndIf
G1260:
PRINT " Verfahrenskonvergenz zweifelhaft, como Division por Null."
Goto "G1400"
G1280:
REM ELSEIF
IF COND&=2:Goto "G1300"
Más:Goto "G1320"
EndIf
G1300:
PRINT " Solución innerhalb el programmierten Toleranzen."
Goto "G1400"
G1320:
REM ELSEIF
If COND&=3:Goto "G1340"
Más:Goto "G1360"
EndIf
G1340:
PRINT " Funktionswert F(P) innerhalb el Toleranzgrenzen."
Goto "G1400"
G1360:
REM ELSEIF
If COND&=4:Goto "G1380"
Más: Goto "G1400"
EndIf
G1380:
PRINT " Der Parámetro-Valor P y Funktionswert F(P) "
PRINT " mentira beide en el programmierten Toleranzen. "
G1400:
REM ENDIF
Volver
G5000:
FIN
|
|
|
| Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 02.05.2021 ▲ |
|
|
|