Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| simulation:benutzerdefinierte_funktionen [2026/01/10 21:14] – neelest | simulation:benutzerdefinierte_funktionen [2026/01/10 21:29] (aktuell) – neelest | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| ====== Benutzerdefinierte Funktionen ====== | ====== Benutzerdefinierte Funktionen ====== | ||
| - | |||
| - | *[[Simulation: | ||
| - | *[[Simulation: | ||
| - | *[[Simulation: | ||
| - | |||
| - | ===== Benutzerdefinierte Funktionen ===== | ||
| Für die Definition benutzerdefinierter Funktionen wurde eine eigene, minimale (Programmier-)Sprache entwickelt. In dieser Sprache können beliebig komplexe, mathematische Ausdrücke formuliert werden. Außerdem bietet sie die Möglichkeit der bedingten Ausführung anhand logischer Ausdrücke. Im Folgenden wird näher auf die Eigenschaften dieser Sprache eingegangen. | Für die Definition benutzerdefinierter Funktionen wurde eine eigene, minimale (Programmier-)Sprache entwickelt. In dieser Sprache können beliebig komplexe, mathematische Ausdrücke formuliert werden. Außerdem bietet sie die Möglichkeit der bedingten Ausführung anhand logischer Ausdrücke. Im Folgenden wird näher auf die Eigenschaften dieser Sprache eingegangen. | ||
| Zeile 19: | Zeile 13: | ||
| {{ : | {{ : | ||
| - | **Abbildung: | ||
| Der obere Teil dient zur Festlegung des Namens und der Einheit eines Funktionswertes dieser Funktion. Ist der Name einmal bestimmt, so kann er nicht mehr geändert werden. | Der obere Teil dient zur Festlegung des Namens und der Einheit eines Funktionswertes dieser Funktion. Ist der Name einmal bestimmt, so kann er nicht mehr geändert werden. | ||
| Zeile 30: | Zeile 23: | ||
| Beim Drücken auf //Ok// wird geprüft, ob die definierte Funktion ausgewertet werden kann. Sind syntaktische Fehler in der Funktion enthalten, so werden diese ausgegeben und die Fehlerstelle im Textfeld farblich markiert. | Beim Drücken auf //Ok// wird geprüft, ob die definierte Funktion ausgewertet werden kann. Sind syntaktische Fehler in der Funktion enthalten, so werden diese ausgegeben und die Fehlerstelle im Textfeld farblich markiert. | ||
| + | |||
| + | ===== Mathematische Ausdrücke ===== | ||
| + | |||
| + | Mathematische Ausdrücke repräsentieren einen (noch zu bestimmenden) Wert. In einem solchen Ausdruck können Variablen, mathematische Operatoren, vordefinierte Funktionen und Klammern beliebig verwendet werden. Die folgende Auflistung führt auf, welche Elemente in einem mathematischen Ausdruck verwendet werden kann, damit dieser den Anforderungen der benutzerdefinierten Funktionen genügt: | ||
| + | |||
| + | * **Binäre Operatoren: | ||
| + | * **Unäre Operatoren: | ||
| + | * **Klammern: | ||
| + | * **Variablen: | ||
| + | * **Vordefinierte Funktionen: | ||
| + | * **Benutzerdefinierte Funktionen: | ||
| + | |||
| + | Des Weiteren gibt es einige Rechenregeln, | ||
| + | |||
| + | ==== Präzedenz von Operatoren und Klammerung ==== | ||
| + | * Die Rechenzeichen * und / binden stärker als + und -. | ||
| + | * Potenzen werden vorrangig ausgerechnet. | ||
| + | * Vordefinierte Funktionen binden stärker als der Potenzoperator. | ||
| + | * Inhalte, der in Klammern steht, wird zuerst ausgerechnet. | ||
| + | |||
| + | ==== Assoziativität ==== | ||
| + | Alle definierten binären Operatoren sind links-assoziativ. Das heißt, falls in einem Term mehrere Operatoren gleicher Präzedenz hintereinander stehen, so wird der Term von links nach rechts ausgewertet. | ||
| + | |||
| + | ==== Beispiele ==== | ||
| + | |||
| + | | $a^3+b^2+0.815$ | Gültiger Ausdruck | | ||
| + | | $42+(-7)$ | Gültiger Ausdruck (unäres Minus) | | ||
| + | | $\frac{a}{b}/ | ||
| + | | $\sin(2) \cdot 3.1415$ | Gültiger Ausdruck, er entspricht $(\sin 2) \cdot 3.1415$ | | ||
| + | | $\sin(2 \cdot 3.1415)$ | Gültiger Ausdruck | | ||
| + | | $x^{1/2}$ oder $\sqrt{x}$ | Gültiger Ausdruck, Quadratwurzel von x | | ||
| + | |||
| + | ===== Logische Ausdrücke ===== | ||
| + | |||
| + | Logische Ausdrücke repräsentieren einen Wahrheitswert. In einem solchen Ausdruck können Vergleichsoperatoren sowie logische Operatoren verwendet werden. Die sechs binären Vergleichsoperatoren Kleiner (<), Kleiner-oder-gleich ( < = ), Gleich ( == ), Größer-oder-gleich ( >= ), Größer (>) und Ungleich ( != ) vergleichen jeweils zwei mathematische Ausdrücke miteinander. Ihre Rückgabewerte sind Wahrheitswerte und können mit den zwei logischen Operatoren //and// und //or// weiter verknüpft werden. Dabei gilt, dass //and// stärker bindet als //or//. Logische Ausdrücke können nicht geklammert werden. Der Einsatz von logischen Ausdrücken ist auf bedingte Anweisungen beschränkt, | ||
| + | |||
| + | ==== Beispiele ==== | ||
| + | | $a < 0$ | Gültiger Ausdruck, wahr, wenn $a$ negativ ist | | ||
| + | | $0.5 < a \land a \leq 1$ | Gültiger Ausdruck, wahr, wenn $a \in (0.5, 1]$ ist | | ||
| + | | $a \lor b$ | Kein gültiger Ausdruck, Wahrheitswerte können nicht in Variablen gespeichert werden | | ||
| + | | $|0-a| < \varepsilon$ | Gültiger Ausdruck, linke und rechte Seite sind jeweils mathematische Ausdrücke | | ||
| + | |||
| + | ===== Anweisungen ===== | ||
| + | |||
| + | Die oben beschriebenen Ausdrücke können nicht für sich stehen, sondern können immer nur in Verbindung mit Anweisungen genutzt werden. Für die benutzerdefinierten Funktionen werden dabei vier Anweisungen unterschieden. Jede Anweisung beginnt in einer neuen Zeile und muss am Ende einer Zeile abgeschlossen sein. | ||
| + | |||
| + | ==== Zuweisungen ==== | ||
| + | |||
| + | Eine Zuweisung bindet den Wert eines mathematischen Ausdrucks an eine Variable. Dabei steht auf der linken Seite des Zuweisungszeichens ( = ) der Variablenname und auf der rechten Seite ein gültiger mathematischer Ausdruck. Die Syntax ist wie folgt: | ||
| + | |||
| + | ''< | ||
| + | |||
| + | Durch Verwenden einer Zuweisungsanweisung wird die entsprechende Variable, sofern noch nicht bekannt, angelegt und mit dem Wert des Ausdrucks belegt. Existiert bereits eine Variable mit diesem Namen, so wird der alte Wert überschrieben. So angelegte Variablen können anschließend wieder in mathematischen Ausdrücken verwendet werden. Variablennamen müssen immer mit einem Buchstaben beginnen, dürfen aber Ziffern enthalten. Der Wert von logischen Ausdrücken kann nicht an Variablen gebunden werden! | ||
| + | |||
| + | Nachfolgend sind einige Beispiele für Zuweisungen aufgeführt. | ||
| + | |||
| + | | $\pi = 3.1415$ | Gültige Zuweisung | | ||
| + | | $ab2 = a^2 + 2ab + b^2$ | Gültige Zuweisung | | ||
| + | | $soNicht = (a < 0)$ | Keine gültige Zuweisung, Wahrheitswerte können nicht an Variablen gebunden werden | | ||
| + | | $a = b = 0.0$ | Ungültig, nur eine Zuweisung erlaubt | | ||
| + | | $2Pi = 2 + \pi$ | Ungültig, " | ||
| + | |||
| + | ==== Return ==== | ||
| + | |||
| + | Eine return-Anweisung legt den Funktionswert der benutzerdefinierten Funktion fest und beendet die weitere Auswertung der Funktion. Der Wert des hinter dem Schlüsselwort (return) stehenden mathematischen Ausdrucks ist dabei der Funktionswert. Dabei gilt folgende Syntax: | ||
| + | |||
| + | '' | ||
| + | |||
| + | === Bedingte Ausführung === | ||
| + | |||
| + | Eine '' | ||
| + | |||
| + | '' | ||
| + | |||
| + | Als einfachstes Beispiel kann man die Bestimmung des Maximums zweier Werte betrachten: | ||
| + | |||
| + | < | ||
| + | if a < b # Wenn a kleiner als b ist | ||
| + | then # Dann | ||
| + | max= b # Ist b das Maximum | ||
| + | else # Sonst | ||
| + | max= a # Ist a das Maximum | ||
| + | </ | ||
| + | |||
| + | ==== Gruppierung ==== | ||
| + | |||
| + | Die Schlüsselwörter //begin// und //end// klammern eine Folge von Anweisungen so, dass die zwischen //begin// und //end// aufgeführten Anweisungen als eine Anweisung behandelt werden können. Auf diese Weise können auch mehrere Anweisungen zusammen bedingt ausgeführt werden. | ||
| + | |||
| + | < | ||
| + | begin | ||
| + | < | ||
| + | ... | ||
| + | < | ||
| + | end | ||
| + | </ | ||
| + | |||
| + | ===== Weitere Hinweise für den Gebrauch benutzerdefinierter Funktionen ===== | ||
| + | |||
| + | |||
| + | ==== Die Bedeutung von Zeilen ==== | ||
| + | In den benutzerdefinierten Funktionen bildet eine Zeile jeweils eine der oben beschriebenen Anweisungen. Da es kein spezielles Endkennzeichen (wie ";" | ||
| + | |||
| + | ==== Variablen ==== | ||
| + | Es gibt nur Variablen für mathematische Ausdrücke. Eine Variable speichert also immer den Wert eines mathematischen Ausdrucks. Eine neue Variable wird durch Benutzen eines bisher unbekannten Bezeichners deklariert. Wird der neue Bezeichner innerhalb eines mathematischen Ausdrucks verwendet, so wird zwar die Variable deklariert, ihr Wert jedoch ungültig. | ||
| + | |||
| + | ==== Vordefinierte Variablen ==== | ||
| + | Eine benutzerdefinierte Funktion wird im Berechnungskern von SIGMA für jede Stützstelle einzeln ausgewertet. Für an der Stützstelle bekannte Daten, wie Geometrie- oder Materialdaten, | ||
| + | |||
| + | ==== Operatoren ==== | ||
| + | In der folgenden Tabelle sind alle benutzbaren Operatoren angegeben. Operatoren mit höherer Präzedenz stehen weiter oben. | ||
| + | |||
| + | ^ # ^ Name ^ Zeichen ^ Beschreibung ^ Kategorie ^ | ||
| + | | 7 | Potenz | %%^%% | Potenziert den linken Operanden mit dem rechten Operanden | mathematisch | | ||
| + | | 6 | Negation | - | Negiert den linken Operanden | mathematisch | | ||
| + | | 5 | Multiplikation | * | Multipliziert die beiden Operanden | mathematisch | | ||
| + | | 5 | Division | / | Dividiert den linken Operanden durch den rechten Operanden | mathematisch | | ||
| + | | 4 | Addition | + | Addiert die beiden Operanden | mathematisch | | ||
| + | | 4 | Subtraktion | - | Subtrahiert den rechten Operanden von dem linken Operanden | mathematisch | | ||
| + | | 3 | Kleiner | < | Prüft ob der linke Operand kleiner als der rechte Operand ist | mathematisch → logisch | | ||
| + | | 3 | Kleiner-oder-gleich | %%<=%% | Prüft ob linker Operand kleiner oder gleich dem rechten Operanden ist | mathematisch → logisch | | ||
| + | | 3 | Gleich | %%==%% | Prüft ob die beiden Operanden gleich sind | mathematisch → logisch | | ||
| + | | 3 | Größer-oder-gleich | %%>=%% | Prüft ob der linke Operand größer oder gleich dem rechten Operanden ist | mathematisch → logisch | | ||
| + | | 3 | Größer | > | Prüft ob linker Operand größer als der rechte Operand ist | mathematisch → logisch | | ||
| + | | 3 | Ungleich | != | Prüft ob die beiden Operanden ungleich sind | mathematisch → logisch | | ||
| + | | 2 | Logisches Und | and | Verknüpft die beiden Operanden mit der logischen Operation Und | logisch | | ||
| + | | 1 | Logisches Oder | or | Verknüpft die beiden Operanden mit der logischen Operation Oder | logisch | | ||
| + | |||
| + | ==== Mathematische Funktionen ==== | ||
| + | Innerhalb der mathematischen Ausdrücke können 14 vordefinierte mathematische Funktionen verwendet werden, die in der folgenden Tabelle aufgeführt sind. Jede dieser Funktionen besitzt genau einen Parameter, der, als mathematischer Ausdruck, direkt auf den Bezeichner folgt. Funktionen binden stärker als der Potenzoperator. | ||
| + | |||
| + | ^ Name ^ Zeichen ^ Beschreibung ^ | ||
| + | | Sinus | sin | Berechnet den Sinus, Parameter in rad | | ||
| + | | Cosinus | cos | Berechnet den Cosinus, Parameter in rad | | ||
| + | | Tangens | tan | Berechnet den Tangens, Parameter in rad | | ||
| + | | Arcus Sinus | asin | Berechnet den Arcus Sinus in rad | | ||
| + | | Arcus Cosinus | acos | Berechnet den Arcus Cosinus in rad | | ||
| + | | Arcus Tangens | atan | Berechnet den Arcus Tangens in rad | | ||
| + | | Sinus Hyperbolicus | sinh | Berechnet sinh in rad | | ||
| + | | Cosinus Hyperbolicus | cosh | Berechnet cosh in rad | | ||
| + | | Tangens Hyperbolicus | tanh | Berechnet tanh in rad | | ||
| + | | Dekadischer Logarithmus | log | Berechnet den Logarithmus zur Basis 10 | | ||
| + | | Logarithmus Naturalis | ln | Berechnet den Logarithmus zur Basis $e$ | | ||
| + | | Betrag | abs | Liefert den Absolutbetrag des Parameters | | ||
| + | | Quadratwurzel | sqrt | Berechnet die Quadratwurzel | | ||
| + | |||
| + | ==== Auswertung benutzerdefinierter Funktionen ==== | ||
| + | Eine benutzerdefinierte Funktion wird für jeweils eine Stützstelle ausgewertet, | ||
| + | |||
| + | ==== Ungültige Werte ==== | ||
| + | Da nicht alle vordefinierten Variablen für jede Stützstelle einen gültigen Wert aufweisen und manche mathematischen Operationen nicht für alle Werte definiert sind (z. B. Division durch Null), gibt es einen speziellen Wert, der ungültige Werte repräsentiert. Als vordefinierte Variable heißt dieser Wert // | ||