Re: How to assign the result from NonlinearFit to a function
- To: mathgroup at smc.vnet.net
- Subject: [mg70231] Re: How to assign the result from NonlinearFit to a function
- From: Bill Rowe <readnewsciv at sbcglobal.net>
- Date: Sun, 8 Oct 2006 02:04:49 -0400 (EDT)
On 10/7/06 at 7:09 AM, PengYu.UT at gmail.com wrote:
>I have the following code. I want to assign the resulting function
>of NonlinearFit to function f. But it seems that it doesn't work.
>Would you please help me?
><< Statistics`NonlinearFit`
>data = {{1.0, 1.0, .126}, {2.0, 1.0, .219}, {1.0, 2.0, .076}, {2.0,
>2.0, .126}, {.1, .0, .186}};
>f[theta1_, theta2_, theta3_] := NonlinearFit[data, theta1 theta3
>x1/(1 + theta1 x1 + theta2 \ x2), {x1, x2}, {theta1, theta2,
>theta3}]
Part of the problem you are having is you are defining the
function f to take as arguments the parameters you are asking
NonlinearFit to find. That is f cannot depend on the arguments
you supply as Nonlinear fit will replace them with numerical
values determined by the data.
Perhaps you want something like the following
In[23]:=
f[x_, y_] := Evaluate[NonlinearFit[data,
theta1*theta3*(x1/(1 + theta1*x1 + theta2*x2)),
{x1, x2}, {theta1, theta2, theta3}]] /.
Thread[{x1, x2} -> {x, y}]
In[24]:=
f[x,y]
Out[24]=
(2.442770155675669*x)/(3.1315052420200065*x +
15.159362112360792*y + 1)
In[25]:=
f[1,2]
Out[25]=
0.0709072
Note, the built in function FindFit does everything NonlinerFit
does. So, this same result could be obtained as:
In[27]:=
g[x_, y_] := (theta1*theta3*x)/(theta1*x + theta2*y +
1) /. Evaluate[FindFit[data, (theta1*theta3*x1)/
(theta1*x1 + theta2*x2 + 1), {theta1, theta2,
theta3}, {x1, x2}]]
In[28]:=
g[x,y]
Out[28]=
(2.442770155675669*x)/(3.1315052420200065*x +
15.159362112360792*y + 1)
In[29]:=
g[1,2]
Out[29]=
0.0709072
--
To reply via email subtract one hundred and four