"cgalle" <kaleb_g@XXXXXXX.ch> wrote:
> Hallo zusammen,
>
> zum Gebrauch von NonlinearRegress habe ich zwei Fragen:
>
> 1. üblicherweise gebe ich ja für meine anzupassenden Parameter den
> Startwert und die Grenzen vor, innerhalb welcher der gesuchte Wert
> liegen soll:
>
> NonlinearRegress[daten, funktion, {var}, {parameter, startwert,
> untergrenze, obergrenze}]
>
> Mein freundliches Mathematica schert sich aber einen Dreck um diese
> Grenzen und gibt in schöner Regelmäßigkeit lustige Phantasiewerte aus.
>
> Kann ich dem Bengel irgendwie klar machen, wirklich nur im vorgegebenen
> Intervall zu suchen???
Laut Dokumentation (Mma 5.1) ist die Syntax entweder
{parameter,startwert} oder {parameter,min,max}. Im zweiten Fall werden
min, max aber nur für die Bestimmung der Startwerte genommen (es wird
die Kombination von min,max genommen, die für alle Parameter zusammen
das kleinste \Chi^2 gibt). Mit anderen Worten: In NonlinearRegress gibt
es keine Constraints.
Wenn man es doch will, muss man sich seine Funktion für die Summe der
Fehlerquadrate in Abhängigkeit von den Parametern selber schreiben und
diese dann an NMinimize verfüttern - da kann man dann Constraints in
Form von Gleichungen oder Ungleichungen angeben. Allerdings ist die
Rechenzeit deutlich länger:
SquaresSum = Plus @@ Map[(model[#[[1]]] - #[[2]])^2 &, data];
NMinResult = NMinimize[{SquaresSum, constraints}, params, MyNMinimizeOptions];
> 2. folgendes Problem:
>
> Ich habe mehrere Datenreihen: D1, D2, D3 ...
> und unterschiedliche Fitfunktionen: F1(x,U,V), F2(x,U,V), F3(x,U,V) ...
>
> Jetzt möchte ich D1 mit F1 fitten, D2 mit F2 usw., was einzeln auch kein
> Problem darstellt. Natürlich bekomme ich für meine Parameter U und V
> jeweils andere Werte. Ich benötige aber DEN Parametersatz, der mir für
> alle Pärchen Di,Fi die insgesamt beste Anpassung liefert.
>
> Gibt es dazu eine Möglichkeit, sozusagen einen multiplen
> NonlinearRegress???
Ich habe das in Mathematica noch nicht gemacht, aber mit einem
grafischen Auswerte- und Plotprogramm, ProFit. Ein Ansatz ist, die
Datensätze zu einem zusammenzufassen, wobei die x-Werte willkürlich
verschoben werden. Also aus
D1={{1,2},{2,4}}
D2={{1,3},{3,9}}
D3={{2,8},{4,64}}
wird
D={{1,2},{2,4},{11,3},{13,9},{22,8},{24,64}}
Die gemeinsame Fitfunktion wird dann abschnittweise definiert
F[x_]:=If[x<10,F1[x],If[x<20,F2[x-10],F3[x-20]]]
Wahrscheinlich geht es in Mathematica aber auch eleganter - man muss nur
wissen wie. Das Suchwort könnte "global analysis" sein.
Gruß, Frank
--
Frank Küster
Inst. f. Biochemie der Univ. Zürich
Debian Developer