Re: FindFit power law problem

• To: mathgroup at smc.vnet.net
• Subject: [mg117057] Re: FindFit power law problem
• From: Peter Pein <petsie at dordos.net>
• Date: Wed, 9 Mar 2011 06:55:31 -0500 (EST)
• References: <il2d8k\$65a\$1@smc.vnet.net>

```Am 07.03.2011 11:49, schrieb Greg Childers:
> Hi,
>
> I'm having a problem with FindFit and a power law problem.  Here's the data:
>
> data = {{1004, 0.003977}, {9970, 0.006494}, {100000, 0.012921},
> {1001000, .059795}}
>
> I'm wanting to fit it to a function of the form y = a x^b, and determine
> the best value of b.  When entered into Excel, it returns the exponent b
> = 0.383.  However, Mathematica gives
>
> FindFit[data, a x^b, {a, b}, x]
> {a->0.0000145749, b->0.601807}
>
> A graph of these values overlaid on the original data simply didn't look
> right.  Another way to find the exponent b is to take the log of both
> sides and do a linear fit:
>
> Fit[Log[10, data], {1, x}, x]
> -3.64936 + 0.383174 x
>
> And sure enough the exponent is 0.383 in agreement with Excel.  Why does
> FindFit give a different value?
>
> Greg
>

Hi Greg,

if you really insist on b being 0.383, then find the weights:

In[1]:=
data={{1004,0.003977},{9970,0.006494},{100000,0.012921},{1001000,.059795}};

In[2]:=
bw[w_List/;(And@@NumericQ/@w)]:=Cases[Normal[NonlinearModelFit[data,a
x^b,{a,b},x,Weights->w]],Power[x,b_]:>b,1,1][[1]]
In[3]:= weights=w/@Range[4];
In[4]:=
(* put focus on the 'middle'*)}]},weights]
Out[4]=
{2.83106*10^-14,{w[1]->0.264427,w[2]->0.964382,w[3]->0.00681409,w[4]->0.000760789}}
In[5]:= NonlinearModelFit[data,a
x^b,{a,b},x,Weights->((w/@Range[4])/.soln[[2]])]//Normal
Out[5]= 0.000196237 x^0.383

Peter

```