7
$\begingroup$

Let's say I have written a function which performs convolution and returns value calculated for the time, t.

CalculateConvolution[length_, aifMatrix_, Ktrans_, Kep_, dt_, t_] := 
      aifMatrix[[(Round[t/dt] + 1)]].CreateKernel[Ktrans, Kep, dt, length];

aifMatrix - is a matrix;

CreateKernel[Ktrans, Kep, dt, length] - is a function that returns a vector;

CreateKernel[Ktrans_, Kep_, dt_, length_] := Module[{kernel = ConstantArray[0, length]}, 
       Do[kernel[[i]] = Ktrans*Exp[-Kep*dt*i], {i, 1, length, 1}]; kernel];

After that I use the next function to perform nonlinear least squares fitting:

NonlinearModelFit[TheoreticalTissueData, CalculateConvolutionOptimized[
     Length[fiitedAIF], fittedConvMatrix, Ktrans, Ktrans/(Kep*60), 0.5, t], {Ktrans, Kep}, t]

where the TheoreticalTissueData is the data which I need to fit.

So, when I run this code I get the fitted data in the next form: {value1, value2, ..., valuen} which corresponds to the fitted curve, however I can't extract fitted parameters: Ktrans,Kep.

I tried to use ["ParameterTable"], however I didn't receive any results (because it worked for several minutes without any results, so I aborted calculations).

What is the easiest way to get the fit parameters for this case?

$\endgroup$
4
  • $\begingroup$ Hi ! Please, visit the help centre and read more about proper code formatting. Thanks ! $\endgroup$
    – Sektor
    Commented Jan 8, 2015 at 21:21
  • $\begingroup$ I'm a bit confused by your description. When running NonlinearModelFit, the result should be a FittedModel object, not something in the form of {value1, value2, ...}. Can you clarify what you get? Once you do have a FittedModel objects (let's say stored in the variable fm), evaluating fm["ParameterTable"] should probably be quick. If it's not, can you give a short but complete example that reproduces the problem? If you need to retrieve the parameter values for programmatic use, try "BestFitParameters" instead of "ParameterTable" (which is for visual inspection). $\endgroup$
    – Szabolcs
    Commented Aug 4, 2015 at 11:36
  • $\begingroup$ Old question again, sorry ... $\endgroup$
    – Szabolcs
    Commented Aug 4, 2015 at 11:37
  • $\begingroup$ Does this answer your question? If so, please mark the answer as accepted. Thanks. $\endgroup$
    – Pedram
    Commented May 31, 2019 at 9:43

1 Answer 1

11
$\begingroup$

Make a name for your fitting, like nlm here:

In[1]:= data = {{0, 1}, {1, 0}, {3, 2}, {5, 4}, {6, 4}, {7, 5}};
In[2]:= nlm = NonlinearModelFit[data, Log[a + b x^2], {a, b}, x];
In[3]:= nlm["BestFitParameters"]
Out[3]= {a -> 1.50632, b -> 1.42633}

Now to get a or b you can simply do this:

In[4]:= myA = a /. nlm["BestFitParameters"];
In[5]:= myB = b /. nlm["BestFitParameters"];

I hope you'll find it useful :)

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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