Re: Fitting experimental data
- To: mathgroup at smc.vnet.net
- Subject: [mg85544] Re: Fitting experimental data
- From: "Kevin J. McCann" <Kevin.McCann at umbc.edu>
- Date: Wed, 13 Feb 2008 04:28:42 -0500 (EST)
- Organization: University System of Maryland
- References: <fopb53$bhu$1@smc.vnet.net>
Here is the way I usually do this for a particular example. I generally roll my own least-squares fit: points={{23400.,273.2},{6800.0,298.2},{2400.0,323.2}}; (*Plot the data points,but don't show the plot*) p1=ListPlot[points,PlotStyle->{Red,PointSize[0.025]}]; (*The function that I wish to fit*) f[B_,Ro_,x_]:=B/Log[x/Ro] (*The LSQ fit function.*) (*Note that you can plot this for a range of B and Ro values*) lsFit[B_,Ro_]:=Plus@@Apply[Abs[f[B,Ro,#1]-#2]^2&,points,1] (*Finally,fit the data by finding the minimum*) (* The output comes in two parts. The first is *) (* the sum of the squares; the second, the best fit parameters *) sol=FindMinimum[lsFit[B,Ro],{B,1},{Ro,1}] (* g[R] is the fitting function with the best fit parameters *) g[x_]=f[B,Ro,x]/.sol[[2]]; (*Plot the fit along with the original data points*) Plot[g[R],{R,1000,25000},PlotStyle->{Blue,AbsoluteThickness[2]},\ Epilog->p1[[1]],Frame->True, FrameStyle->AbsoluteThickness[2], GridLines->Automatic, BaseStyle->{FontFamily->"Arial",FontSize->12,FontWeight->Bold},\ FrameLabel->{"R","g(R)"},PlotLabel->"LSQ Demo" ] Hope this helps, Kevin Ausman, Kevin wrote: > I am trying to fit experimental data (a list of {x,y} points) with a > model that produces a similar list of points. It seems that FindMinimum > with a Levenberg Marquardt method makes the most sense; unfortunately, I > can't seem to get it to work. > > soln=FindMinimum[Sum[(xptData[[i,2]]-(simulatedData[xaxis,testInstFunc, > k1auto,a1initauto])[[i]])^2,{i,1,Length[xaxis]}],{{k1auto,0.04},{a1initauto,0.9}}] > > In this example, xptData is the list of experimental data. simulatedData > returns just the y axis as a list (assuming the same x axis), and the > resulting list, as you might imagine, depends on k1auto and a1initauto. > However, this results in a number of errors, I think because it tries to > evaluate simulatedData for the general case rather than for specific > instances of k1auto and a1initauto. simulatedData requires the use of > ListConvolve, NDSolve, and a number of other functions that seem to > preclude a general solution rather than a specific solution. > > Does anyone have any thoughts on how to overcome this problem? Thanks! > > Kevin Ausman > ausman at okstate.edu -- Kevin J. McCann Research Associate Professor JCET/Physics Physics Building University of Maryland, Baltimore County 1000 Hilltop Circle Baltimore, MD 21250