Benutzerdefinierte Anpassungsfunktionen
UserDef-FitFunc
In Origin können Sie neben den Standardanpassungsfunktionen auch Ihre eigenen Fitfunktionen definieren. Dazu nutzen Sie diese Hilfsmittel:
-
App Simple Fit
- Die App Simple Fit wird mit Origin vorinstalliert und kann einfach über die App-Galerie bei aktivem Diagrammfenster aufgerufen werden. Die App bietet eine sehr bequeme Methode, einfache Funktionen mit dem Ausdruck y = f(x) anzupassen. Sie müssen nur Ihre Formel eingeben (oder eine existierende Funktion auswählen), die Initialisierungswerte festlegen und können dann sofort die Anpassungsberichte erzeugen.
- Fitfunktionen verwalten
- erstellen einbinden
Diese Seite erläutert allgemein, wie der Dialog Fitfunktionen erstellen verwendet wird, ein benutzerfreundlicher Assistent zum Erstellen von benutzerdefinierten Anpassungsfunktionen. Der Assistent enthält 8 Seiten: Ziel, Name und Typ, Variablen und Parameter, Ausdrucksfunktion (Funktionskörper), Parameterinitialisierungscode, Grenzen und allgemeine lineare Nebenbedingungen, Abgeleitete Parameter und Skript vor und nach Anpassung. Für die ersten 4 Seiten müssen Sie einige Einstellungen vornehmen, ansonsten können Sie nicht zur nächsten Seite gehen. Nachdem Sie die Einstellungen auf der vierten Seite festgelegt haben, der Seite Ausdrucksfunktion, können Sie direkt den Prozess der Funktionserstellung fertigstellen. Oder Sie können damit fortfahren, die Funktionen mit den letzten 4 Seiten genauer anzugeben.
Der Anpassungsfunktionsbuilder ist ein Assistent mit sehr hilfreichen Hinweisen und Beispielen im linken Bedienfeld, die auf jeder Seite zu finden sind und die Verwendung sehr einfach machen. Wenn Sie wissen, was Sie auf jeder Seite des Assistenten machen können, ist es für Sie ein Leichtes, eine Anpassungsfunktion mit ihm zu erstellen. Auf der linken Seite werden allgemeine Schritte zum Erstellen einer benutzerdefinierten Anpassungsfunktion erläutert. Außerdem wird Ihnen gezeigt, was auf der jeweiligen Seite getan werden kann. Sie können auch hier ein Tutorial nachlesen, das Ihnen die Vorgehensweise Schritt für Schritt erklärt. Bitte beachten Sie, dass Origin für jede hinzugefügte Funktion eine entsprechende .FDF-Datei erstellt, die im Ordner \FitFunc Ihres Origin-Anwenderdateiordners gespeichert wird. Sobald die Funktion erstellt wurde, kann sie in dem Dialogfeld der Nichtlinearen Anpassung verwendet werden.
Allgemeine Schritte zum Erstellen einer neuen Anpassungsfunktion
Im Folgenden sind die allgemeinen Schritte zum Erstellen einer Anpassungsfunktion erstellen. Sie können auch hier ein Tutorial nachlesen, das Ihnen die Vorgehensweise Schritt für Schritt erklärt.
- Öffnen Sie Fitfunktionen erstellen und wählen Sie die Option Eine neue Funktion erstellen auf der ersten Seite - die Seite Ziel. Klicken Sie auf die Schaltfläche Weiter, um zur Seite Name und Typ zu gelangen.
- Wählen und erstellen Sie auf der Seite Name und Typ eine Kategorie für die neue Funktion und geben Sie den Namen Ihrer Funktion in das Bearbeitungsfeld Funktionsname ein. Sie können optional Kommentare in das Bearbeitungsfeld Beschreibung einfügen. Sie müssen auch einen geeigneten Funktionstyp entsprechend der realen Situation wählen. Klicken Sie auf die Schaltfläche Weiter, um zur Seite Variablen und Parameter zu gelangen.
|
Wenn Sie beabsichtigen, eine externe DLL-basierte Funktion zu erstellen, lesen Sie bitte Externe DLLs verwenden sowie die Dokumentation, die in FittingWithExternalDLL.opx eingebunden ist.
|
- Auf der Seite Variablen und Parameter müssen Sie die Namen für die Unabhängigen Variablen, die Abhängigen Variablen und die Parameter festlegen. Sie können optional auswählen, auf dieser Seite die Abgeleiteten Parameter und Konstanten zu definieren. Wenn Sie Ihre Funktion zum Anpassen von Peaks im Hilfsmittel Peaks analysieren oder von Wiederholungen im Hilfsmittel NLFit verwenden möchten, aktivieren Sie das Kontrollkästchen Peakfunktion. Klicken Sie auf die Schaltfläche Weiter, um zur Seite Ausdrucksfunktion zu gelangen.
- Sie können auf der Seite Ausdrucksfunktion manuell die Initialisierungswerte für die Parameter und Konstanten auf der Registerkarte Parameter und Konstanten festlegen. Wenn Sie auf der vorhergehenden Seite die Peakfunktion aktiviert haben, müssen Sie die Peakattribute auf der Registerkarte Parameter wählen. Außerdem müssen Sie den Funktionskörper in das Bearbeitungsfeld Funktionskörper eingeben. Wenn Sie Origin C als Funktionstyp auf der Seite Name und Typ ausgewählt haben, kann es bequemer sein, für die Definition Ihrer Funktion den Arbeitsbereich des Code Builders zu verwenden. Nachdem Sie die Einstellungen auf dieser Seite vorgenommen haben, können Sie direkt auf die Schaltfläche Fertigstellen klicken, um die Erstellung der Funktion abzuschließen. Oder Sie können direkt auf die Schaltfläche Weiter klicken, um auf den linken Seiten des Assistenten weitere Einstellungen vorzunehmen.
- Die letzten vier Seiten Parameterinitialisierungscode, Grenzen und allgemeine lineare Nebenbedingungen, Abgeleitete Parameter und Skript vor oder nach Anpassung sind optionale Seiten, d.h., Sie können wählen, ob Sie in einer von Ihnen Einstellungen vornehmen möchten oder direkt auf Weiter/Fertigstellen klicken und sie ignorieren.
- Nachdem Sie Einstellungen auf den Seiten durchgeführt haben, können Sie auf die Schaltfläche Fertigstellen klicken und die Funktion speichern
Dialog Fitfunktionen erstellen öffnen
Der Dialog Fitfunktionen erstellen kann folgendermaßen geöffnet werden:
- Wählen Sie Hilfsmittel: Fitfunktion erstellen oder drücken Sie auf F8.
- Klicken Sie auf die Schaltfläche Builder im Dialog Fitfunktionen verwalten.
- Klicken Sie auf die Schaltfläche Neue Fitfunktion erstellen im Dialog NLFit.
Schritte auf der Seite Ziel
Die Seite Ziel ist die erste Seite des Assistenten, auf der Sie ein Ziel auswählen können: Eine neue Funktion erstellen oder Eine benutzerdefinierte Funktion bearbeiten. Auf dieser Seite sollten Sie Eine neue Funktion erstellen wählen, wenn Sie eine benutzerdefinierte Funktion erstellen möchten. Weitere Einzelheiten zu den Einstellungen auf dieser Seite finden Sie unter Die Seite Ziel.
Schritte auf der Seite Name und Typ
Die Seite Name und Typ ist die zweite Seite, auf der Sie eine Funktionskategorie auswählen/erstellen, der Funktion einen Namen geben oder einen Funktionstyp auswählen können. Weitere Einzelheiten zu den Einstellungen auf dieser Seite finden Sie unter Die Seite Name und Typ. Sie müssen dabei auf die folgenden zwei Einstellungen achten.
Eine Funktionskategorie erstellen
Um eine Kategorie zu erstellen, müssen Sie:
- Auf die Schaltfläche Neu klicken, die sich neben dem Bearbeitungsfeld Eine Kategorie auswählen oder erstellen befindet.
- Geben Sie einen Kategorienamen in das Feld Name ein.
- Klicken Sie dann auf die Schaltfläche OK, um ihn zu speichern.
Hinweis: Ab Origin 2018 werden diese Kategorieinformationen in der FDF-Datei gespeichert. Sie können die FDF-Datei mit ihren Freunden teilen. Wenn diese die FDF-Datei per Drag&Drop in ihr jeweiliges Origin gezogen haben, um diese Funktion zu installieren, wird sie in die gleiche Kategorie wie bei Ihnen kopiert.
Bei früheren Versionen wird der Dialog Kategorie zum Hinzufügen der Funktion auswählen geöffnet, mit dem Sie die Kategorie zum Hinzufügen dieser neuen Funktion festlegen können, da die Informationen der Funktionskategorie nicht mit der FDF-Datei gespeichert werden, wenn Sie die Funktionen per Drag&Drop installieren.
|
Einen Funktionstyp wählen
Sie müssen einen geeigneten Funktionstypen aus der Gruppe Funktionstyp wählen. Die folgende Tabelle führt die Unterschiede zwischen ihnen auf.
Funktionsform |
Beispiel |
Kommentare |
LabTalk-Ausdruck |
- a + b * exp( -x^c / d )
|
Wählen Sie diese Option für einfache Anpassungsfunktionen, die nur über eine abhängige Variable verfügen. Der Funktionskörper ist auf einen Ausdruck beschränkt, und Sie müssen nur die rechte Seite der Gleichung eingeben. Diese Option bietet eine höhere Geschwindigkeit als Origin C. |
Python-Funktion (Skalar) |
- y = py.pyline(x, a, b);
|
Wählen Sie diese Option nur zum Anpassen von kleineren Datensätzen, das sie langsamer ist als die Python-Funktion (Vektor). Beachten Sie, dass Sie dem Funktionsnamen das Präfix "py." voranstellen müssen, wenn Sie den Funktionskörper erstellen. |
Python-Funktion (Vektor) |
- y=pyGaussVectorEq(x,y0,xc,A,w);
|
Wählen Sie diese Option zum Anpassen von größeren Datensätzen. Funktionen erhalten einen Array (in Form einer Liste) der unabhängigen Werte für jede unabhängige Variable während eines Abrufs und geben einen Array (in Form einer Liste) für jede abhängige Variable aus. Diese Option verwendet keine LabTalk-Verarbeitung und sollte daher relativ schnell sein. |
LabTalk-Gleichungen |
- temp = 10;
- y1 = A + exp( (x1 - xc) / temp^2 );
- y2 = A + temp / (x2 - xc)^2;
|
Wählen Sie diese Option, wenn Sie mehrere Zeilen brauchen oder über mehr als eine abhängige Variable verfügen. Diese Option unterstützt Kontrollstrukturen wie Schleifen oder if-else-Anweisungen nicht. Sie können jedoch den ternären Operator verwenden. Diese Option bietet eine höhere Geschwindigkeit als Origin C. |
Origin C |
-
if ( x < -PI )
- y = y0 + exp( -x-a*PI );
-
else if ( x > PI )
- y = y0 + exp( x-a*PI );
-
else
- y = cos(x);
|
Diese Option ist langsamer als Gleichungen. Wählen Sie diese Option, wenn Ihre Anpassungsfunktion Schleifen oder Kontrollstrukturen benötigt, die nicht von dem ternären Operator ersetzt werden können. Beachten Sie, dass Sie sich streng an die C-Syntax halten müssen: Bei Parametern muss die Groß- und Kleinschreibung beachtet werden, und die Division durch eine ganze Zahl unterscheidet sich von der Division durch ein "double". |
LabTalk-Skript |
- range rr = %C;
- int b = %(rr[P1]$);
- y = b + a*x;
|
Diese Option ist viel langsamer als Gleichungen oder Origin C. Wählen Sie diese Option, wenn Sie Kontrollstrukturen brauchen oder nicht mit der C-Sprache vertraut sind. |
Externe DLL-basierte Funktion |
|
Wählen Sie diese Option, um eine Anpassungsfunktion mit Hilfe einer externen DLL zu definieren. Mit einer externen DLL kann die Anpassungszeit signifikant verbessert werden. Weitere Einzelheiten zu diesem Typ finden Sie unter dem Thema Externe DLL verwenden. |
Hinweis: Wenn Sie Origin C Fit-Funktionen erstellen, ist es eine gute Methode, den folgenden Ausdruck vor Ihrem Code zu verwenden:
#pragma numlittype(push, TRUE)
Dann behandelt Origin ganze Zahlen wie 3 als Gleitkommazahl 3,0. Dies ist sehr nützlich, wenn Sie andere Funktionsformen in Origin konvertieren. In LabTalk ist 3/2 = 1,5, während es in Standard C 1 ist. Der Ausdruck #pragma hilft, inkonsistente Ergebnisse zu vermeiden, wenn Funktionsformen konvertiert werden.
|
Schritte auf der Seite Variablen und Parameter
Die Seite Variablen und Parameter ist die dritte Seite, auf der Sie unabhängige Variablen, abhängige Variablen, Parameter (einschließlich den abgeleiteten Parametern) und Konstanten definieren können. Weitere Einzelheiten zu den Einstellungen auf dieser Seite finden Sie unter Die Seite Variablen und Parameter.
Hinweis: Wenn Sie Ihre Funktion zum Anpassen von Peaks im Peaks analysieren oder von Wiederholungen im NLFit verwenden möchten, müssen Sie das Kontrollkästchen Peakfunktion auf dieser Seite aktivieren.
Parameter für Peakfunktionen haben spezielle Peakattribute, die auf der nächsten Seite festgelegt werden müssen. Der erste Parameter in der Parameterliste muss als "y0" bezeichnet werden und sollte das Peakattribut "Versatz/Basislinie" zugeordnet bekommen. Abgesehen von "y0" müssen Sie mindestens drei weitere Parameter definieren und das Peakattribut auf "Zentrum", "Breite" und "Amplitude/Fläche" setzen. Im Folgenden sehen Sie ein Beispiel für eine Peakanpassungsfunktion:
- y = y0 + (2*A/PI)(w/(4*(x-xc)^2 + w^2))
|
Schritte auf der Seite Ausdrucksfunktion (Funktionskörper)
Die Seite Ausdrucksfunktion ist die vierte Seite, auf der Sie den Funktionskörper eingeben und einige grundlegende Einstellungen für die Parameter wie Initialisierungswerte, feste Parameter etc. vornehmen können. Bitte beachten Sie, wenn Sie eine Peakanpassungsfunktion definieren möchten, dass Sie spezielle Peakattribute für die Parameter auf dieser Seite wählen können. Außerdem können Sie die Anpassungsfunktion auf dieser Seite überprüfen. Weitere Einzelheiten zu den Einstellungen auf dieser Seite finden Sie unter Die Seite Ausdrucksfunktion.
Funktionskörper eingeben
Es gibt 5 Funktionstypen, die auf der Seite Name und Typ eingeführt werden und von denen jeder seine eigenen Funktionskörperformate besitzt. Um sicherzustellen, dass die Anpassungsfunktion korrekt geschrieben werden konnte, müssen Sie den Anweisungen auf der Seite Name und Typ folgen oder sich an den Hinweisen links vom Feld des Funktionskörpers orientieren.
Hinweis: Anwender können nlf_FuncName verwenden, um eine standardmäßige Anpassungsfunktion beim Erstellen einer neuen zu verwenden. Definieren Sie eine Funktion zum Beispiel folgendermaßen:
- y1 = nlf_Expdec1(x, y01, A11, t1);
Wobei nlf_Expdec1 die Standardfunktion ExpDec1 bezeichnet.
|
Die Funktion im Code-Builder bearbeiten
Sie können Ihren Code im Code Builder bearbeiten, wenn Origin C auf der Seite Name und Typ ausgewählt wurde. Sie können auf die Schaltfläche klicken, die sich in der oberen rechten Ecke des Bearbeitungsfelds Funktionskörper befindet, eine besondere Instanz des Code Builder-Arbeitsbereichs öffnet sich und dieses Fenster wird als _nlffunctionName.fit bezeichnet (im folgenden Screenshot hat das Fenster den Namen _nlfAsymmetricGaussian.fit). Danach können Sie den Funktionskörper in diesem Fenster bearbeiten.
Die ersten Zeilen enthalten #include-Anweisungen, die auf Headerdateien verweisen, die wiederum zum Kompilieren Ihrer Anpassungsfunktion benötigt werden. In unserem Beispiel beginnt die Funktionsdefinition mit der Anweisung:
void _nlsfAsymmetricGaussian
Zu Beginn der Funktionsdefinition werden die Parameter sowie die unabhängigen und abhängigen Variablen deklariert. Im Anschluss an diese Deklarationen sehen Sie ein Bearbeitungsfeld - die weiß hervorgehobene Fläche - das für die Eingabe Ihrer Funktionsdefinition reserviert ist.
Die oben stehende Abbildung zeigt die Definitionseingabe für die asymmetrische Gaussian-Funktion. Beachten Sie, dass die Funktionsdefinition mit der Syntax der Programmiersprache C kompatibel sein muss. So kennen z.B. die Parameter und alle Variablentypen Fallunterscheidung. Variablen für Zwischenwerte – wie B in diesem Beispiel – müssen zuerst mit Hilfe des folgenden Befehls deklariert werden:
double B;
Diese Deklaration muss zuerst erfolgen, bevor die Variable in der Funktionsdefinition verwendet werden kann.
Beachten Sie, dass die Funktion vom Typ void ist, was darauf hinweist, dass keine Werte von der Funktion zurückgegeben werden. Stattdessen wird der Wert der abhängigen Variablen innerhalb des Funktionscodes festgelegt. In unserem Beispiel wird der abhängigen Variablen y ein Wert zugeordnet, der davon abhängt, ob x kleiner oder größer als der Schwerpunktsparameter xc ist.
Sobald Sie die Funktion definiert haben, sollten Sie sich vergewissern, dass Ihre Syntax korrekt ist. Um dies zu testen, klicken Sie auf die Schaltfläche Kompilieren im oberen Bereich des Code-Builders. Sollten während des Kompilierungsvorgangs Fehler auftreten, so werden diese im Ausgabefenster des Code-Builders im unteren Arbeitsbereich angezeigt. Dort erscheint auch eine entsprechende Meldung, wenn Ihre Datei erfolgreich kompiliert wurde.
Sobald die Funktion definiert und kompiliert wurde, können Sie zum Dialogfeld des Funktionsmanagers zurückkehren, indem Sie auf die Schaltfläche Zurück zu NLSF oben im Fenster klicken. Dadurch wird das spezielle Fenster des Code Builders geschlossen.
Die Funktion prüfen
Unten auf der Seite Funktionskörper finden Sie eine Gruppe von Bedienelementen, die so genannte Schnellprüfung, die Ihnen dabei hilft, die Gültigkeit der Funktion zu überprüfen. Zuerst geben Sie die gewünschten Werte für die Parameter in der Spalte Initialisierungswert auf der Registerkarte Parameter dieser Seite ein und dann die Werte für die unabhängigen Variablen in der Gruppe Schnellprüfung. Klicken Sie dann auf die Schaltfläche , um sich den Ausgabewert der abhängigen Variablen anzeigen zu lassen. Wenn in Ihrem Funktionskörper Fehler auftreten oder Sie ungeeignete Eingabewerte für Parameter oder Variablen festgelegt haben, wird ein fehlender Wert zusammen mit einer entsprechenden Fehlernachricht in dem Ausgabefeld angezeigt.
Schritte auf der Seite Parameterinitialisierungscode
Die Seite Parameterinitialisierungscode ist die fünfte Seite, auf der Sie die Codes eingeben, die ausgeführt werden, um Initialisierungswerte für Anpassungsfunktionsparameter zu berechnen. Diese Seite ist optional, d.h., Sie können direkt auf Weiter klicken, um zu der nächsten Seite zu gelangen, auf der weitere Einstellungen vorgenommen werden können. Weitere Einzelheiten zu den Einstellungen auf dieser Seite finden Sie unter Die Seite Parameterinitialisierungscode.
Die Iterationsmethode, die bei nichtlinearen Anpassungen verwendet wird, erfordert, dass Initialisierungswerte für alle Parameter bereitgestellt werden. Gute Initialisierungswerte haben eine schnelle und zuverlässige Konvergenz der Modelle/Daten zur Folge. Es gibt zwei Möglichkeiten, wie Sie die Parameterinitialisierung bei der Definition einer neuen Funktion bearbeiten können:
- Weisen Sie feste Initialisierungswerte auf der Registerkarte Parameter auf der Seite Ausdrucksfunktion zu.
- Geben Sie den Initialisierungscode ein, der die Initialisierungswerte schätzt, in den Initialisierungscode auf der Seite Parameterinitialisierungscode ein.
Bitte lesen Sie den Abschnitt Parameterinitialisierung zum Initialisieren von Parameterwerten. Beachten Sie, dass das Definieren von Initialisierungswerten oder -codes für die Definition der Anpassungsfunktion nicht erforderlich ist. Wenn die Parameterinitialisierung jedoch nicht von der Anpassungsfunktionsdatei verarbeitet wird, müssen sie bei Durchführung des Anpassens mit der Funktion im Dialogfeld NLFit manuell initialisiert werden.
Schritte auf der Seite Grenzen und allgemeine lineare Nebenbedingungen
Die Seite Grenzen und allgemeine lineare Nebenbedingungen ist die sechste Seite, auf der Sie die Grenzen und linearen Nebenbedingungen für die Anpassungsfunktionsparameter eingeben. Diese Seite ist optional, d.h., Sie können direkt auf Weiter klicken, um zu der nächsten Seite zu gelangen, auf der weitere Einstellungen vorgenommen werden können. Weitere Einzelheiten zu den Einstellungen auf dieser Seite finden Sie unter Die Seite Grenzen und allgemeine lineare Nebenbedingungen.
Schritte auf der Seite Abgeleitete Parameter
Die Seite Abgeleitete Parameter ist die siebte Seite, auf der Sie die abgeleiteten Parameter definieren können. Diese Seite ist optional, d.h., Sie können direkt auf Weiter klicken, um zu der nächsten Seite zu gelangen, auf der weitere Einstellungen vorgenommen werden können. Weitere Einzelheiten zu den Einstellungen auf dieser Seite finden Sie unter Die Seite Abgeleitete Parameter.
Schritte auf der Seite Skript vor oder nach Anpassung
Die Seite Abgeleitete Parameter ist die achte Seite und gleichzeitig die letzte Seite, auf der Sie das LabTalk-Skript eingeben können, das vor und/oder nach der Anpassung ausgeführt wird. Bitte beachten Sie, dass diese Seite optional ist, so dass Sie auch direkt auf die Schaltfläche Fertigstellen klicken können, um den Vorgang zum Erstellen einer Anpassungsfunktion zu beenden. Weitere Einzelheiten zu den Einstellungen auf dieser Seite finden Sie unter Die Seite Skript vor oder nach der Anpassung.
|