Re: FindFit and LeastSquares
- To: mathgroup at smc.vnet.net
- Subject: [mg132400] Re: FindFit and LeastSquares
- From: Bill Rowe <readnews at sbcglobal.net>
- Date: Mon, 10 Mar 2014 04:36:33 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: l-mathgroup@wolfram.com
- Delivered-to: mathgroup-outx@smc.vnet.net
- Delivered-to: mathgroup-newsendx@smc.vnet.net
On 3/8/14 at 2:43 AM, lipson.alexandra at gmail.com (Alexandra Lipson) wrote: >I have an assignment to use Linear Least Squares to determine the >orbital parameters given the following observations as (x,y) >coordinates: (1.02,.39), (.95,.32), (.87,.27), (.77,.22), >(.67,.18), (.56,.15), (.44,.13), (.30,.12), (.16,.13), (.01,.15). I >am asked to plot the resulting orbit for the given data points. >Here is what I have been playing with: >a1 = {{1.02, .39}, {.95, .32}}; >b1 = {{.87, .27}, {.77, .22}}; >c1 = {{.67, .18}, {.56, .15}}; >d1 = {{.44, .13}, {.3, .12}}; >e1 = {{.16, .13}, {.01, .15}}; >r = ListPlot[{a1, b1, c1, d1, e1}] >points = {{a1}, {b1}, {c1}, {d1}, {e1}}; >data = {{1.02, .39}, {.95, .32}, {.87, .27}, {.77, .22}, {.67, .18}, {.56, \ >.15}, {.44, .13}, {.3, .12}, {.16, .13}, {.01, .15}} Note, ListPlot[data] will give you the same plot of your data as what you did with a lot less typing. >model = a*y^2 + b*x*y + c*x + d*y + e - x^2 >FindFit[data, model, {a, b, c, d, e}, {x, y}] >l = LeastSquares[{a1, b1, c1, d1, e1},_] Look at the documentation for FindFit and LeastSquares. Neither can deal with a model in implicit form as you have it. You can construct an array for FindFit for each of your data points with rows formated as: {y^2,x*y,x,y,e,x^2,0} where each part above is numeric computed from your {x,y} pairs. With that array, you would call FindFit as follows: FindFit[dataArray,,a*y2 + b*xy + c*x + d*y + e - x2,{a, b, c, d, e},{y2,xy,x,y,x2}] A somewhat different approach would be to create an explicit expression of the sum of squares and use NMinimize. That is: x = data[[All, 1]]; y = data[[All, -1]]; error = Total[model^2] // Simplify; sol = NMinimize[error, {a, b, c, d, e}]