与V矩阵拟合

时间:2014-04-24 03:12:56

标签: matlab linear-regression

我试图在不使用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,我该怎么做?

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

你找到系数y=Vc,你现在知道Vc的方程式,所以用它来找到相应的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

在第一个循环中,这适用于数据的直线,第二次拟合二次,然后是立方,依此类推。