DMUG-Archiv 2008

Frühere

 

Chronologischer Index

 

Spätere

Vorherige

 

Thematischer Index

 

Nächste

Re: Fitten mehrerer Kurven mit den gleichen Parametern

Guten Morgen Andreas,

Fit oder Regress reichen nicht, da die Funktion, die ich anpassen möchte
die Lösung einer Differentialgleichung ist.

Okay, Sie wollen die Lösung des Differentialgleichungssystems an experimentelle Daten anpassen um die Koeffizienten p1, p2, ..., p6 herauszufinden, die nötig sind, damit eine derartige Lösung die experimentellen Daten imitiert. Wenn Sie diese Aufgabe direkt angehen

In[67]:= Needs["NonlinearRegression`"]

In[74]:= NonlinearRegress[With[{a = 0.77, b = 1.},
  Table[{j, {Sin[a + b j^2] + RandomReal[{-Abs[a]/4, Abs[b]/5}],
     Cos[a + b j^2] + RandomReal[{-Abs[a]/5, Abs[b]/4}]}}, {j, 0, 18,
    3}]
  ], {Sin[a + b*x^2], Cos[a + b x^2]}, {a, b}, x]

sagt Mma

NonlinearRegress::bddata: <snip>
 The data format {{x11, x12, ..., {y11, ..., y1m}}, {x21, x22, ...,
{y21, ..., y2m}}, ..., {{xn1, xn2, ..., {yn1, ..., ynm}}} is reserved
for multiple response data, which will be supported in the future.

FindFit[] sagt etwas Ähnliches. Ergo: NonlinearRegress[] pro Datensatz aufrufen und auf der Gesamtzielfunktion model[] nach einem Minimum suchen, beispielsweise

In[87]:= Clear[d1];
d1 = With[{a = 0.77, b = 1.},
   Table[{j, Sin[a + b j^2] + RandomReal[{-Abs[a]/4, Abs[b]/5}]}, {j,
     0, 18, 3}]
   ];
NonlinearRegress[d1, Sin[a + b*x^2], {a, b}, x,
 RegressionReport -> BestFitParameters]
Out[89]= {BestFitParameters -> {a -> 0.81039, b -> 1.00014}}

In[90]:= Clear[d2]
d2 = With[{a = 0.67, b = 1.2},
   Table[{j, Cos[a + b j^2] + RandomReal[{-Abs[a]/5, Abs[b]/4}]}, {j,
     0, 18, 3}]
   ];
NonlinearRegress[d2, Cos[a + b x^2], {a, b}, x,
 RegressionReport -> BestFitParameters]
Out[92]= {BestFitParameters -> {a -> 1.9616, b -> 1.00249}}

In[104]:= Clear[model]
model[a_, b_] := (Plus @@ (((#[[2]] - Sin[a + b #[[1]]^2])^2) & /@ d1))
	+ (Plus @@ (((#[[2]] - Cos[a + b #[[1]]^2])^2) & /@ d2))

In[109]:= FindMinimum[model[x, y], {x, 0.67}, {y, 1.}]
Out[109]= {7.10256, {x -> 1.47427, y -> 1.00178}}

In[113]:= FindMinimum[model[x, y], {x, 0.1}, {y, .1}]
Out[113]= {7.90688, {x -> 1.94098, y -> 0.0901565}}

In[114]:= FindMinimum[model[x, y], {x, 0.1}, {y, -1.}]
Out[114]= {8.39079, {x -> 2.23149, y -> -0.996674}}

In[115]:= FindMinimum[{model[x, y], x > 0.67,
  y > 1.}, {x, .1}, {y, .1}]
Out[115]= {7.10256, {x -> 1.47427, y -> 1.00178}}

Es kann sinnvoll sein, das Minimum nur in dem Bereich zu suchen, der durch die Einzelergebnisse der NonlinearRegress[]-Läufe abgesteckt wird - insbesondere bei einem sechsdimensionalen Parameterraum. Allenfalls durchsuchen Sie zur Sicherheit das web nach einer Implementation für multiple response data.

Schönes Wochenende
Udo.

Verweise:
AW: Fitten mehrerer Kurven mit den gleichen Parametern
su.krause@XXXXXXX.ch, 07.11.2008
Re: AW: Fitten mehrerer Kurven mit den gleichen Parametern
Andreas Messmer, 07.11.2008

Frühere

 

Chronologischer Index

 

Spätere

Vorherige

 

Thematischer Index

 

Nächste

DMUG-Archiv, http://www.mathematica.ch/dmug-liste.html; Letzte Änderung: 08.11.2008 17:14