Ankündigung

Einklappen
Keine Ankündigung bisher.

Linearisierung mit Stützstellen?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Linearisierung mit Stützstellen?

    Das Problem ist alt und gut bekannt:
    Ich habe einen Eingangswert, zu dem ich einen Ausgangswert bestimmen möchte, wo bei der Zusammenhang sich schwer oder gar nicht als mathematische Formel darstellen läßt, wohl aber recht einfach als Kurve mit vielen Stützstellen und linearer interpolation dazwischen.
    Die Lösung ist auch alt und gut bekannt:
    Man hat eine Tabelle der Stützstellen (x/y) im Speicher die nach x sortiert ist. Das Programm sucht die beiden Punkte, deren x-Werte den gegebenen Eingangswert einschließen und berechnet den gesuchten y-Wert per linearer Interpolation.
    Letzteres ist einfach, aber wie programmiere ich im EibPC erstens die Tabelle und zweitens die Schleife um sie zu durchsuchen?
    Wünschenswert wäre, wenn wie bei anderen Berechnungen auch, das Ergebnis noch im selben Zyklus vorliegen würde, in dem sich der Eingangswert geändert hat...

    Ich würde diese Funktion nicht nur zur Linearisierung von Meßwerten verwenden wollen, sondern auch zur Beschreibung von Konturen, z.B. Abschattung der Sonne durch umgebende Gebäude in Abhängigkeit von Azimuth (x) und Elevation (y) ...
    Tessi

    #2
    Zitat von Tessi Beitrag anzeigen
    Letzteres ist einfach, aber wie programmiere ich im EibPC erstens die Tabelle und zweitens die Schleife um sie zu durchsuchen?
    Wünschenswert wäre, wenn wie bei anderen Berechnungen auch, das Ergebnis noch im selben Zyklus vorliegen würde, in dem sich der Eingangswert geändert hat...
    Nun, das muss man mit einer Folge von if-Abfragen realsieren.
    i
    f Bereich1 then Y=m1*x+c1 endif
    if Bereich2 then Y=m2*x+c2 endif
    ...
    if BereichN then Y=mN*x+cN endif

    Dabei wird natürlich Y sich ändern, sobald x sich ändert (also im selben Zyklus).
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    Kommentar


      #3
      OK, ich würde die Vergleiche als Baum ausführen, dann sind es nur log2(Anzahl Stützstellen) Vergleiche...
      Ich würde das häufiger benötigen, also gerne als Makro ausführen, aber wie kann ich dann je nach Bedarf mit unterschiedlichen Anzahlen an Stützstellen umgehen?
      Tessi

      Kommentar


        #4
        Zitat von Tessi Beitrag anzeigen
        wie kann ich dann je nach Bedarf mit unterschiedlichen Anzahlen an Stützstellen umgehen?
        Es gibt keine Makrofunktionen mit variabler Anzahl von Argumenten.
        Du musst dann mit Strings als Feldern arbeiten, wie das z.B. im Flash Makro so realisiert wurde.
        offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
        Enertex Produkte kaufen

        Kommentar


          #5
          Zitat von enertegus Beitrag anzeigen
          Es gibt keine Makrofunktionen mit variabler Anzahl von Argumenten.
          Ich dachte an Arrays als Parameter...

          Zitat von enertegus Beitrag anzeigen
          Du musst dann mit Strings als Feldern arbeiten,
          OK, zur Not auch so...

          Zitat von enertegus Beitrag anzeigen
          wie das z.B. im Flash Makro so realisiert wurde.
          Hilfe, ich seh den Wald vor lauter Bäumen nicht, welche der 425 Zeilen arbeiten denn ein als String getarntes Array ab?
          Tessi

          Kommentar


            #6
            Zitat von Tessi Beitrag anzeigen
            welche der 425 Zeilen arbeiten denn ein als String getarntes Array ab?
            z.B.
            [highlight=epc]
            Store_Name_Pos=stringcast(Store_Name_Array,Store_N ame_Pos,0u16);
            [/highlight]

            Gruß,
            Bernd

            Kommentar


              #7
              Ok, das ist ein Zugriff auf ein einzelnes "Array"-Element.
              Aber leider nur ein kleiner Teil der Miete...
              Wo ist da eine Schleife über alle Elemente eines "Arrays" versteckt?
              Tessi

              Kommentar


                #8
                Zitat von Tessi Beitrag anzeigen
                Wo ist da eine Schleife über alle Elemente eines "Arrays" versteckt?
                Über mehrere Zyklen hinweg. Schau Dir mal die For-Schleife bei Enertex2.lib an.

                Aber mal was anderes: wieviele Stützstellen mußt Du denn haben?

                Gruß,
                Bernd

                Kommentar


                  #9
                  Zitat von bmx Beitrag anzeigen
                  Über mehrere Zyklen hinweg. Schau Dir mal die For-Schleife bei Enertex2.lib an.
                  Hm, in der MakroLibs-de.zip der Version V1.012 (das neueste was ich auf der Homepage gefunden habe) finde ich eine Enertex.lib, aber keine Enertex2.lib...
                  Allerdings habe ich in der Enertex.lib auch eine for-Schleife gefunden. Mal sehen, ob ich das in ähnlicher Form verwenden kann.

                  Zitat von bmx Beitrag anzeigen
                  Aber mal was anderes: wieviele Stützstellen mußt Du denn haben?
                  Das variiert von 4 bis vielleicht rund 20. Die Obergrenze weiß ich noch nicht so genau, da ich noch nicht alles ausgemessen habe - die Arbeit möchte ich mir erst machen, wenn ich weiß, das ich mit den Resultaten auch tatsächlich was anfangen kann. Letzlich werde ich dann dabei empirisch ermitteln müssen, wie genau ich es wirklich benötige.

                  Schade, das es eine solche Kennlinien-Funktion nicht analog zu average(), min() oder max() gibt, z.B. linear(VarX, VarX1, VarY1, VarX2, VarY2, ... VarXN, VarYN).
                  Das wäre nicht nur einfacher sondern sicherlich auch wesentlich schneller...
                  Tessi

                  Kommentar


                    #10
                    Muß denn deine lineare Approximation während der Laufzeit geändert werden oder ist die fix?

                    Kommentar


                      #11
                      Wenn alles passt werden die Stützstellen sich zu Laufzeit bei den von mir aktuell geplanten Nutzungen nicht ändern.
                      Im Laufe der Zeit könnten schon Anpassungen notwendig werden, aber wahrscheinlich so selten, das eine Programmanpassung dafür mir derzeit akzeptabel erscheint.

                      Nice to have wäre es aber schon, wenn man die Stützstellenliste per Webinterface einfach editieren und persistent abspeichern könnte...
                      Tessi

                      Kommentar

                      Lädt...
                      X