Benutzer-Werkzeuge

Webseiten-Werkzeuge


Action disabled: export_raw
de:software:matlab:tsim:dev:c:tofit

Inhaltsverzeichnis

Freie Auswahl der Fitparameter

Zielstellung
Anzahl und Auswahl der Fitparameter sollen vollständig frei wählbar sein
Problem
Die Matlab-Fitfunktionen lassen es nicht trivial zu, zusätzliche Parameter zu übergeben.
Die Easyspin Simulations Funktion möchte die Parameter zur Simulation in einer speziellen Form1).
Lösung
Übergabe zusätzlicher Fitparameter über eine anonyme Funktion.
trEPRTSim_parTransfer, welche die Simulationsparameter in eine easyspin-konforme Form bringt.

Zielstellung

Da das fitten einer Funktion Zeit beansprucht, in Abhängigkeit der Anzahl Parameter, die gefittet werden sollen, möchte man der Fitfunktion lsqcurvefit nur wirklich die zu fittenden Parameter in einem Vektor x übergeben. Gleichzeitig will man in der Wahl und in der Anzahl der zu fittenden Parameter frei bleiben, was dazu führt, dass der entsprechende Vektor x seine Länge ändert2), sowie auch die Bedeutung der Elemente des Vektors sich ändern.

Problem

Die Matlab®-Funktion lsqcurvefit findet im einfachsten Fall die Koeffizienten x, die das Ergebnis F der nichtlinearen Funktion F = fun(x,xdata) den (experimentellen) Daten ydata am besten entsprechen lässt.

fun = F(x,xdata)
x = lsqcurvefit(fun,x0,xdata,ydata)

fun ist der Zuweisungsname der Funktion, die gefittet werden soll. Sie hat zwei Eingabewerte: einen Vektor oder eine Matrix3) x, und einen Vektor oder eine Matrix xdata. fun gibt den Vektor oder die Matrix F zurück. F enthält die Ergebnisse der Auswertung der Zielfunktion am Ort xdata mit den Koeffizienten x.

lsqcurvefit akzeptiert als Zielfunktion (fun) aber nur Funktionen, die von nur einer Variable, dem Koeffizienten x, abhängen.4) In unserem Fall ist die Zielfunktion trEPRTSim_fit,5) die zusätzlich zur Variable x6) noch weitere Parameter braucht. Um diese extra Parameter, deren Anzahl sich je nach Nutzerauswahl ändert7) und deren Werte frei wählbar sind, sich während des Fits aber nicht ändern, der Zielfunktion übergeben zu können, muss man sich einer anonymen Funktion bedienen.

Um dem Problem der sich ändernden Länge des Vektors x und der damit verbundenen neuen Bedeutung der Element im Vektor Herr/Frau zu werden, wurde unter anderem die Funktion trEPRTSim_parTransfer geschrieben.

Lösung

Kleine Einführung in anonyme Funktionen bei Matlab inkl. Link auf die betreffende Online-Dokumentation bei Mathworks.

Eine anonyme Funktion ist eine Funktion, die nicht in einer eigenen Datei gespeichert wird. Sie ist einer Variable zugewiesen, deren Datentyp function_handle ist. Vergleichbar mit dem Inputargument einer Funktion können dem function_handle ebenfalls Werte übergeben werden.

brr = @(x) x.^2;
v = [4 8 2];
a1 = brr(v)
 
a1 =
 
    16    64     4

Um mit Hilfe einer anonymen Funktion lsqcurvefit die extra Parameter mitzugeben wurde wie folgt vorgegangen: Erst wird die anonyme Funktion fitfun definiert.

fitfun = @(x,Bfield)trEPRTSim_fit(x,Bfield,Sys,Exp,spectrum,fitpar,tofit);

Alles was hinter x in den Übergabeparametern von trEPRTSim_fit ist, sind zusätzliche Parameter. Danach wird von lsqcurvefit auf die anonyme Funktion zugegriffen.

fittedpar = lsqcurvefit(fitfun,inipar,Bfield,Signal,lb,ub,option);
1)
Struct
2)
für Till: novelliert
3)
die Matrix wird intern wieder in einen Vektor umgewandelt
4)
xdata sind die Input-Daten und keine Variable
5)
im engeren Sinne trEPRTSim_sim
6)
par bzw. inipar und fittedpar
7)
Der Nutzer wählt aus welche Parameter gefittet werden, sprich welche Parameter im Vektor x landen. Die zurückgebliebenen Parameter sind dann folglich jene, die festgehalten werden und lsqcurvefit als zusätzliche Parameter, mit festen Werten, übergeben werden.
de/software/matlab/tsim/dev/c/tofit.txt · Zuletzt geändert: von 127.0.0.1