0
$\begingroup$

I am trying to fit a set of data points using exponential functions as the underlying process suggests an exponential decay. The data points are:

Data = {{0, 45, 47.470985540937846}, {11.25, 45, 28.926603746663208}, {22.5, 45, 21.100922312464654}, {33.75, 45, 19.586298820131955}, {45, 45, 20.61469296617216}, {56.25, 45, 13.22733047733328}, {67.5, 45, 15.04549817421857}, {0, -45, 47.470985540937846}, {11.25, -45, 30.898348195602292}, {22.5, -45, 25.616298887206632}, {33.75, -45, 13.586298820131955}, {45, -45, 7.682274408756448}, {56.25, -45, 7.189278298656389}, {67.5, -45,  6.2422716248242445}, {0, -90, 47.470985540937846}, {11.25, -90,  42.1217705017171}, {22.5, -90, 23.02889135596794}, {33.75, -90, 16.89568587415}, {45, -90, 20.074316236399707}, {56.25, -90, 10.835521285855664}, {67.5, -90, 9.5480647096005}, {0, 135,     47.470985540937846}, 
        {11.25, 135, 42.1217705017171}, {22.5, 135, 37.924897966359076}, {33.75, 135, 14.715560286972428}, {45, 135, 10.938733127589437}, {56.25, 135, 9.943015054020854}, {67.5, 135, 8.483339962717427}, {0, -135, 47.470985540937846}, {11.25, -135, 25.19718186432576}, {22.5, -135,     16.584292751724774}, {33.75, -135, 15.68995452}, {45, -135,     18.022090381104746}, {56.25, -135, 19.1032086047036}, {67.5, -135,     13.925686505003004}, {0, 90, 47.470985540937846}, {11.25, 90,     46.10110658757595}, {22.5, 90, 17.886453106268913}, {33.75, 90,     11.102516552321319}, {45, 90, 10.226227434874197}, {56.25, 90,     10.025424605068684}, {67.5, 90, 9.868150529986169}};

I want to force the nonlinear model through all the points $(0,y,47.470985540937846)$.

By constraining two points Model[0, -45] == 47.4709.. and Model[0, 45] == 47.4709.., I think I could force the model through the points {0,y,47.470985540937846}:

Model[x_, y_] := a1 Exp[-b1 x] + a2 Exp[-b2 y];

FitModel = NonlinearModelFit[Data, {Model[x, y], Model[0, 45] == 47.470985540937846
                       && Model[0, -45] == 47.470985540937846}, {{a1, 40}, {a2, 6}, 
                       {b1, 0.05}, {b2, 0.005}}, {x, y}] // Normal

However, my model looks a little underfitted. By forcing my model through {0,y,47.470985540937846}, I get a constant relation along $y$ for $x=0$ (which I want) but this seems to force a constant relation for all $x$. Can anyone suggest a better model for this?.

$\endgroup$
2
$\begingroup$

For this data, it would be better to use interpolation (red surface) than the model (green surface).

Data = {{0, 45, 47.470985540937846}, {11.25, 45, 
    28.926603746663208}, {22.5, 45, 21.100922312464654}, {33.75, 45, 
    19.586298820131955}, {45, 45, 20.61469296617216}, {56.25, 45, 
    13.22733047733328}, {67.5, 45, 15.04549817421857}, {0, -45, 
    47.470985540937846}, {11.25, -45, 30.898348195602292}, {22.5, -45,
     25.616298887206632}, {33.75, -45, 13.586298820131955}, {45, -45, 
    7.682274408756448}, {56.25, -45, 7.189278298656389}, {67.5, -45, 
    6.2422716248242445}, {0, -90, 47.470985540937846}, {11.25, -90, 
    42.1217705017171}, {22.5, -90, 23.02889135596794}, {33.75, -90, 
    16.89568587415}, {45, -90, 20.074316236399707}, {56.25, -90, 
    10.835521285855664}, {67.5, -90, 9.5480647096005}, {0, 135, 
    47.470985540937846}, {11.25, 135, 42.1217705017171}, {22.5, 135, 
    37.924897966359076}, {33.75, 135, 14.715560286972428}, {45, 135, 
    10.938733127589437}, {56.25, 135, 9.943015054020854}, {67.5, 135, 
    8.483339962717427}, {0, -135, 47.470985540937846}, {11.25, -135, 
    25.19718186432576}, {22.5, -135, 
    16.584292751724774}, {33.75, -135, 15.68995452}, {45, -135, 
    18.022090381104746}, {56.25, -135, 19.1032086047036}, {67.5, -135,
     13.925686505003004}, {0, 90, 47.470985540937846}, {11.25, 90, 
    46.10110658757595}, {22.5, 90, 17.886453106268913}, {33.75, 90, 
    11.102516552321319}, {45, 90, 10.226227434874197}, {56.25, 90, 
    10.025424605068684}, {67.5, 90, 9.868150529986169}};
Model[x_, y_] := a1 Exp[-b1 x] + a2 Exp[-b2 y] - 47.470985540937846;

f = FitModel = 
  NonlinearModelFit[Data, 
   Model[x, y], {{a1, 40}, {a2, 6}, {b1, 0.05}, {b2, 0.005}}, {x, y}]
{f[0, -45], f[0, 45]}    
Out[]= {43.0041, 43.1905} 

g = Interpolation[Data]    
 {g[0, 45], g[0, -45]}    
Out[]= {47.471, 47.471}

fig1

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.