Finding values from Cubicinterp fit

If I have performed a cubic interp to some data,
x = linspace(1,maxFwhm+1,maxFwhm+1)'
f=fit(x,y,'cubicinterp')
hold on
plot(f,'k--')
coeffvalues(f)
How can I now calculate the x value that corresponds with the y value of 0.5?
Thanks Jason

 Accepted Answer

Use fzero to solve f(x) = 0.5. Keep in mind you can evaluate the fit by passing it a value.
load census
populationFit = fit(cdate, pop, 'poly2');
populationIn1925 = populationFit(1925)
You can check that it evaluated the fit correctly.
plot(cdate, pop)
hold on
plot(populationFit)
plot(repmat(1925, 1, 2), ylim)
plot(xlim, repmat(populationIn1925, 1, 2))
plot(1925, populationIn1925, 'o')

3 Comments

Hi, Im not sure I follow how your suggesting I use fzero.
I have tried:
fun=f-0.5;
x0 = [3 5];
myx = fzero(fun,x0)
But didn't work.
You need to make sure you evaluate the fit for a specific value that fzero will pass into your function.
fun = @(x) f(x)-0.5;
Thankyou

Sign in to comment.

More Answers (1)

John D'Errico
John D'Errico on 13 Jan 2017
Edited: John D'Errico on 13 Jan 2017
Download my SLM Toolbox . Since I don't have your data, I'll make some up. Not a very creative function, I know, but it will suffice.
Here, for which values of x does the function equal 0.5?
x = (0:5)';
y = rand(size(x));
y = rand(size(x))
y =
0.79221
0.95949
0.65574
0.035712
0.84913
0.93399
f=fit(x,y,'cubicinterp');
slmsolve(f.p,0.5)
ans =
2.1967 3.671
The results are as good as can be had (using the function roots), not an approximation.

Categories

Asked:

on 13 Jan 2017

Commented:

on 14 Jan 2017

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!