I have the following set of data:
x=[0 .1579 .3158 .4737 .6316 .7895 .9474 1.1053 1.2632 1.4211 1.5789 1.7368 1.8947 2.0526 2.2105 2.3684 2.5263 2.6842 2.8421 3]';
fx=[-.3637 .3164 -1.1263 -1.0672 .1076 1.8249 -.1899 1.3484 1.2583 3.2179 1.7378 3.6954 5.1611 6.7646 8.3733 8.1898 7.9968 10.2402 11.5248 16.6505]';
I have to fit a curve to this data, without using matlabs curve fitting toolbox. What are the best built in matlab functions to fit data like this?

 채택된 답변

Star Strider
Star Strider 2014년 11월 21일

0 개 추천

There are three other functions you can use to fit nonlinear data: nlinfit (Statistics Toolbox), lsqcurvefit (Optimization Toolbox), and fminsearch (built-in MATLAB function).
Do you have a model you want to fit? (It looks like a noisy exponential function, but the process that created it dictates the model you fit to it.)

댓글 수: 7

the cyclist
the cyclist 2014년 11월 21일
... or polyfit if you want to assume that fx is a polynomial function of x.
Andrew
Andrew 2014년 11월 21일
No, I just have the data provided. I've used polyfit, interp1, and regress already.
Image Analyst
Image Analyst 2014년 11월 21일
What do you want once you're all done: a formula (equation), or a smoothed or interpolated set of numbers? If you want numbers, you can use Savitzky-Golay (Signal Processing Toolbox) or conv() (base MATLAB) - either will smooth the data. If you want a formula you can use polyfit to get coefficients, and then use polyval to get actual numbers.
Andrew
Andrew 2014년 11월 21일
I want a curve that somewhat accurately fits the curve. It doesn't have to be exact, but the closer the fit the better. I just can't use the curve fitting toolbox.
This produces an acceptable fit:
x=[0 .1579 .3158 .4737 .6316 .7895 .9474 1.1053 1.2632 1.4211 1.5789 1.7368 1.8947 2.0526 2.2105 2.3684 2.5263 2.6842 2.8421 3]';
fx=[-.3637 .3164 -1.1263 -1.0672 .1076 1.8249 -.1899 1.3484 1.2583 3.2179 1.7378 3.6954 5.1611 6.7646 8.3733 8.1898 7.9968 10.2402 11.5248 16.6505]';
fitfn = @(b,x) b(1).*exp(b(2).*x)+b(3);
B0 = rand(3,1);
B = nlinfit(x, fx, fitfn, B0);
figure(1)
plot(x, fx, 'pb')
hold on
plot(x, fitfn(B,x), '-r')
hold off
grid
The ‘B’ vector are the estimated parameters. If you need statistics on the parameters or the fit, you can ask nlinfit for the appropriate outputs and use nlparci and nlpredci. You can also use fitnlm with ‘fitfn’ and get even more statistics as part of the process without having to do anything else.
Andrew
Andrew 2014년 11월 21일
That's what I was looking for. Thanks a lot
Star Strider
Star Strider 2014년 11월 21일
편집: Star Strider 2014년 11월 21일
My pleasure!
The sincerest expression of appreciation here on MATLAB Answers is to Accept the answer that most closely solves your problem.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Get Started with Curve Fitting Toolbox에 대해 자세히 알아보기

태그

질문:

2014년 11월 21일

편집:

2014년 11월 21일

Community Treasure Hunt

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

Start Hunting!

Translated by