DMUG-Archiv 2006

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

Re: NonlinearRegress oder NMinimize mit Integral

Hallo Frank,

ja, das ist klar, Sie haben \[Theta] als unabhängige Veränderliche des Modells in NIntegrate[], die Parameter
R0sixNull, deltaR0 sollen gefittet werden.

Ecalc[\[Theta], n[0]] gibt schon allein eine Fehlermeldung, ebenso wie

In[19]:= NIntegrate[Cos[a x], {x, -Pi/2, Pi/2}]

korrekterweise nicht evaluiert wird.

Wenn Sie das Ecalc auf Integrate[] umstellen,

In[22]:= Clear[Ecalc];
Ecalc[\[Theta]_, gua_] :=
 Integrate[
   P[r]EvonR[r, \[Theta], n[gua]],
   {r, 0, lc}
   ]

grüsst Sie freundlich eine Singularität,

In[24]:=
Ecalc[\[Theta], n[0]]
From In[24]:=
Integrate::idiv : Integral of
\[ExponentialE]\\^\\(-\\(\\(\\(\[LeftSkeleton] 18 \[RightSkeleton]\\)\\/\\(1 \
- \\(\\(\\(\\(\[LeftSkeleton] 21 \[RightSkeleton]\\)\\)\\\\ \\(\\(\
\[LeftSkeleton] 1 \[RightSkeleton]\\)\\)\\)\\)\\)\\)\\)\\)\\\\ r\\^2\\)\\/\\(\
\\((1 - \\(\\(0.021626297577854673`\\\\ \\(\\(\[LeftSkeleton] 1 \
\[RightSkeleton]\\)\\)\\)\\))\\)\\^\\(9/2\\)\\\\ \\(\\((1 + \\(\\(\\(\
\[LeftSkeleton] 18 \[RightSkeleton]\\)\\)\\\\ r\\^6\\)\\/\\(R0sixNull + \
\\(\\(\[LeftSkeleton] 1 \[RightSkeleton]\\)\\)\\))\\)\\)\\)\\)

does not converge on {0, 6.8}!  Mehr ...

Out[24]=
\!\(\[Integral]\_0\%6.8`\(\(
0.004474420448912797`\ \[ExponentialE]\^\(-\(1.159090909090909`\/\
\(1 - 0.021626297577854673`\ r\^2\)\)\)\ r\^2\)\/\(\((1 - \
0.021626297577854673`\ r\^2)\)\^\(9/2\)\ \((1 + \(3.383778948220334`\ \
r\^6\)\/\(R0sixNull + deltaR0\ \[Theta]\))\)\)\) \[DifferentialD]r\)

an der Stelle ist ohnehin noch etwas Modellierungsaufwand zu treiben.

Gruss
Udo.

Frank Küster wrote:

Hallo,

ich möchte gerne Parameter eines Modells an Messdaten anfitten, stoße
aber auf Probleme, offenbar weil das Modell NIntegrate enthält.  Ich
hänge ein Notebook an, hier die wesentlichen Punkte.  Das Modell sieht
so aus:

Ecalc[\[Theta]_, gua_] :=
 NIntegrate[
   P[r]EvonR[r, \[Theta], n[gua]],
   {r, 0, lc}
   ]

Dabei ist gua ein Parameter, der verschiedene Datensätze unterscheidet
(sie wurden also bei unterschiedlichen Konzentrationen der Chemikalie
Guanidiniumchlorid gemessen), und \theta ist der Parameter, der in einem
Datensatz variiert wurde (die Temperatur in Grad Celsius).  Die
eigentlichen Fitparameter stecken in der Definition von EvonR.

Ich habe nun so zu fitten versucht:

NonlinearRegress[Data[0], Ecalc[\[Theta], n[0]], {\[Theta]}, FitParams]

Aber das liefert nur "Integrand is not numerical".  Statt EvonR die
Funktion explizit hinzuschreiben ändert wie erwartet nichts.

Und eigentlich ist es noch komplizierter, weil ich mehrere Datensätze
bei unterschiedlichen Werten von gua gemessen habe und diese global
fitten möchte.  Ich habe dazu bissher immer selber ein ChiSquared
definiert (mit Map[(#[[2]]-Ecalc[#[[1]],gua})^,Data]) und dann NMinimize
verwendet, aber das steigt genauso aus.

Gibt es eine Möglichkeit, dieses Problem zu lösen?

Danke im Voraus,
Frank




Antworten:
Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html