Deutsch
Experimente

Differenzenmethode: Funktionskurven-Anstieg numerisch ermitteln

 

p.specht

Interessanter Weise ist es nicht immer ganz einfach, für bestimmte Funktionskurven den Anstieg an einer Stelle X zu ermitteln. Falls das nämlich überhaupt sinnvoll ist, bleibt manchmal trotzdem nichts anderes über als rein numerische Methoden zu verwenden. Diese haben aber auch ihre Tücken, z.B. bei Nullstellen oder (+/-Infinity)-Polstellen. Nachstehend wurden die schlimmsten Fallen abgefangen, aber Garantie ist das noch immer keine, daß das bei anderen Funktionstypen auch klappt. Also heißt es testen, checken, ausprobieren - wofür das nachstehende Progi hilfreich sein könnte.
WindowTitle "Test: Numerische Differentiation (Anstieg "+\
"in x nach der Differenzenmethode)"
' *************************************************
' (CL) CopyLeft 2013-09 by P. Specht, Wien
' Ohne jedwede Gewähr!
' *************************************************

proc FNY : parameters x!

    return -1*10^-35' hier auskommentieren, Funktion nachstehend programmieren:
    return sin(x!)

endproc

' *************************************************
' *** Differenzenmethode, hier optimiert für    ***
' *** Winkelfunktionen im Bereich Nähe (+1..-1) ***
' *************************************************

proc Ableitung :parameters x!

    var nenn!=x!*(1.000005-0.999995)
    case nenn!=0:return 0
    return (fny(x!*1.000005)-fny(x!*0.999995))/nenn!

endproc

WindowStyle 24:font 2:randomize
Window 0,0-%maxx,%maxy-40
var xh&=width(%hwnd)\2:var yh&=height(%hwnd)\2

if fny(1)=-1*10^-35

    print "\n Abzuleitende Funktion bitte in Proc FNY(x) einprogrammieren!"
    sound 770,100:sound 440,300
    waitinput 10000
    end

endif

declare xa!,xm!,xe!,xd!,y$,x!,y!
declare xl&,yl&,xn&,yn&
declare xo&,yo&,xm&,ym&
declare xp&,yp&,xq&,yq&
Print "\n     Darstellen ab X-Start = ";:input xa!
print "                 bis X-End = ";:input xe!

if xe!=0:xe!=8:xa!=-8:endif'== reine Faulheit ====

    print "  Fehlerfunktion darstellen? ";:input y$
    case y$="":y$="Ja"
    y$=upper$(left$(y$,1)):case y$="Y":y$="J"
    'Nur Schleppwerte der unterschiedlichen Line-Befehle:
    xl&=0:yl&=yh& : xo&=0:yo&=yh& : xq&=0:yq&=yh&
    x!=xa!
    xd!=(xe!-xa!)/(2*xh&)
    case xd!=0:xd!=1*10^-35

    repeat

        usepen 0,2,rgb(255,0,0)
        y!=fny(x!)
        xn&=(x!-xa!)/xd!
        yn&=yh&-100*y!
        line xl&,yl& - xn&,yn&
        xl&=xn&:yl&=yn&
        usepen 0,1,rgb(0,0,155)
        y!=Ableitung(x!)
        xm&=(x!-xa!)/xd!
        ym&=yh& - 100*y!
        line xo&,yo& - xm&,ym&
        xo&=xm&:yo&=ym&

        if y$="J"

            usepen 0,1,rgb(0,255,0)
            y!=Ableitung(x!)-cos(x!)
            xq&=(x!-xa!)/xd!
            yq&=yh& - 10^12*y!
            line xp&,yp& - xq&,yq&
            xp&=xq&:yp&=yq&

        endif

        x!=x!+xd!' STEP

    until x!>xe!

    waitinput
    end

P.S.: Am gefährlichsten erscheinen Divisionen durch Null, gleich dahinter sind negative Wurzelargumente ein beliebter Exception- oder gar Aufhängegrund. Negative Logarithmen machen die Sache auch spannend, dicht gefolgt von zu hoch greifenden Potenzfunktionen..
 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
10.05.2021  
 



Zum Experiment


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

790 Betrachtungen

Unbenanntvor 0 min.
Member 640534316.04.2022
p.specht28.07.2021
Ernst21.07.2021
Uwe ''Pascal'' Niemeier13.06.2021
Mehr...

Themeninformationen

Dieses Thema hat 1 Teilnehmer:

p.specht (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


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