fit a curve through selected points with own function

38 次查看(过去 30 天)
Hey!
I have a problem.. I don't know why I'm having such a hard time figuring it out.
I have data say
x = [1 2 3 4 5 6 7 8]
y = [3 4 5 6 7 8 9 10]
What I need is to plot it, then choose four points (say x=2, y= 4 and x= 4, y= 6 etc)
and make a fit through only these 4 points. The fit should be of the form x**-n, where n is a real number.
I can then play around with n, to find the best fit, once I can get x,y and this fit with 4 selected points on a same graph.
All help is appreciated, thank you!

回答(2 个)

Michael Soskind
Michael Soskind 2020-4-20
Hi Steve,
With regards to curve fitting, when you choose the points, then you can fit it to any function using lsqcurvefit, since you know x and y.
Here is an example similar to the one you describe above. I select the values you described, and show the result in a plot:
x = [1 2 3 4 5 6 7 8];
y = [3 4 5 6 7 8 9 10];
range = [2,3,4,7];
xdata = x(range);
ydata = y(range);
fun = @(c, xdata) c(1)*xdata + c(2);
x0 = [1.2,1.8]
coeffs = lsqcurvefit(fun, x0, xdata, ydata);
figure(); hold on;
plot(xdata, ydata, 'o');
plot(xdata, fun(coeffs, xdata))
I hope that helps, and is similar to what you are looking for,
Michael
  1 个评论
Michael Soskind
Michael Soskind 2020-4-20
I forgot to mention, the function definition is important, c is an array of the coefficients, and since I use a linear function, I have a slope term and offset term. In your case, you can scale the polynomial and have the power terms selected by the curve fitting routine.
fun = @(c, xdata) c(1)*xdata.^c(2);

请先登录,再进行评论。


Ameer Hamza
Ameer Hamza 2020-4-20
You can use the curve fitting toolbox to find the fit of the form you described in the question
x = [1 2 3 4 5 6 7 8];
y = [3 4 5 6 7 8 9 10];
ft = fittype('x^-n');
fit_model = fit(x([2 4]).',y([2 4]).',ft);
plot(x, y, '+', x, fit_model(x))
you can check the value of n from 'fit_model'
>> fit_model
fit_model =
General model:
fit_model(x) = x^-n
Coefficients (with 95% confidence bounds):
n = -1.327 (-3.497, 0.8423)

类别

Help CenterFile Exchange 中查找有关 Interpolation 的更多信息

标签

产品


版本

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by