Stückweise lineare Funktionen in Scripts: Unterschied zwischen den Versionen
imported>DrBlackError Keine Bearbeitungszusammenfassung |
K (1 Version importiert: Init) |
Aktuelle Version vom 23. Oktober 2023, 22:03 Uhr
Mit diesem sperrigen Begriff sind Funktions-Kurven gemeint, die vom Programmierer frei erstellt werden können. Definiert werden sie, indem (mindestens 2) X-Y-Paare (Punkte) definiert werden, die dann rechnerisch mit geraden Linien verbunden werden. An anderer Stelle treten solche Funktionen in LOTUS auch auf, z.B. als Volume-Kurven im Sound-Editor.
Ein typisches Beispiel hierfür sind Motorkennlinien. Diese folgen nicht einer einzelnen mathematischen Formel, sondern müssen entsprechenden Diagrammen der Datenblätter nachempfunden werden.
Die Funktionen werden nach folgendem Prinzip angelegt:
Im Initialisierungs-Teil eine neue "Funktionshülle" definieren Im Initialisierungs-Teil der Funktion nacheinander Wertepaare hinzufügen Funktion an beliebiger Stelle verwenden Konkret werden diese Schritte wie folgt durchgeführt:
Zuerst muss eine globale Integer-Variable definiert werden, die zur Identifikation der Funktion dient:
Testfunction: integer;
Mit der Funktion LinFuncNew kann man nun im Initialisierungs-Teil eine neue Funktion anlegen:
Testfunction := LinFuncNew;
Dieser Funktion kann man nun mit mehrmaligem Aufruf von LinFuncAddPair(id, x, y) die nötigen Wertepaare übergeben. Die Reihenfolge ist wichtig! X muss stets größer werden!
Code LinFuncAddPair(Testfunction, 2, 6); LinFuncAddPair(Testfunction, 6, 5); LinFuncAddPair(Testfunction, 7, 8); LinFuncAddPair(Testfunction, 8, 2);
Schließlich kann man an jeder beliebigen Stelle (natürlich erst nach der Definition) die Funktion mit LinFuncGetValue(id, x) verwenden:
Ergebnis := LinFuncGetValue(Testfunction, 4); // Ergebnis = 5.5