Re: nonLinearFit and nonLinearRegress
- To: mathgroup at smc.vnet.net
- Subject: [mg55316] Re: nonLinearFit and nonLinearRegress
- From: Peter Pein <petsie at arcor.de>
- Date: Sat, 19 Mar 2005 04:45:17 -0500 (EST)
- References: <d1ecpc$etg$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
John Hawkin wrote: > I'm trying to do a nonLinear fit on some data, fitting a parameter > which appears in the limits of the integral that I'm trying to fit. > When I do a nonLinearFit, I get about a page of errors, but it does > work. It takes about 10 minutes to do it for 20 points with a > reasonable initial estimate. However when I use the nonLinearRegress > command, even with the best fit parameter from nonLinearFit given as > the initial guess, it takes hours to work. Is it possible there is a > way to speed this up, and is this normal? > > The commands that I'm using to integrate this function are: > > h[B]:=2/(B pi) NIntegrate[x Sin[x] Exp[-(x/B)^3/2], {x, 0, inf}, > Method-Oscillatory]; > holts[c_, d_, Q_]:= NIntegrate[h[B], {B, c/Q, d/Q}]; > > where holts is the function I am fitting (the h[B] integral is known > as the Holtsmark integral). The fitting command I'm using is: > > NonlinearFit[fitData, holts[c,d,Q], {c,d}, {Q, estimateQ}]; > > where fitData contains sets of size 3, with the values of c and d as > the first two values, and the data point that I'm fitting the integral > to as the 3rd value. If anyone has any ideas on how I can perform the > nonlinear regression fast enough so that I can do it many times (maybe > 50), I would greatly appreciate it. Thanks very much, > > John Hawkin > Hi John, if you are working with reals only, you can try to integrate exactly before approximating: If you enter Assuming[Element[B, Reals] && z > 0, Integrate[(2*Integrate[(x*Sin[x])/E^((1/2)*(x/B)^2), {x, 0, Infinity}])/(B*Pi), {B, 0, z}]] or assuming z<0 and the outer integral going from z to 0 you get h0[z_] := ((-Sqrt[2/Pi])*z + E^(z^2/2)*Erf[z/Sqrt[2]])/E^(z^2/2); holts[c_, d_, Q_] := h0[d/Q] - h0[c/Q]; this should speed things up. -- Peter Pein Berlin