Italia
Fonte/ Codesnippets

Regula falsi - die 'Falsche Regel' zur Lösung nichtlinearer Funktionen

 

p.specht

Ein Algorithmus aus den Urschleimzeiten der Mathematik, als verschiedene Funktionen überhaupt erstmals - zumindest numerisch - gelöst werden konnten.
Damals versuchte man, sich durch händische Berechnung mittels Pergament und Federkiel an die Lösungen heranzutasten. Pech, wenn es gleich mehrere Lösungen gab - man erhielt, abhängig vom Startwert, immer nur eine davon. Daher auch der Name "Falsche Regel".
WindowTitle "Regula falsi: Nullstellensuche circa Sekanten-Abschnitte"
' Abt. "Historische Algorithmen"
' (D) Demoware Mai 2012 P. Specht; Ohne jedwede Gewähr!!!
' Gleichungslösung durch "Herantasten", Indikator: Fehlerkurvenanstieg
' Verwendet hier gerade die proc Formel_1
' Startwert ist verantwortlich, zu welcher einzelnen Lösung
' von ggf. mehreren Lösungen der Algorithmus jeweils tendiert
Font 2:Randomize:Cls rnd(8^8):set("decimals",18)
Declare a!,x!,i&
Var imax&=1000' Maximale Zahl Näherungsschritte
Begin:
print "\n Startwert per Lösungssuche (kritisch!): ";
input a!
x!=regulafalsi(a!)

if x!=val("4.9406564584124654E-323")

    print " Lösung nach ";imax&;" Schritten nicht gefunden!"

else

    print " Lösung:   x = ";x!
    print " gefunden nach ";i&;" Schritten."
    print " Funktionswert: ";formel_1(x!)'formel_0(x!)

endif

WaitInput
case %csrlin>22:cls
goto "Begin"

proc regulafalsi

    parameters a!' Startwert
    var er!=10^-13
    Declare x0!,x1!,x2!,y0!,y1!
    x2!=a!
    x1!=a!+0.1' Soll nur gleich zu Beginn Division durch Null vermeiden
    i&=0

    while i&<=imax&

        x0!=x1!:x1!=x2!' next generation vorbereiten
        rem y0!=formel_0(x0!) : y1!=formel_0(x1!)' Testfunktion Parabel
        y0!=formel_1(x0!) : y1!=formel_1(x1!)' Polynom 3. Grades

        if (y1!-y0!)<>0

            x2! = x0! - y0! * (x1!-x0!) / (y1!-y0!)

        else

            print " Warnung: Verfahren wurde instabil!"
            break

        endif

        case abs(x2!-x1!)<=er!:break
        inc i&

    endwhile

    'Bei Error: x2 = -INF + 1e-307 =
    'kleinstmöglicher DoublePrecision Floatwert<>0
    case i&>imax&:x2!=val("4.9406564584124654E-323")
    return x2!

endproc

proc Formel_0

    parameters x!
    declare y!
    '---------------------------------------------------------------
    ' Formel zuvor stets auf homogene Form bringen:  ... = 0
    ' Ges: Lösung zu  x^2 = +4 , wird also (beide Seiten: - 4) zu:
    y!=x!*x! - 4' mit y = Abweichung von 0 (Irrtumsvariable)
    ' Verfahrensziel: Cerca ab Startwert a ein x, das y zu Null macht
    ' Tipp per Schnittpunkt 2er Funktionen: Differenzfunktion bilden!
    '---------------------------------------------------------------
    return y!

EndProc

proc Formel_1

    parameters x!
    declare y!
    '-------------------------------------
    ' Zu lösen: x^3-2*x^2+12*x = 100
    y!=x!*x!*x!-2*x!*x!+12*x!-100' = 0
    '-------------------------------------
    return y!

EndProc

 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
07.05.2021  
 



Zum Quelltext


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

577 Views

Untitledvor 0 min.
Sven Bader02.11.2021
Ernst21.07.2021
Uwe ''Pascal'' Niemeier13.06.2021
R.Schneider28.05.2021
Di più...

Themeninformationen

Dieses Thema hat 1 subscriber:

p.specht (1x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie