Search code examples
matlabhandlecurve-fitting

Get function handle of fit function in matlab and assign fit parameters


I'm fitting custom functions to my data. After obtaining the fit I would like to get something like a function handle of my fit function including the parameters set to the ones found by the fit. I know I can get the model with

formula(fit) 

and I can get the parameters with

coeffvalues(fit) 

but is there any easy way to combine the two in one step?


Solution

  • This little loop will do the trick:

    x = (1:100).';  %'
    y = 1*x.^5 + 2*x.^4 + 3*x.^3 + 4*x.^2 + 5*x + 6;
    fitobject = fit(x,y,'poly5');  
    
    cvalues = coeffvalues(fitobject);
    cnames = coeffnames(fitobject);
    output = formula(fitobject);
    
    for ii=1:1:numel(cvalues)
        cname = cnames{ii};
        cvalue = num2str(cvalues(ii));
        output = strrep(output, cname , cvalue);
    end
    
    output = 1*x^5 + 2*x^4 + 3*x^3 + 4*x^2 + 5*x + 6
    

    The loop needs to be adapted to the number of coefficients of your fit.

    Edit: two slight changes in order to fully answer the question.

    fhandle = @(x) eval(output)
    

    returns a function handle. Secondly output as given by your procedure doesn't work, as the power operation reads .^ instead of x, which can obviously be replaced by

    strrep(output, '^', '.^');