4
$\begingroup$

I have a data. The LinearModelFit works well with it. But I'm really interested to fit it to y == a 34^b x^d + e 34^f x. So, my code:

fit2 = NonlinearModelFit[data, {a 34^b x^d + e 34^f x}, {a, b, d, e, f}, {x}] 

But it gives me an error:

NonlinearModelFit::nrjnum: The Jacobian is not a matrix of real numbers at {a,b,d,e,f} = {1.,1.,1.,1.,1.}.

Now I'm a bit stuck...

Update

data = {{0, 0}, {0.5`, 0.005899`}, {2.`, 0.011938`}, {5.`, 0.016026`}, {8.`, 0.019241`}, {11.`, 0.021775`}, {14.`, 0.023975`}, {17.`, 0.025926`}, {20.`, 0.027588`}, {23.`, 0.029033`}, {26.`, 0.030481`}, {29.`, 0.03175`}, {32.`, 0.032963`}, {35.`, 0.034043`}, {38.`, 0.035107`}, {44.`, 0.036933`}, {50.`, 0.038732`}, {56.`, 0.040337`}, {62.`, 0.041727`}, {68.`, 0.043243`}, {74.`, 0.044595`}, {80.`, 0.045782`}, {86.`, 0.046893`}, {92.`, 0.048013`}, {98.`, 0.04901`}, {104.`, 0.049906`}, {110.`, 0.050887`}, {116.`, 0.051737`}, {122.`, 0.052511`}, {130.`, 0.053636`}, {142.`, 0.056062`}, {154.`, 0.057802`}, {166.`, 0.059426`}, {178.`, 0.060762`}, {190.`, 0.062086`}, {202.`, 0.063304`}, {214.`, 0.064401`}, {226.`, 0.065449`}, {238.`, 0.066462`}, {250.`, 0.067398`}, {262.`, 0.068241`}, {274.`, 0.069049`}, {286.`, 0.069826`}, {298.`, 0.070638`}, {310.`, 0.071341`}, {322.`, 0.071984`}, {334.`, 0.07258`}, {346.`, 0.073202`}, {358.`, 0.073809`}, {370.`, 0.074263`}, {382.`, 0.074954`}, {394.`, 0.075353`}, {406.`, 0.075835`}, {418.`, 0.076402`}, {430.`, 0.076759`}, {442.`, 0.077285`}, {454.`, 0.077618`}, {466.`, 0.077963`}, {478.`, 0.078492`}, {490.`, 0.07869`}, {502.`, 0.079317`}, {514.`, 0.0795`}, {526.`, 0.079799`}, {538.`, 0.080266`}, {550.`, 0.080393`}, {562.`, 0.080893`}, {574.`, 0.081167`}, {586.`, 0.081271`}, {598.`, 0.081768`}, {610.`, 0.082036`}, {622.`, 0.082127`}, {634.`, 0.0824`}, {646.`, 0.082904`}, {658.`, 0.082974`}, {670.`, 0.083041`}, {682.`, 0.083286`}, {694.`, 0.083747`}, {706.`, 0.083797`}}; 
$\endgroup$
4
  • $\begingroup$ How many data points are in data, what's the form of the dataset? And maybe you have some lingering definitions on a, b, .... Btw, you can replace {x} with x. $\endgroup$ Commented Jan 18, 2018 at 9:48
  • $\begingroup$ @corey979 77 points are in data. The form is typical for primary + secondary creep of material, so it absolutely could be fitten... $\endgroup$ Commented Jan 18, 2018 at 10:06
  • $\begingroup$ Please incldue the data into the question so that we have something to work with. $\endgroup$ Commented Jan 18, 2018 at 10:07
  • $\begingroup$ @corey979 updated the question with data $\endgroup$ Commented Jan 18, 2018 at 10:11

2 Answers 2

11
$\begingroup$

Because there is a term x^d, I dropped the point {0, 0} from the data (see here).

Next, the terms a 34^b and e 34^f will be just constants - there is no point in taking them as a multiplication of two numbers - there are infinitely many ways to write them. So I changed to just a and e.

Using Manipulate:

Manipulate[ Show[Plot[a x^d + e x, {x, 0, 700}], ListPlot@data, PlotRange -> All], {a, 0, 1, 0.001}, {d, 0, 1, 0.01}, {e, 0, 1, 0.001}] 

by trial-and-error I found starting values for the parameters:

fit2 = NonlinearModelFit[data, {a x^d + e x}, {{a, 0.2}, {d, 0.08}, {e, 0.}}, x] 

that eventually gave

Show[Plot[Normal@fit2, {x, 0, 700}, PlotStyle -> Red], ListPlot@data] 

enter image description here

being a quite good fit. The formula is

Normal@fit2 

$0.00815195 x^{0.418618} - 0.0000613279 x$

$\endgroup$
5
$\begingroup$

a 34^b does not depend on x, so it is a constant with 2 unknowns, which won't work.

So start removing those parameters that can't be fit, i.e. use a x^d + e x

To find a good initial guess for the parameters let's solve a and e given two of the data points near the boundary and look at the result while varying d:

sol = Solve[Table[a x^d + e x, {x, Round[data[[{2, -1}, 1]], 1/1000]}] == Round[data[[{2, -1}, 2]], 1/1000], {a, e}]; test[x_, d_] = a x^d + e x /. sol[[1]]; Manipulate[Show[ListPlot[data, PlotRange -> All], Plot[test[x, d], {x, Sequence @@ MinMax[data[[All, 1]]]}]], {d, 0, 10}] 

Which reveals that d is about 0.42. The other parameters solved for this d-value are

sol /. d -> 0.42 (* {{a -> 0.0080681625, e -> -0.000060686662}} *) 

Using these as initial guesses, an appropiate fit is returned:

Normal@NonlinearModelFit[data, a x^d + e x, {{a, 0.008068, 0.007068}, {d, 0.42, 0.43}, {e, -0.00006, -0.00007}}, x] 

$0.00812816 x^{0.419428}-0.0000617869 x$

$\endgroup$

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.