2230

Origin - Eine Fitfunktion rechnet nicht wie erwartet

Wieso rechnet eine selbstdefinierte Fitfunktion "falsche" Funktionswerte aus? Warum hängt dieses Verhalten davon ab, ob man Origin C für die Funktion verwendet? Bei der nichtlinearen Kurvenanpassung (NLSF) können Funktionen entweder in LabTalk oder in Origin C defniert werden. Dabei kann es in Grenzfällen zu unterschiedlichen Interpretation von internen Funktionen wie z.B. der Funktion log() kommen. Origin C arbeitet natürlich nach dem ANSI C Standard, in dem log() als natürlicher Logarithmus und log10 als Logarithmus zur Basis 10 vereinbart wurden. Unglücklicherweise weicht LabTalk von diesem Standard ab (LabTalk ist kein C und wurde vor vielen Jahren zur einfachen Handhabung durch den Laboringenieur leider ohne Rücksicht auf eine internationale Normung definiert)

Eine Änderung der Situation ist momentan nicht möglich, da beide Programmiersprechen auf absehbare Zeit weiter nebeneinander existieren müssen. Schliesslich kann aus Konsistenzgründen die Definition der Elemente einer Sprache nicht verändert werden. Damit diese recht seltenen Fälle schnell erkannt werden können, haben wir Ihnen die bekannten "Fallen" aufgezählt:
  • log() ist in LabTalk zur Basis 10, in Origin C zur Basis e definiert
  • In Origin C ergibt 1/2 = 0 anstelle von 0.5 in (LabTalk), siehe unser Beispiel Integer-Division am Ende dieses Artikels
  • Alle Trigonometischen Funktionen in Origin C verwenden immer radiant als Winkelmaß, hingegen verwendet LabTalk die Einstellung unter Hilfsmittel:Optionen:Zahlenformat (Tools:Options:Numeric format)
Wir empfehlen daher diese Vorgehensweise für Fitfunktionen, die in LabTalk entworfen wurden und nun nach Origin C übernommen werden:
  1. Die Funktion im NLSF laden
  2. Codebuilder öffnen
  3. Funktion kompilieren
  4. Rechts unten im Consolenfenster einen Funktionswert zum Testen übergeben (zb: myfunc(1,1,1,1))
  5. Ergebnis prüfen.

Dann kann man entscheiden, ob die Funktion anpassen möchte oder alternativ den Schalter Origin C verwenden abstellt.

Der Hersteller wird in einer späteren Programmversion diese Schwierigkeiten genauer und einfacher zugänglich dokumentieren, so dass der Anwender beim Auftreten dieser Konflikte automatisch gewarnt wird.

Download

Origin C Code - Beispiel für unterschiedliche Ergebnisse bei Integer Divivson