我试图在不使用polyfit或polyval的情况下进行线性回归。这是一个长项目的一部分,我真的想在不使用这些功能的情况下完成它。我想我已经找到了polyfit部分,但不知道如何补偿polyval。这是我到目前为止:
x = [1 2 3 4 5 6 7 8 9 10]';
y = [2.50922 2.12187 1.88092 1.94206 2.25718 2.79674 3.22682 4.09267 4.98531 6.37534]';
V = [x.^3 x.^2 x x.^0];
c = V \ y; % same as c = (V' * V) \ (V' * y)
%To plot the points and the best fitting curve:
xs = (0:0.1:11)';
plot( x, y, 'o' )
hold on
plot( xs, polyval( c, xs ) );
这是补偿polyfit的正确方法吗?如果不使用polyval,我该怎么做?
任何帮助将不胜感激!
答案 0 :(得分:0)
你找到系数y=Vc
,你现在知道V
和c
的方程式,所以用它来找到相应的y
:
yFit=[xs.^3 xs.^2 xs xs.^0]*c;
您是否对使用c
查找V\y
的设置感到满意,您了解其工作原理/原因吗?
编辑:要以编程方式适应更高级别的功能,您可以执行以下操作。希望很明显发生了什么。
x = [1 2 3 4 5 6 7 8 9 10]';
y = [2.50922 2.12187 1.88092 1.94206 2.25718 2.79674 3.22682 4.09267 4.98531 6.37534]';
V=[x.^0];
xs = (0:0.1:11)';
Vfit=[xs.^0];
for i=1:length(x)
V = [x.^i V];
c = V \ y;
Vfit = [xs.^i Vfit];
yFit=Vfit*c;
plot(x,y,'o',xs,yFit,'--')
drawnow
pause
end
在第一个循环中,这适用于数据的直线,第二次拟合二次,然后是立方,依此类推。