Higher order polynomial regression

7 Ansichten (letzte 30 Tage)
Marina
Marina am 18 Mai 2014
Kommentiert: Image Analyst am 19 Mai 2014
I have to run a regression of order 5. My X matrix is
102.1750
108.0515
102.1785
100.9413
102.6634
My Y matrix is
0
5.4810
7.6267
24.7082
7.7284
Both X and Y are approxiately 20x1, I just wanted to give an idea how they look like.
I have tried the following:
1. Beta=pinv(X'*X)*(X'*Y);
2. Beta=(X'*X)\(X'*Y);
3. Beta=(X*Y);
4. Beta=polyfit(X,Y,5);
Expected=polyval(Beta,X);
The results are very different. Additionally polyfit/polyval shows the following warning:"Warning: Polynomial is not unique; degree >= number of data points"
Any ideas or suggestions of what am I doing wrong or how or what else can I try? What is the correct way to do it?

Akzeptierte Antwort

Star Strider
Star Strider am 18 Mai 2014
Give polyfit your entire (20x1) X and Y arrays, not simply the first five values.
Do that, then only use these lines to do your regression:
Beta=polyfit(X,Y,5);
Expected=polyval(Beta,X);
That should work.
  2 Kommentare
Marina
Marina am 19 Mai 2014
I still get this warning "Polynomial is not unique; degree >= number of data points. " Is there any other way?
Image Analyst
Image Analyst am 19 Mai 2014
You're not passing in all 20 points. You're just passing in 5 of them!!! Prove it by doing this
whos X
whos Y

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Image Analyst
Image Analyst am 18 Mai 2014
coefficients = polyfit(x, y, 5);
% Put training points back in
yFitted = polyfit(coefficients, x);
plot(x,y, 'bs');
hold on
plot(x, yfitted, 'rd-', 'LineWidth', 3);
grid on;

Kategorien

Mehr zu Polynomials finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by