Integralrechner

Statement zur DSGVO im Forum

Alles zur DSGVO und zur Umsetzung im Forum hier: Statement zur DSGVO (letztes Update: 30.05.2018)
  • Hi,


    ich hab mir letztens mal das Thema Integralrechnung angeschaut und dachte mir das wäre doch in AutoIt machbar.
    Falls jemand nicht weiß, was ein Integral ist hier eine kurze Erklärung + Rechnung:



    Das wars auch eigentlich schon, die Rechnung könnt ihr euch im Script anschauen, es gibt noch Besonderheiten bei negativen Werten deshalb ist das If da.


    Wichtig für beide Versionen!!!
    Ihr müsst die Werte unterschiedlich bei unterschiedlichen Funktionen runden da es nur Näherungswerte sind.
    So wäre bei f(x) = x an der Stelle 1 bis 3 3.99970000500089 bei einem Step von 0.0001 4!

    Wichtig für die Version ohne Solver!!!


    Script hier oder im Anhang


    Da die Performanz in AutoIt in einigen Bereichen oder generell zu wünschen lässt, kann es bei kleineren Schritten länger dauern.


    Wenn jemand eine andere Methode kennt das Integral rauszufinden oder einen anderen Lösungsweg weiß bitte her damit!
    Ich weiß das man die ganze Funktion integrieren kann aber allein um die Funktion "12*(x-2)+4" zu trennen bzw. den String zu solven dauert das ein bisschen.
    Mit Execute und StringReplace geht das ganze viel besser von der Hand.


    Hoffentlich gefällts euch, Kritik und Lob erwünscht!

  • Hoffentlich gefällts euch, Kritik und Lob erwünscht!

    Ja gefällt mir sehr.
    Das Verfahren wird wirklich so ähnlich wie du es gelöst hast bei der numerischen Integralberechnung verwendet.
    Die Funktion wird in einem Intervall durch eine einfache Fläche (Rechteck, Trapez etc.) approximiert und damit ein Näherungswert für die Fläche berechnet.
    Wenn man das große Intervall in viele kleine unterteilt und das in jedem Intervall macht kann man die Genauigkeit beliebig steigern.


    Ich weiß das man die ganze Funktion integrieren kann aber allein um die Funktion "12*(x-2)+4" zu trennen bzw. den String zu solven dauert das ein bisschen.


    Du kannst ja stattdessen eine Funktion mit einem Parameter $x definieren und darin einfach AutoIt die Berechnung machen lassen.
    So kannst du ganz flexibel alle möglichen Funktionen implementieren. (Siehe mein folgendes Beispiel).


    Wenn jemand eine andere Methode kennst das Integral rauszufinden oder einen anderen Lösungsweg weiß bitte her damit!

    Das Prinzip bleibt immer das selbe. Die Funktion durch einfache Flächen ersetzen und aufsummieren.
    Die Verfahren unterscheiden sich dann lediglich darin welche Form genommen wird.
    Ich habe mal die Mittelpunktregel (Rechteck), Sehnentrapezregel, Tangententrapezregel, Simpsonregel und die Gaußquadratur implementiert.
    Bei diesen muss man explizit angeben in wieviel Teilintervalle der Bereich zerlegt wird womit man die Genauigkeit beeinflussen kann.
    Ein Sonderfall ist die Monte-Carlo Integration - hierbei werden zufällig Werte im Intervall berechnet und der Mittelwert berechnet (sieht ziemlich ineffizient aus - ist aber in höherdimensionalen Gleichungen unerlässlich).
    Zusätzlich gibt es noch die Funktion _MathInt_Calc mit welcher man eine zu erreichende Genauigkeit vorgeben kann.


    Diese Funktionen dienen vor allem dazu die verschiedenen Ansätze zu vergleichen.
    Für den produktiven Einsatz habe ich dann noch die Romberg-Integration implementiert, welche sowohl die Möglichkeit einer zu erreichende Genauigkeit besitzt und zusätzlich noch verdammt fix ist.
    Wenn man also in AutoIt integrieren muss - diese Funktion nehmen.
    Ebenfalls enthalten ist eine Funktion zur Berechnung des Kurvenintegrals.


  • Freut mich das es jemandem gefällt :)


    Zu der Sache mit der ganzen Funktion zu integrieren.
    Ich weiß nicht wie man einen String solven lassen kann.
    Wenn man in AutoIt einen String hat z.B.[autoit]
    $sFunction = "12*(x-2)+4"[/autoit]
    Dann kann man den String ja nicht solven lassen, es gibt keine Funktion dafür, deshalb muss man das leider so machen.
    Man braucht diese Funktion wenn man das in eine GUI einbauen möchte die für die Gleichung eine statt viele InputControls hat.


    Wenn man eine Solve-Funktion hat dann kann man ich die ganze Funktion integrieren und dann die Werte von 1-3 auslesen.
    Das gleiche ist bei Punktsteigung und Ableitung von Funktionen so.

  • Schau dir mal in meinem Beispiel an wie ich das mit der Funktion gemeint hatte.
    Wenn du wirklich die Funktion als String haben willst dann ersetze im String per StringReplace "x" mit dem jeweils aktuellen Wert von x.
    Den resultierenden String führst du dann einfach per Execute() aus und hast das Ergebnis.


    Ich hatte das >>hier<< schonmal genauso umgesetzt.

  • Ausrechnen kannst du per
    [autoit]
    Execute($vArg)
    [/autoit]


    Könnte vereinfacht so aussehen:



    Im Browser getippt, also keine Garantie.


    lg

  • Wenn man eine Solve-Funktion hat dann kann man ich die ganze Funktion integrieren und dann die Werte von 1-3 auslesen.
    Das gleiche ist mein Punktsteigung und Ableitung von Funktionen so.

    Vielleicht kannst du ja folgendes gebrauchen:
    Ich hatte vor einiger Zeit mal ein paar Funktionen zur Kurvendiskussion geschrieben welche so mit den Funktionen umgehen wie du es machen willst: