<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de" dir="ltr"> <head> <meta content="text/html; charset=UTF-8" http-equiv="Content-Type"></meta> <title>pi - Matheparser/Taschenrechner</title><style type="text/css"> body { background-color: #ffffe0; margin: 0; padding: 5px; line-height: 1.5; font-family: Verdana,Arial,sans-serif; font-size: 14px; } a,a:visited,a:active { color: #555; border-top:1px solid #555; border-bottom:1px solid #555; text-decoration:none; } h1 { margin-top: 50px; } h1#main { margin-top: 0px; } code { border: 1px solid silver; padding: 2px; margin: 1px; } h3 code, pre code { border: none; margin: 0; padding: 0; } pre { margin-left: 20px; padding-left: 1ex; border: 1px solid silver; background: white; } li { margin-bottom: 10px; } dd p, li p { margin-top: 0.2em; } a.function-link { float: right; border: 0px; } li.function { margin-bottom: 2em; } span.function-options { text-decoration: underline; } dl.function-options dt { font-family: monospace; padding-left: 1em; } dl.function-options dd table { border-left: 1px solid black; width: 100%; } dl.function-options dd table td { border-bottom: 1px solid #bbb; } </style></head> <body> <h1>pi - Matheparser/Taschenrechner</h1> <h2>Über das Projekt Π</h2> <div> Offizielles Repository: <a href="https://github.com/martok/pi" shape="rect">GitHub</a>.<br clear="none"> Projekt-Thread in der Entwickler-Ecke: <a href="http://www.entwickler-ecke.de/viewtopic.php?t=106298" shape="rect">pi - Matheparsertaschenrechner</a> </div> <h2>Syntax</h2> <div> <p>Gleichungen eben ;)</p> <p>Eine Besonderheit ist, dass mit dem Definition-Operator (<code>:=</code>) Ausdrücke direkt ohne Auswertung gespeichert werden können. Diese kann man dann durch eine spezielle Art des Funktionsaufrufs verwenden: Eckige Klammern führen eine Expression mit neuem Kontext aus, der durch die Ausdrücke in der Klammer vorbereitet werden kann. </p> </div> <h2>Operatoren</h2> <div> <p>Operatoren können auch durch Packages definiert werden. Eine Reihe ist jedoch immer definiert: </p> <ul> <li id="operator-describe"> <code>?</code> Describe. Gibt die FullForm seines Arguments aus </li> <li id="operator-dump"> <code>??</code> Dump. Gibt die interne Datenstruktur des unevaluierten Arguments aus. </li> <li id="operator-char"> <code>#</code> Character. Ein Zeichen aus seinem ASCII-Code erzeugen </li> <li id="operator-power"> <code>^</code> Power. Berechnet x^y </li> <li id="operator-muldiv"> <code>* / %</code> Multiplication, Division, Modulus </li> <li id="operator-addsub"> <code>+ -</code> Addition, Subtraktion </li> <li id="operator-assign"> <code>=</code> Assignment. Weist der linken Seite <b>den Wert</b> der rechten Seite zu </li> <li id="operator-definition"> <code>:=</code> Definition. Weist der linken Seite <b>den Ausdruck</b> auf der rechten Seite zu </li> <li id="operator-list"> <code>{ }</code> List. Erzeugt eine Liste. Identisch zu <a href="#function-lists-l">L()</a> </li> <li id="operator-listaccess"> <code>@</code> ListAccess. Identisch zu <a href="#function-lists-lget">LGet()</a> </li> <li id="operator-compound"> <code>;</code> Compound. Trennt Ausdrücke, die der Reihe nach ausgeführt werden. Der Wert des letzten Ausdrucks wird zurückgegeben. Dieser kann leer sein. </li> <li id="operator-function"> <code>-></code> Function. Wird in der Definition von Funktionen verwendet, um eine automatische Parameterzuordnung zu realisieren: <code>f:= {a} -> a*2</code>. </li> <li id="operator-unit"> <code>_</code> Unit. Identisch zu <a href="#function-dimensons-unit">Unit()</a> </li> </ul> </div> <h2>Datentypen</h2> <div> <dl> <dt><code>Unassigned</code></dt> <dd>Kein Wert zugewiesen (wird intern verwendet; Darstellung: <?>)</dd> <dt><code>Null</code></dt> <dd>Nullwert</dd> <dt><code>Integer</code></dt> <dd>64bit Integer (long long)<br clear="none"> -2^63 .. 2^64-1 </dd> <dt><code>Float</code></dt> <dd>80bit Extended (long double)<br clear="none"> 3.6 x 10^-4951 bis 1.1 x 10^4932 bei 19–20 stelliger Genauigkeit </dd> <dt><code>FloatDimension</code></dt> <dd>Wie <code>Float</code>, jedoch mit physikalischer Dimension </dd> <dt><code>String</code></dt> <dd>Ansi-String</dd> <dt><code>RangeList</code></dt> <dd>Bereich, Darstellung: {Enfang->Ende, Schrittweite}</dd> <dt><code>FixedList</code></dt> <dd>Liste mehrerer Werte, Darstellung: {el1,el2,el3}</dd> </dl> </div> <h2>Ausdrücke, Werte und Variablen</h2> <div> <p>Alles, was (syntaktisch korrekt) eingegeben werden kann wird als Ausdruck bezeichnet. Das Umfasst sowohl mathematische Ausdrücke ("Formeln") als auch Funktionsaufrufe, Listen etc. Um herauszufinden, wie ein Ausdruck definiert ist kann der <a href="#operator-describe" shape="rect">Describe-Operator</a> <code>?</code> verwendet werden. Dieser verwendet die FullForm der Ausdrücke, die den Ausdruck als Baum der beteiligten Funktionen beschreibt. </p> <p>In Π ist es möglich, Ausdrücke ohne vorherige Zuweisung an eine Variable zu verwenden. Darüber hinaus sind weitergehende Zuweisungen möglich. </p> <p>Statische Zuweisungen mit <code>=</code> legen den Wert der sich bei der Auswertung des Ausdrucks auf der rechten Seite in der Variable im aktuellen Kontext ab. Dies kann also z.B. ein Zahlenwert sein.<br clear="none"> Diese Syntax wird außerdem von manchen Funktionen verwendet, um Konfigurationsparameter angeben zu können und so das Verhalten der Funktionen zu beeinflussen. </p> <p>Dynamische Zuweisungen mit <code>:=</code> werten den Ausdruck nicht aus sondern speichern den Ausdruck selbst. Dieser kann dann später ausgewertet oder in weiteren dynamischen Zuweisungen verwendet werden. Das ermöglicht es, eine Funktion zu definieren und wiederholt für verschiedene Parameter aufzurufen. </p> </div> <h2>Einheiten</h2> <div> <p>Π unterstützt das Rechnen mit Einheiten direkt auf Ebene der algebraischen Funktionen. Dazu kann an einen Wert über den <a href="#operator-unit" shape="rect">Einheiten-Operator</a> <code>_</code> ein Einheitenstring angehängt werden. Dabei stehen mehrere Schreibweisen zur Verfügung: Verwendung genau eines Bruchstrichs, Exponenten mit und ohne Potenzzeichen sowie Präfixe der Basis 10 von yocto bis yotta. Diese können optional mit einem Doppelpunkt abgetrennt werden. Ist eine Auflösung nicht eindeutig möglich, wird dieser zwingend erforderlich: <code>nmi</code>=Seemeilen, aber <code>n:mi</code>=Nano-Meilen </p> <p>Die Grundrechenarten sowie Wurzeln und Potenzen und einige weitere Funktionen beachten Einheiten physikalisch korrekt. Jede andere Funktion wird einen dimensionierten Wert immer so behandeln wie eine einfache Zahl mit dem Anzeigewert. <code>1_'km/h'</code> wird also wie 1 behandelt, obwohl der Grundwert in SI-Einheiten ungefähr <code>0.277 m/s</code> entsprechen würde. </p> <p>Der <code>_</code>-Operator ist als normaler Operator auch auf Variablen anwendbar, muss dann allerdings mit einem Leerzeichen abgetrennt werden. So kann man z.B. einfach Umrechnungen durchführen. </p> </div> <h2>Funktionen</h2> <div> <p>Funktionen sind in sogenannten Packages organisiert. Jedes dieser Packages stellt eine Einheit von Funktionen ähnlicher Kategorie dar. </p> <h3 id="package-core">Package <code>Core</code></h3> <p>Das Package stellt System-Funktionen zur Verfügung.</p> <ul> <li class="function" id="function-core-typeof"><a class="function-link" href="#function-core-typeof">#</a><code>Typeof(<i>Name</i>)</code><br><p> Ermittelt den Typen eines Ausdrucks </p> </li> <li class="function" id="function-core-undef"><a class="function-link" href="#function-core-undef">#</a><code>Undef(<i>Name</i>)</code><br><p> Entfernt eine Variable aus dem aktuellen Kontext </p> </li> <li class="function" id="function-core-new"><a class="function-link" href="#function-core-new">#</a><code>New()</code><br><code>New(<i>String</i>)</code><br><p> Erzeugt einen neuen (optional benannten) Kontext </p> </li> <li class="function" id="function-core-drop"><a class="function-link" href="#function-core-drop">#</a><code>Drop()</code><br><p> Löscht den aktuell obersten Kontext </p> </li> <li class="function" id="function-core-clear"><a class="function-link" href="#function-core-clear">#</a><code>Clear()</code><br><p> Leert die Ausgabe-Konsole </p> </li> <li class="function" id="function-core-pragma"><a class="function-link" href="#function-core-pragma">#</a><code>Pragma(<i>name</i>)</code><br><p> Gibt eine Konfigurationsvariable zurück oder Unassigned, falls diese nicht bekannt ist. </p><code>Pragma(<i>name</i>,<i>value</i>)</code><br><p> Setzt eine Konfigurationsvariable und gibt den neuen Wert zurück oder Unassigned, falls diese nicht bekannt ist. </p> </li> <li class="function" id="function-core-const"><a class="function-link" href="#function-core-const">#</a><code>Const(<i>name</i>)</code><br><p> Fragt den Wert einer Konstante ab </p> </li> <li class="function" id="function-core-constinfo"><a class="function-link" href="#function-core-constinfo">#</a><code>constinfo()</code><br><p> Listet verfügbare/bekannte Konstanten </p><code>constinfo(<i>name</i>)</code><br><p> Gibt Information über eine Konstante zurück </p> </li> <li class="function" id="function-core-hold"><a class="function-link" href="#function-core-hold">#</a><code>Hold(<i>Expr</i>)</code><br><p> Gibt die Expression <i>expr</i> unevaluiert zurück. </p> </li> <li class="function" id="function-core-eval"><a class="function-link" href="#function-core-eval">#</a><code>Eval(<i>Expr</i>)</code><br><p> Gibt die Expression <i>expr</i> evaluiert zurück. Gedacht zur Verwendung auf der rechten Seite von <a href="#function-symbolics-rule">Regeln</a>. </p> </li> <li class="function" id="function-core-absolutetime"><a class="function-link" href="#function-core-absolutetime">#</a><code>AbsoluteTime(<i>Expr</i>)</code><br><p> Gibt die Ausführungszeit in Sekunden sowie das Ergebnis der Auswertung von <i>Expr</i> zurück </p> </li> <li class="function" id="function-core-meminfo"><a class="function-link" href="#function-core-meminfo">#</a><code>MemInfo()</code><br><p> Gibt den aktuellen Status des Speichermanagers zurück, in der Form <code>{allocated,reserved}</code> </p> </li> </ul> <h3 id="package-trig">Package <code>Trig</code></h3> <p>Das Package stellt trigonometrische und hyperbolische Funktionen zur Verfügung.</p> <ul> <li class="function" id="function-trig-sin"><a class="function-link" href="#function-trig-sin">#</a><code>Sin(<i>number</i>)</code><br><p> Sinus </p> </li> <li class="function" id="function-trig-cos"><a class="function-link" href="#function-trig-cos">#</a><code>Cos(<i>number</i>)</code><br><p> Cosinus </p> </li> <li class="function" id="function-trig-tan"><a class="function-link" href="#function-trig-tan">#</a><code>Tan(<i>number</i>)</code><br><p> Tangens </p> </li> <li class="function" id="function-trig-arcsin"><a class="function-link" href="#function-trig-arcsin">#</a><code>ArcSin(<i>number</i>)</code><br><p> Inverse zu Sin </p> </li> <li class="function" id="function-trig-arccos"><a class="function-link" href="#function-trig-arccos">#</a><code>ArcCos(<i>number</i>)</code><br><p> Inverse zu Cos </p> </li> <li class="function" id="function-trig-arctan"><a class="function-link" href="#function-trig-arctan">#</a><code>ArcTan(<i>number</i>)</code><br><p> Inverse zu Tan </p><code>ArcTan(<i>Y</i>, <i>X</i>)</code><br><p> Delphi's <a href="http://docwiki.embarcadero.com/VCL/en/Math.ArcTan2">ArcTan2</a>: ArcTan im korrekten Quadranten </p> </li> <li class="function" id="function-trig-sinh"><a class="function-link" href="#function-trig-sinh">#</a><code>Sinh(<i>number</i>)</code><br><p> Sinus Hyperbolicus </p> </li> <li class="function" id="function-trig-cosh"><a class="function-link" href="#function-trig-cosh">#</a><code>Cosh(<i>number</i>)</code><br><p> Cosinus Hyperbolicus </p> </li> <li class="function" id="function-trig-tanh"><a class="function-link" href="#function-trig-tanh">#</a><code>Tanh(<i>number</i>)</code><br><p> Tangens Hyperbolicus </p> </li> <li class="function" id="function-trig-arsinh"><a class="function-link" href="#function-trig-arsinh">#</a><code>ArSinh(<i>number</i>)</code><br><p> Inverse zu SinH </p> </li> <li class="function" id="function-trig-arcosh"><a class="function-link" href="#function-trig-arcosh">#</a><code>ArCosh(<i>number</i>)</code><br><p> Inverse zu CosH </p> </li> <li class="function" id="function-trig-artanh"><a class="function-link" href="#function-trig-artanh">#</a><code>ArTanh(<i>number</i>)</code><br><p> Inverse zu TanH </p> </li> </ul> <h3 id="package-elementary">Package <code>Elementary</code></h3> <p>Das Package stellt grundlegende mathematische Funktionen zur Verfügung.</p> <ul> <li class="function" id="function-elementary-exp"><a class="function-link" href="#function-elementary-exp">#</a><code>Exp(<i>number</i>)</code><br><p> Exponential </p> </li> <li class="function" id="function-elementary-ln"><a class="function-link" href="#function-elementary-ln">#</a><code>Ln(<i>number</i>)</code><br><p> Logarithmus zur Basis e (natürlicher Logarithmus) </p> </li> <li class="function" id="function-elementary-lg"><a class="function-link" href="#function-elementary-lg">#</a><code>Lg(<i>number</i>)</code><br><p> Logarithmus zur Basis 10 (dekadischer Logarithmus) </p> </li> <li class="function" id="function-elementary-ld"><a class="function-link" href="#function-elementary-ld">#</a><code>Ld(<i>number</i>)</code><br><p> Logarithmus zur Basis 2 (dualer Logarithmus) </p> </li> <li class="function" id="function-elementary-loga"><a class="function-link" href="#function-elementary-loga">#</a><code>Loga(<i>base</i>, <i>number</i>)</code><br><p> Logarithmus zu beliebiger Basis </p> </li> <li class="function" id="function-elementary-sqrt"><a class="function-link" href="#function-elementary-sqrt">#</a><code>Sqrt(<i>number</i>)</code><br><p> Quadratwurzel </p> </li> <li class="function" id="function-elementary-nrt"><a class="function-link" href="#function-elementary-nrt">#</a><code>NRt(<i>base</i>, <i>number</i>)</code><br><p> N-te Wurzel </p> </li> <li class="function" id="function-elementary-random"><a class="function-link" href="#function-elementary-random">#</a><code>Random()</code><br><p> Zufallszahl aus 0 <= Random < 1 </p> </li> </ul> <h3 id="package-numerical">Package <code>Numerical</code></h3> <p>Das Package stellt Funktionen zum Umgang mit Zahlenwerten und Zahlsystemen zur Verfügung.</p> <ul> <li class="function" id="function-numerical-abs"><a class="function-link" href="#function-numerical-abs">#</a><code>Abs(<i>number</i>)</code><br><p> Betrag </p> </li> <li class="function" id="function-numerical-sign"><a class="function-link" href="#function-numerical-sign">#</a><code>Sign(<i>number</i>)</code><br><p> Vorzeichen der Zahl. <code>{-1|x<0, 0|x=0, 1|y>0}</code> </p> </li> <li class="function" id="function-numerical-step"><a class="function-link" href="#function-numerical-step">#</a><code>Step(<i>number</i>)</code><br><p> Heaviside'sche Sprungfunktion mit <code>H(0)=1</code>. <code>{0|x<0, 1|y>=0}</code> </p> </li> <li class="function" id="function-numerical-round"><a class="function-link" href="#function-numerical-round">#</a><code>Round(<i>number</i>)</code><br><code>Round(<i>number</i>, <i>digits</i>)</code><br><p> Rundet auf <i>digits</i> Stellen (Genauigkeit von 10<sup> <v>digits</v></sup>) oder ganze Zahlen. </p> </li> <li class="function" id="function-numerical-trunc"><a class="function-link" href="#function-numerical-trunc">#</a><code>Trunc(<i>number</i>)</code><br><p> Schneidet die Nachkommastellen von <i>number</i> ab, es wird gegen 0 gerundet. </p> </li> <li class="function" id="function-numerical-floor"><a class="function-link" href="#function-numerical-floor">#</a><code>Floor(<i>number</i>)</code><br><p> Rundet <i>number</i> auf die nächstkleinere ganze Zahl ab. </p> </li> <li class="function" id="function-numerical-ceil"><a class="function-link" href="#function-numerical-ceil">#</a><code>Ceil(<i>number</i>)</code><br><p> Rundet <i>number</i> auf die nächstgrößere ganze Zahl auf. </p> </li> <li class="function" id="function-numerical-fac"><a class="function-link" href="#function-numerical-fac">#</a><code>Fac(<i>number</i>)</code><br><p> Fakultät </p><span class="function-options">Optionen:</span><dl class="function-options"> <dt>approximate = *undefined*</dt> <dd> <p>Stirling-Approximation erzwingen, sonst nur für große Argumente</p> </dd> </dl> </li> <li class="function" id="function-numerical-binomial"><a class="function-link" href="#function-numerical-binomial">#</a><code>Binomial(<i>n</i>, <i>k</i>)</code><br><p> Binomialkoeffizient <code>( <v>n</v> über <v>k</v>) = <v>n</v>! / ( <v>k</v>!*( <v>n</v>- <v>k</v>)!)</code> </p> </li> <li class="function" id="function-numerical-permutations"><a class="function-link" href="#function-numerical-permutations">#</a><code>Permutations(<i>n</i>, <i>k</i>)</code><br><p> Anzahl der Permutationen der Länge <i>k</i> aus <i>n</i> Elementen <code>P(n,r) = n! / (n - r)!</code> </p> </li> <li class="function" id="function-numerical-itoa"><a class="function-link" href="#function-numerical-itoa">#</a><code>ItoA(<i>number</i>,<i>base</i>)</code><br><p> Konvertiert Ganzzahlen in String-Repräsentation in Basis </p> </li> <li class="function" id="function-numerical-atoi"><a class="function-link" href="#function-numerical-atoi">#</a><code>AtoI(<i>string</i>,<i>base</i>)</code><br><p> Konvertiert String-Repräsentation aus Basis in Zahl (nur Ganzzahlen) </p> </li> <li class="function" id="function-numerical-b"><a class="function-link" href="#function-numerical-b">#</a><code>b(<i>string</i> OR <i>number</i>)</code><br><p> Konvertiert aus/in String-Darstellung in Basis 2. </p> </li> <li class="function" id="function-numerical-h"><a class="function-link" href="#function-numerical-h">#</a><code>h(<i>string</i> OR <i>number</i>)</code><br><p> Konvertiert aus/in String-Darstellung in Basis 16. </p> </li> <li class="function" id="function-numerical-o"><a class="function-link" href="#function-numerical-o">#</a><code>o(<i>string</i> OR <i>number</i>)</code><br><p> Konvertiert aus/in String-Darstellung in Basis 8. </p> </li> <li class="function" id="function-numerical-exthex"><a class="function-link" href="#function-numerical-exthex">#</a><code>exthex(<i>string</i> OR <i>number</i>)</code><br><p> Konvertiert aus/in Speicher-Darstellung von Number (80-bit Extended) in Basis 16. </p> </li> <li class="function" id="function-numerical-gcd"><a class="function-link" href="#function-numerical-gcd">#</a><code>GCD(<i>a</i>, <i>b</i>)</code><br><p> Berechnet den größten gemeinsamen Teiler (ggT, greatest common divisor) der Ganzzahlen <i>a</i> und <i>b</i> </p> </li> <li class="function" id="function-numerical-lcm"><a class="function-link" href="#function-numerical-lcm">#</a><code>LCM(<i>a</i>, <i>b</i>)</code><br><p> Berechnet das kleinste gemeinse Vielfache (kgV, least common multiple) der Ganzzahlen <i>a</i> und <i>b</i> </p> </li> <li class="function" id="function-numerical-fraction"><a class="function-link" href="#function-numerical-fraction">#</a><code>Fraction(<i>number</i>)</code><br><p> Findet eine Bruchdarstellung für <i>number</i> und gibt diese als Liste zurück </p><span class="function-options">Optionen:</span><dl class="function-options"> <dt>precision = 1E-11</dt> <dd> <p>Erlaubte Abweichung in Prozent, höhere Genauigkeiten erfordern größere Nenner</p> </dd> <dt>mixed = *undefined*</dt> <dd> <p>Gemischten Bruch als <i>a+b/c</i> zurückgeben, sonst gewöhnlicher Bruch <i>a/b</i></p> </dd> </dl> </li> <li class="function" id="function-numerical-nd"><a class="function-link" href="#function-numerical-nd">#</a><code>ND(<i>expr</i>,<i>var</i>,<i>at</i>)</code><br><p> Numerische Ableitung der Funktion <code>expr(var)</code> an der Stelle <code>var=at</code> </p><span class="function-options">Optionen:</span><dl class="function-options"> <dt>Method = 'Direct'</dt> <dd> <p>Zu verwendende Methode. Immer zentrale Differenzenmethode, Koeffizienten einstellbar:</p> <table> <tr> <td class="option-value">'Direct'</td> <td>2 Punkte verwenden</td> </tr> <tr> <td class="option-value">'FivePointStencil'</td> <td>4 Punkte verwenden</td> </tr> <tr> <td class="option-value">'SixthOrder'</td> <td>6 Punkte verwenden</td> </tr> </table> </dd> </dl> </li> </ul> <h3 id="package-lists">Package <code>Lists</code></h3> <p>Das Package stellt Funktionen zur Listen-Verarbeitung zur Verfügung.</p> <ul> <li class="function" id="function-lists-l"><a class="function-link" href="#function-lists-l">#</a><code>L(<i>p1</i>, <i>p2</i>, <i>p3</i>, ...)</code><br><p> Erzeugt eine neue FixedList aus den Werten der Parameter </p> </li> <li class="function" id="function-lists-range"><a class="function-link" href="#function-lists-range">#</a><code>Range(<i>start</i>, <i>end</i>, <i>step</i>)</code><br><p> Erzeugt eine RangeList mit <i>start</i>>=<i>x</i>>=<i>end</i> mit Schrittweite <i>step</i> </p> </li> <li class="function" id="function-lists-merge"><a class="function-link" href="#function-lists-merge">#</a><code>Merge(<i>left</i>, <i>right</i>)</code><br><p>Verkettet zwei Listen zu einer neuen</p> </li> <li class="function" id="function-lists-splice"><a class="function-link" href="#function-lists-splice">#</a><code>Splice(<i>left</i>, <i>right</i>)</code><br><p>Kombiniert zwei gleichlange Listen elementweise zu einer neuen zweidimensionalen Liste. Für je ein Elementpaar wird ein Tupel <i>{l,r}</i> ausgegeben. </p> </li> <li class="function" id="function-lists-each"><a class="function-link" href="#function-lists-each">#</a><code>Each(<i>list</i>, <i>var</i>, <i>expr</i>)</code><br><p>Führt <i>expr</i> in einem neuen Kontext auf jedem Element von <i>list</i> als Variable <i>var</i> aus und gibt die Ergebnisse als eine neue Liste zurück </p> </li> <li class="function" id="function-lists-holdlist"><a class="function-link" href="#function-lists-holdlist">#</a><code>HoldList(<i>list</i>)</code><br><p>Kopiert jedes Element von <i>list</i> in Ergebnis (zum Umwandeln von RangeList in FixedList) </p> </li> <li class="function" id="function-lists-flatten"><a class="function-link" href="#function-lists-flatten">#</a><code>Flatten(<i>list</i>)</code><br><p>Entpackt eine Ebene verschachtelter Listen</p> </li> <li class="function" id="function-lists-aggregate"><a class="function-link" href="#function-lists-aggregate">#</a><code>Aggregate(<i>list</i>, <i>agg</i>, <i>init</i>, <i>var</i>, <i>expr</i>)</code><br><p>Wendet <i>expr</i> auf jedes Element in <i>list</i> als <i>var</i> an. Dabei kann <i>agg</i> (vorbelegt mit <i>init</i>) modifiziert werden. Rückgabewert ist der Wert von <i>agg</i> nach dem letzten Durchlauf </p> </li> <li class="function" id="function-lists-part"><a class="function-link" href="#function-lists-part">#</a><code>Part(<i>list</i>, <i>first</i>, <i>last</i>)</code><br><p>Erzeugt eine List aus den Unterelementen <i>first</i> bis <i>last</i>. Der erste Eintrag hat den Index 0. Werden negative Indizes angegeben, wird von hinten gezählt, -1 bezeichnet das letzte Element, -2 das vorletzte etc. </p> </li> <li class="function" id="function-lists-lget"><a class="function-link" href="#function-lists-lget">#</a><code>LGet(<i>list</i>, <i>item</i>)</code><br><p>Gibt das Element item aus <i>list</i> zurück. Zählung wie bei <a href="#function-lists-part">Part</a>. </p> </li> <li class="function" id="function-lists-count"><a class="function-link" href="#function-lists-count">#</a><code>Count(<i>list</i>)</code><br><p>Gibt die Anzahl der Elemente in <i>list</i> zurück. </p> </li> </ul> <h3 id="package-data">Package <code>Data</code></h3> <p>Das Package stellt Funktionen zum Arbeiten mit Dateien zur Verfügung.</p> <ul> <li class="function" id="function-data-pwd"><a class="function-link" href="#function-data-pwd">#</a><code>Pwd()</code><br><p> Zeigt das aktuelle Verzeichnis an </p> </li> <li class="function" id="function-data-cwd"><a class="function-link" href="#function-data-cwd">#</a><code>Cwd(<i>path</i>)</code><br><p> Wechselt in <i>path</i> (kann auch eine relative Angabe sein) </p> </li> <li class="function" id="function-data-glob"><a class="function-link" href="#function-data-glob">#</a><code>Glob(<i>filter</i>)</code><br><p> Erstellt eine Liste aller auf die Maske <i>filter</i> passenden Dateien im aktuellen Verzeichnis. <i>filter</i> kann auch ein Unterverzeichnis oder eine Absolutangabe beschreiben. </p> </li> <li class="function" id="function-data-import"><a class="function-link" href="#function-data-import">#</a><code>Import(<i>file[,options]</i>)</code><br><p> Importiert Daten aus einer Datei. </p><span class="function-options">Optionen:</span><dl class="function-options"> <dt>Format = *undefined*</dt> <dd> <p><a href="#function-data-importexportformats">Datenformat</a>. Wenn nicht angegeben, aus dem Dateinamen ermittelt. </p> </dd> </dl> </li> <li class="function" id="function-data-importstring"><a class="function-link" href="#function-data-importstring">#</a><code>ImportString(<i>string[,options]</i>)</code><br><p> Importiert Daten aus einem String. </p><span class="function-options">Optionen:</span><dl class="function-options"> <dt>Format = *undefined*</dt> <dd> <p><a href="#function-data-importexportformats">Datenformat</a>. Muss angegeben werden. </p> </dd> </dl> </li> <li class="function" id="function-data-export"><a class="function-link" href="#function-data-export">#</a><code>Export(<i>file, data[,options]</i>)</code><br><p> Exportiert Daten in eine Datei. </p><span class="function-options">Optionen:</span><dl class="function-options"> <dt>Format = *undefined*</dt> <dd> <p><a href="#function-data-importexportformats">Datenformat</a>. Wenn nicht angegeben, aus dem Dateinamen ermittelt. </p> </dd> </dl> </li> <li class="function" id="function-data-exportstring"><a class="function-link" href="#function-data-exportstring">#</a><code>ExportString(<i>data[,options]</i>)</code><br><p> Exportiert Daten in einen String. </p><span class="function-options">Optionen:</span><dl class="function-options"> <dt>Format = *undefined*</dt> <dd> <p><a href="#function-data-importexportformats">Datenformat</a>. Muss angegeben werden. </p> </dd> </dl> </li> <li class="function" id="function-data-csvsave"><a class="function-link" href="#function-data-csvsave">#</a><code>CsvSave(<i>file,list[,options]</i>)</code><br><p> Alias für <a href="#function-data-export">Export</a>(<i>file</i>, <i>list</i>, format='CSV', <i>options</i>) </p> </li> <li class="function" id="function-data-csvload"><a class="function-link" href="#function-data-csvload">#</a><code>CsvLoad(<i>file[,options]</i>)</code><br><p> Alias für <a href="#function-data-import">Import</a>(<i>file</i>, format='CSV', <i>options</i>) </p> </li> <li class="function" id="function-data-importexportformats"><a class="function-link" href="#function-data-importexportformats">#</a><p> Unterstützte werden folgende Datenformate. </p><code>String</code><br><p> Gesamte Datei als ein String. </p><code>Text (.txt, .log)</code><br><p> Datei Zeilenweise. </p><code>CSV (.csv)</code><br><p> CSV-Datei. </p><span class="function-options">Optionen:</span><dl class="function-options"> <dt>Delimiter = ';'</dt> <dd> <p>[I,E] Feldtrenner</p> </dd> <dt>QuoteChar = '"'</dt> <dd> <p>[I,E] Gruppierungszeichen</p> </dd> <dt>Decimal = '.'</dt> <dd> <p>[I,E] Dezimaltrenner</p> </dd> <dt>Skip = 0</dt> <dd> <p>[I] Anzahl zu überspringender Zeilen (z.b. Überschrift)</p> </dd> <dt>Count = Max</dt> <dd> <p>[I] Maximale Anzahl zu ladender Zeilen</p> </dd> <dt>IgnoreEmpty = *undefined*</dt> <dd> <p>[I] Leere Felder ignorieren (führt zum Gruppieren von Trennzeichen)</p> </dd> <dt>AlwaysQuote = *undefined*</dt> <dd> <p>[E] Quote immer verwenden, sonst nur wenn Metazeichen im Eintrag vorkommen</p> </dd> </dl> </li> <li class="function" id="function-data-source"><a class="function-link" href="#function-data-source">#</a><code>Source(<i>file</i>)</code><br><p> Lädt eine Datei und führt sie Zeilenweise aus. Tritt ein Fehler auf, wird die Ausführung beendet. Die Dateiendung .pi wird automatisch ergänzt, falls <i>file</i> nicht gefunden wird. </p> </li> <li class="function" id="function-data-table"><a class="function-link" href="#function-data-table">#</a><code>Table(<i>list</i>)</code><br><p> Stellt eine Liste (oder Liste von Listen) als Tabelle dar, gibt die Anzahl der Zeilen zurück. </p> </li> <li class="function" id="function-data-hexdump"><a class="function-link" href="#function-data-hexdump">#</a><code>HexDump(<i>string</i>)</code><br><p> Produziert einen Hexdump aus einem String, gibt den String zurück. </p> </li> <li class="function" id="function-data-bucket"><a class="function-link" href="#function-data-bucket">#</a><code>Bucket(<i>list</i>, <i>min</i>, <i>max</i>, <i>count</i>)</code><br><p> Zählt alle Werte in <i>min</i> < x < <i>max</i> in <i>count</i> Gruppen. Rückgabe: Liste von {Mittelwert, Anzahl} </p> </li> <li class="function" id="function-data-max"><a class="function-link" href="#function-data-max">#</a><code>Max(<i>list</i>)</code><br><p> Größter Wert einer Liste </p> </li> <li class="function" id="function-data-min"><a class="function-link" href="#function-data-min">#</a><code>Min(<i>list</i>)</code><br><p> Kleinster Wert einer Liste </p> </li> <li class="function" id="function-data-sortby"><a class="function-link" href="#function-data-sortby">#</a><code>SortBy(<i>list</i>, <i>var</i>, <i>expr</i>)</code><br><p> Sortiert <i>list</i> unter verwendung der Schlüssel, wie sie <i>expr</i> generiert. </p><span class="function-options">Optionen:</span><dl class="function-options"> <dt>Desc = *undefined*</dt> <dd> <p>Absteigend sortieren, sonst Aufsteigend</p> </dd> <dt>String = *undefined*</dt> <dd> <p>Als Text sortieren, sonst als Zahl</p> </dd> </dl> </li> <li class="function" id="function-data-numderive"><a class="function-link" href="#function-data-numderive">#</a><code>NumDerive(<i>list</i>)</code><br><p> Numerische Ableitung einer Liste von {X,Y}-Punkten. In der Mitte zwischen zwei X-Werten wird die Differenz nach dY/dY abgelegt. Die erzeugte Liste ist ein Element kürzer. </p> </li> <li class="function" id="function-data-smooth"><a class="function-link" href="#function-data-smooth">#</a><code>Smooth(<i>list</i>)</code><br><p> Glätten einer Liste von {X,Y}-Punkten. </p> </li> </ul> <h3 id="package-string">Package <code>String</code></h3> <p>Das Package stellt Funktionen zur Verarbeitung von Strings zur Verfügung.</p> <ul> <li class="function" id="function-string-insert"><a class="function-link" href="#function-string-insert">#</a><code>Insert(<i>string</i>, <i>substr</i>, <i>index</i>)</code><br><p> Fügt den Teilstring <i>substr</i> an Index <i>index</i> ein. </p> </li> <li class="function" id="function-string-delete"><a class="function-link" href="#function-string-delete">#</a><code>Delete(<i>string</i>, <i>index</i>)</code><br><code>Delete(<i>string</i>, <i>index</i>, <i>count</i>)</code><br><p> Löscht eins oder mehrere Zeichen <i>string</i>. </p> </li> <li class="function" id="function-string-substr"><a class="function-link" href="#function-string-substr">#</a><code>Substr(<i>string</i>, <i>index</i>, <i>count</i>)</code><br><p> Kopiert <i>count</i> Zeichen ab <i>index</i> aus <i>string</i>. </p> </li> <li class="function" id="function-string-split"><a class="function-link" href="#function-string-split">#</a><code>Split(<i>string</i>, <i>delimiter</i>)</code><br><p> Trennt den <i>string</i> am Trennzeichen <i>delimiter</i> und gibt eine String-Liste zurück. Wenn <i>delimiter</i> der Leerstring ist, wird nach jedem Zeichen getrennt. </p> </li> <li class="function" id="function-string-join"><a class="function-link" href="#function-string-join">#</a><code>Join(<i>strings</i>, <i>delimiter</i>)</code><br><p> Kombiniert die Liste <i>strings</i> mit dem Trennzeichen <i>delimiter</i> zu einem String. </p> </li> </ul> <h3 id="package-statistics">Package <code>Statistics</code></h3> <p>Das Package stellt Funktionen zu Statistischen Verteilungen zur Verfügung.</p> <ul> <li class="function" id="function-statistics-erf"><a class="function-link" href="#function-statistics-erf">#</a><code>Erf(<i>x</i>)</code><br><p> Gauß'sche Fehlerfunktion </p> </li> <li class="function" id="function-statistics-erfc"><a class="function-link" href="#function-statistics-erfc">#</a><code>ErfC(<i>x</i>)</code><br><p> Komplementäre Gauß'sche Fehlerfunktion (ErfC(x) = 1 - Erf(x)) </p> </li> <li class="function" id="function-statistics-normpdf"><a class="function-link" href="#function-statistics-normpdf">#</a><code>NormPDF(<i>x</i>, <i>mu</i>, <i>sigma</i>)</code><br><p> Wahrscheinlichkeitsdichte der Normalverteilung mit dem Erwartungswert <i>mu</i> und der Standardabweichung <i>sigma</i>. </p> </li> <li class="function" id="function-statistics-stdnormpdf"><a class="function-link" href="#function-statistics-stdnormpdf">#</a><code>StdNormPDF(<i>x</i>)</code><br><p> Wahrscheinlichkeitsdichte der Standardnormalverteilung. </p> </li> <li class="function" id="function-statistics-stdnormcdf"><a class="function-link" href="#function-statistics-stdnormcdf">#</a><code>StdNormCDF(<i>x</i>)</code><br><p> Verteilungsfunktion der Standardnormalverteilung. </p> </li> <li class="function" id="function-statistics-invstdnormcdf"><a class="function-link" href="#function-statistics-invstdnormcdf">#</a><code>InvStdNormCDF(<i>x</i>)</code><br><p> Inverse der Verteilungsfunktion der Standardnormalverteilung. </p> </li> <li class="function" id="function-statistics-stdnormrand"><a class="function-link" href="#function-statistics-stdnormrand">#</a><code>StdNormRand()</code><br><p> Liefert einen standardnormalverteilten Zufallswert. </p> </li> </ul> <h3 id="package-graph">Package <code>Graph</code></h3> <p>Das Package stellt Funktionen zum Erstellen und Anzeigen von Diagrammen und Plots zur Verfügung.<br> Alle <i>range</i>-Angaben sind Listen der 2 Grenzen: <code>range={min, max}</code><br> Alle Funktionen, die Plot-Objekte erstellen backen den aktuellen Kontext zum Zeitpunkt ihrer Ausführung. Spätere Änderungen werden nicht übernommen. Das kann man verwenden, um Funktionsscharen zu plotten </p> <ul> <li class="function" id="function-graph-plot"><a class="function-link" href="#function-graph-plot">#</a><code>Plot(<i>expr</i>,<i>var</i>,<i>range</i>[,options])</code><br><p> Plottet eine Expression in Variable <i>var</i> über <i>range</i> </p><span class="function-options">Optionen:</span><dl class="function-options"> <dt>Color = *random*</dt> <dd> <p>Linienfarbe, Angabe als TColor (clRed, clBlue etc) oder Hexadezimal '$bbggrr'</p> </dd> <dt>Size = 1</dt> <dd> <p>Linienbreite in Pixel</p> </dd> <dt>Caption = *auto*</dt> <dd> <p>Titel, sonst StringForm</p> </dd> </dl> </li> <li class="function" id="function-graph-histogram"><a class="function-link" href="#function-graph-histogram">#</a><code>Histogram(<i>list</i>[,options])</code><br><p> Plottet eine Liste von {Mittelwert,Anzahl}-Tupeln </p><span class="function-options">Optionen:</span><dl class="function-options"> <dt>Color = *random*</dt> <dd> <p>Linienfarbe, Angabe als TColor (clRed, clBlue etc) oder Hexadezimal '$bbggrr'</p> </dd> <dt>Size = 1</dt> <dd> <p>Balkenbreite, automatisch schmalster Abstand zwischen zwei Mittelwerten</p> </dd> <dt>Caption = *auto*</dt> <dd> <p>Titel, sonst Anzahl der Elemente</p> </dd> </dl> </li> <li class="function" id="function-graph-xyplot"><a class="function-link" href="#function-graph-xyplot">#</a><code>XYPlot(<i>list</i>[,options])</code><br><p> Plottet eine Liste von {X,Y}-Punkten </p><span class="function-options">Optionen:</span><dl class="function-options"> <dt>Color = *random*</dt> <dd> <p>Linienfarbe, Angabe als TColor (clRed, clBlue etc) oder Hexadezimal '$bbggrr'</p> </dd> <dt>Size = 1</dt> <dd> <p>Durchmesser der Punktmarkierungen</p> </dd> <dt>Points = 'Cross'</dt> <dd> <p>Art der Punktmarker</p> <table> <tr> <td class="option-value">'None'</td> <td>Keine Punkte</td> </tr> <tr> <td class="option-value">'Dot'</td> <td>Punkt</td> </tr> <tr> <td class="option-value">'Cross'</td> <td>Kreuz (X)</td> </tr> <tr> <td class="option-value">'Plus'</td> <td>Kreuz (+)</td> </tr> <tr> <td class="option-value">'Circle'</td> <td>Kreis</td> </tr> <tr> <td class="option-value">'Square'</td> <td>Quadrat</td> </tr> </table> </dd> <dt>Lines = 'None'</dt> <dd> <p>Art der Verbindungslinien</p> <table> <tr> <td class="option-value">'None'</td> <td>Keine Punkte</td> </tr> <tr> <td class="option-value">'Straight'</td> <td>Direkt</td> </tr> <tr> <td class="option-value">'HoldX'</td> <td>Konstantes X bis Sprung auf Y (verbunden)</td> </tr> <tr> <td class="option-value">'HoldY'</td> <td>Konstantes Y bis Sprung auf X (verbunden)</td> </tr> <tr> <td class="option-value">'StepX'</td> <td>Konstantes X bis Sprung auf Y (offen)</td> </tr> <tr> <td class="option-value">'StepY'</td> <td>Konstantes Y bis Sprung auf X (offen)</td> </tr> </table> </dd> <dt>Caption = *auto*</dt> <dd> <p>Titel, sonst Anzahl der Elemente</p> </dd> </dl> </li> <li class="function" id="function-graph-show"><a class="function-link" href="#function-graph-show">#</a><code>Show(<i>plots</i>[,options])</code><br><p> Stellt mehrere Plot-Objekte dar. <i>plots</i> muss eine Liste von Plot-Objekten oder ein Plot-Objekt sein.<br> Eine Legende mit der Zuordnung der Farben wird bei gedrückter Maustaste angezeigt. </p><span class="function-options">Optionen:</span><dl class="function-options"> <dt>XRange = *auto*</dt> <dd> <p>X-Bereich. Automatisch so, dass alle plots dargestellt werden können</p> </dd> <dt>YRange = *auto*</dt> <dd> <p>Y-Bereich. Automatisch nach Achsen-Modus: 0.1..10 für logarithmisch und -5..5 für linear </p> </dd> <dt>Axes = 'linlin'</dt> <dd> <p>Modus der X und Y-Achsen. Paare von 'Lin' oder 'Log'</p> </dd> <dt>Title = *kein*</dt> <dd> <p>Diagrammtitel</p> </dd> <dt>XLabel = *kein*</dt> <dd> <p>Beschriftung der X-Achse</p> </dd> <dt>YLabel = *kein*</dt> <dd> <p>Beschriftung der Y-Achse</p> </dd> </dl> </li> </ul> <h3 id="package-symbolics">Package <code>Symbolics</code></h3> <p>Das Package implementiert Funktionen zur symbolischen Manipulation von Ausdrücken. Achtung: Experimentell! </p> <ul> <li class="function" id="function-symbolics-clone"><a class="function-link" href="#function-symbolics-clone">#</a><code>Clone(<i>expr</i>)</code><br><p> Erstellt eine unabhängig veränderbare Kopie des Ausdrucksbaums von <i>expr</i> </p> </li> <li class="function" id="function-symbolics-subs"><a class="function-link" href="#function-symbolics-subs">#</a><code>Subs(<i>expr</i>, {<i>rules</i>})</code><br><p> Wendet alle Zuweisungen in <i>rules</i> permanent auf <i>expr</i> an und gibt den neuen Ausdruck zurück. </p> </li> <li class="function" id="function-symbolics-pattern"><a class="function-link" href="#function-symbolics-pattern">#</a><code>Pattern(<i>expr</i>, {<i>variables</i>})</code><br><p> Erzeugt ein Muster, welches auf Ausdrücke passt die wie <i>expr</i> mit den freien Variablen <i>variables</i> aussehen. </p> </li> <li class="function" id="function-symbolics-rule"><a class="function-link" href="#function-symbolics-rule">#</a><code>Rule(<i>expr</i>, {<i>variables</i>}, <i>target</i>)</code><br><p> Erzeugt eine Regel, welche Ausdrücke die wie <i>expr</i> mit den freien Variablen <i>variables</i> aussehen in <i>target</i> transformieren kann. </p> </li> <li class="function" id="function-symbolics-match"><a class="function-link" href="#function-symbolics-match">#</a><code>Match(<i>expr</i>, <i>pattern</i>)</code><br><p> Prüft ob <i>pattern</i> auf <i>expr</i> zutrifft und gibt eine Liste der möglichen Variablenzuordnungen oder NULL zurück. </p> </li> <li class="function" id="function-symbolics-replace"><a class="function-link" href="#function-symbolics-replace">#</a><code>Replace(<i>expr</i>, {<i>patterns</i>})</code><br><code>Replace(<i>expr</i>, <i>patterns</i>)</code><br><p> Wendet die erste passende Regel aus <i>patterns</i> auf die oberste Ebene von <i>expr</i> an und gibt das Ergebnis oder den unveränderten Ausdruck zurück. </p> </li> <li class="function" id="function-symbolics-replaceall"><a class="function-link" href="#function-symbolics-replaceall">#</a><code>ReplaceAll(<i>expr</i>, {<i>patterns</i>})</code><br><code>ReplaceAll(<i>expr</i>, <i>patterns</i>)</code><br><p> Wendet die erste passende Regel aus <i>patterns</i> auf jeder Ebene von <i>expr</i> rekursiv an. </p> </li> <li class="function" id="function-symbolics-diff"><a class="function-link" href="#function-symbolics-diff">#</a><code>Diff(<i>expr</i>, <i>var</i>)</code><br><p> Differenziert <i>expr</i> symbolisch nach <i>var</i>. </p> </li> </ul> <h3 id="package-dimensions">Package <code>Dimensions</code></h3> <p> Das Package bietet Funktionen zum erzeugen von Einheiten, mit denen dann gerechnet werden kann.<br> Es existiert eine Bibliothek von vordefinierten Einheiten, die mit SI-Prefixen verbunden werden können. Dabei kann sowohl die "natürliche" Syntax ls auch die getrennte Syntax verwendet werden (<code>km = k:m = m * 1E3</code>). Ist eine Prefix/Einheit-Kombination nicht eindeutig, muss die getrennte Syntax angewendet werden. </p> <ul> <li class="function" id="function-dimensions-unit"><a class="function-link" href="#function-dimensions-unit">#</a><code>Unit(<i>val</i>, <i>unit</i>)</code><br><p> Bildet aus einem Zahlenwert und einer String-Repräsentation der Einheit einen dimensionierten Wert. Ist <i>val</i> bereits ein dimensionierter Wert, verhält sich Unit wie <a href="#function-dimensions-convert">Convert</a>. </p> </li> <li class="function" id="function-dimensions-convert"><a class="function-link" href="#function-dimensions-convert">#</a><code>Convert(<i>val</i>, <i>unit</i>)</code><br><p> Konvertiert einen dimensionierten Wert in eine andere Einheit der gleichen Dimension. </p> </li> <li class="function" id="function-dimensions-express"><a class="function-link" href="#function-dimensions-express">#</a><code>Express(<i>val</i>, <i>unit</i>)</code><br><code>Express(<i>val</i>, {<i>unit</i>, unit...})</code><br><p> Stellt einen Wert in einer minimalen Kombination von Einheiten dar. Dabei können bestimmte Einheiten als "zu verwenden" vorgegeben werden. Dimensionsfremde Vorgaben werden u.U. ignoriert. </p><span class="function-options">Optionen:</span><dl class="function-options"> <dt>AcceptSameDimensions = *undefined*</dt> <dd> <p>Auch Einheitenkombinationen verwenden, die die gleiche Dimension darstellen. Selten sinnvoll. </p> </dd> </dl> </li> </ul> </div> <h2>License</h2> <div> <pre xml:space="preserve">This license applies to everything in this package, except where otherwise noted. Parts taken from other authors may be subject to their own licenses. This project is available under a dual-license model, applying either (1) or (2): 1. Non-Commercial and Evaluation Use: This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this package, You can obtain one at http://mozilla.org/MPL/2.0/ If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Commercial Use: A special permission is required, please contact us for details.</pre> </div> </body> </html>