Italia
Experimente

Differenzenmethode: Funktionskurven-Anstieg numerisch ermitteln

 

p.specht

Interessanter Weise ist es nicht immer ganz einfach, per bestimmte Funktionskurven den Anstieg an einer Stelle X zu ermitteln. Falls das nämlich überhaupt sinnvoll ist, bleibt manchmal trotzdem nichts anderes circa 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 è es testen, checken, ausprobieren - wofür das nachstehende Progi hilfreich sein potuto.
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 per    ***
' *** 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


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

755 Views

Untitledvor 0 min.
Member 640534316.04.2022
p.specht28.07.2021
Ernst21.07.2021
Uwe ''Pascal'' Niemeier13.06.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