RE: Fit data with range
- To: mathgroup at smc.vnet.net
- Subject: [mg88423] RE: [mg88364] Fit data with range
- From: "David Annetts" <davidannetts at aapt.net.au>
- Date: Mon, 5 May 2008 06:12:06 -0400 (EDT)
- References: <200805031015.GAA03918@smc.vnet.net>
Hi Ivan, > I want to fit a polynomial function to a set of data, only > between say xmin to xmax. How can I do that? > I know only how to fit the whole range. > > For example: > > data = ReadList["file.dat",{Number,Number}]; > > fit = Fit[data,{1,x,x^2},x] > > Plot[fit,{x,0,10}] Select[] is probably the easiest way of isolating a subset of data. Take[] is very brute force. Example: data = {#, # + #^2 + 1.1 RandomReal[]} & /@ Range[-5, 5, .25]; (* generate data *) {dmin, dmax} = {Min@data[[All, 1]], Max@data[[All, 1]]}; (* find Min & Max coords *) ListPlot[data] (* always plot experimental data before fitting *) sdata = Select[data, (-dmin / 2 <= #[[1]] <= dmax /3) &]; (* select data using criterion *) sfit = Fit[sdata, {1, x, x^2}, x] (* fit subset *) afit = Fit[data, {1, x, x^2}, x] (* fit all data -- slight differences as expected *) Show[{ Plot[sfit, {x, dmin, dmax}], Plot[fit, {x, dmin, dmax}, PlotStyle -> Green], ListPlot[sdata, PlotStyle -> Red] }] (* compare both fits with experimental data *) Unfortunately, to get an objective degree of fit, we still need a package. Why this can't be an option to Fit[] is anyone's guess. Perhaps in 6.1? Needs["LinearRegression`"] rfit = Regress[sdata, {1, x, x^2}, x] You can see effects of fitting a subset using slightly different data eg. data = {#, (# RandomReal[]) + (# RandomReal[])^2 + 1.5 RandomReal[]} & /@ Range[-5, 5, .25]; Regards, Dave. No virus found in this outgoing message. Checked by AVG. Version: 7.5.524 / Virus Database: 269.23.8/1412 - Release Date: 2/05/2008 16:34
- References:
- Fit data with range
- From: Ivan <darknails@gmail.com>
- Fit data with range