Re: NonlinearModelFit: Freezing parameters
- To: mathgroup at smc.vnet.net
 - Subject: [mg117531] Re: NonlinearModelFit: Freezing parameters
 - From: Peter <petsie at dordos.net>
 - Date: Tue, 22 Mar 2011 05:05:35 -0500 (EST)
 - References: <im201l$tl$1@smc.vnet.net> <im4iru$d29$1@smc.vnet.net> <im7c2v$3f$1@smc.vnet.net>
 
Am 21.03.2011 12:16, schrieb dg:
> On Mar 20, 2:54 am, Peter Pein<pet... at dordos.net>  wrote:
>
>>
>> Hi,
>>
>> you can wrap a Block[] around the call to NonlinearModelFit (NMF). You
>> just have to change the way how the parameters are given to NMF using
>> Variables:
>>
>> In[1]:= model=a0+a1 x+a2 x^2;
>> data=Table[{x,.25+x^(3/2)},{x,0,2,1/3}];
>>
>> the normal call to NMF:
>> In[3]:= f0=NonlinearModelFit[data,model,Variables[{a0,a1,a2}],x]//Normal
>> Out[3]= 0.22546 + 0.601959 x + 0.416822 x^2
>>
>> Say you knew a0=1/4:
>>
>> In[4]:= f1=Block[{a0=.25},
>> NonlinearModelFit[data,model,Variables[{a0,a1,a2}],x]//Normal
>> ]
>> Out[4]= 0.25 + 0.557096 x + 0.434077 x^2
>>
>> hth,
>> Peter
>
> Peter,
> that's a neat trick. I think this does not work with models that are
> not polynomials. For example, model= c0*Sin[c1*x].
>
I take the variables from the set of the parameters, not from the model:
In[1]:= params = {c0, c1};
vars = {x};
model = c0*Sin[c1*x];
data = Table[{x, Sin[E*x]}, {x, -1, 2, 1/4}];
In[5]:= Normal[NonlinearModelFit[data, model, Variables[params], vars]]
Out[5]= 0.9999999999999987*Sin[2.7182818284590176*x]
In[6]:= Block[{c1 = 5/2},
          Normal[NonlinearModelFit[data, model, Variables[params], vars]]
         ]
Out[6]= 0.9641129280282692*Sin[(5*x)/2]
Peter