Matlab中的多项式回归和绘图

时间:2015-11-08 19:00:46

标签: matlab plot polynomials

给定一组点x和一组值y,我试图计算最小平方意义上最适合P(x) = y的多项式。该函数应显示Vandermonde矩阵,输出多项式c应绘制为函数形式p(x)= c0 * x ^ 0 + c1 * x ^ 1 + c2 * x ^ 2 + .. ...... + cn-1 ^(n-1)。

我想清楚地看到绘制函数的同一图上的点(xi,yi)。

这是我到目前为止所尝试的内容:

function c = interpolation(x, y)
    n = length(x);
    V = ones(n);
    for j = n:-1:2
         V(:,j-1)  = x.*V(:,j);
    end
     c = V \ y;
     disp(V) 
    for i = 0:n-1
      fprintf('c%d= %.3f\n', i, c(i+1));
    end

    x = linspace(-1,2,-100);
    y = polyval(c,x);

    x0 = x;
    y0 = polyval(c,x0);

    plot(x,y,'b-')
    hold on; 
    plot(x0,y0,'ro') 
    hold off;

1 个答案:

答案 0 :(得分:1)

如果您还不知道,请查看polyvallinspace。另请查看polyfit,它为您提供给定度数的插值。这是您更正后的代码:

function [p,V] = interpolation(x0,y0,N)

    % format the inputs as columns
    x0 = x0(:);
    y0 = y0(:);

    % Build up the vandermonde matrix
    n = numel(x0);
    disp('Vandermonde matrix:');
    V = fliplr(bsxfun( @power, x0, 0:(n-1) ))

    % compute the coefficients of the fitting polynomial
    p = V \ y0;

    % plot the polynomial using N values
    x = linspace( min(x0), max(x0), N );
    y = polyval(p,x);

    plot(x,y,'b-'); hold on;
    plot(x0',y0','ro'); hold off;

end

注意:与索引相比,多项式的系数(以p返回)相反,即它们按降低功率排序。