多项式均表示为数组形式,数组元素为多项式降幂系数

1.      polyval函数

求多项式在某一点或某几个点的值.

p = [1,1,1];%x^2+x+1

x = [-1,0,1];y = polyval(p,x);

另外求函数在某一点或某几个点的值可以用函数feval.

x = [-1,0,1];

y = feval(@(x)exp(x),x);%注意用的乘法和乘法都改用.运算符

2.      roots函数

求多项式的零点.

p = [1,-3,2,0];x0 = roots(p);

3.      polyfit函数

用多项式拟合一组数据,返回多项式降幂系数.

xa = [0.1 0.2 0.15 0 -0.2 0.3];ya = [0.950.84 0.86 1.06 1.50 0.72];p = polyfit(xa,ya,3);

上述代码是对xa和ya进行2次多项式拟合.

如何找到最佳的拟合次数?

定义误差,以不同的多项式次数进行拟合,并求出对应的误差,找到误差最小的拟合即可.如下是对数组xa和ya进行拟合的代码,尝试了多项式拟合的次数分别为1~4(拟合次数太高可能出现龙格现象).

xa = [0.1 0.2 0.15 0 -0.2 0.3 -0.1 ];

ya = [0.95 0.84 0.86 1.06 1.50 0.72 1.0];





plot(xa,ya,'r*');

hold on;





err0 = 9999999;





syms x;

for k=1:4

    p = polyfit(xa,ya,k);

    y = 0;

    for i=1:k+1

        y = y + p(i) * x^(k-i+1);

    end

    xb = min(xa):0.01:max(xa);

    yb = subs(y,x,xb);

    plot(xb,yb);

    hold on;

    

    new_ya = subs(y,x,xa);

    n = length(xa);

    

    errk = 0;

    errk = errk + sum(abs(new_ya-ya));

    if errk < err0

        err0 = errk;

        remember = k;

    end

end





pause;





hold off;





plot(xa,ya,'r*');

hold on;





p = polyfit(xa,ya,remember);

y = 0;

for i=1:k+1

    y = y + p(i) * x^(k-i+1);

end

vpa(y,4)

xb = min(xa):0.01:max(xa);

yb = subs(y,x,xb);

plot(xb,yb);

在命令窗口或保存为m脚本文件运行上述代码,会看到一个图形出现,是次数分别为1~4的拟合效果图,按任意键,会看到最佳拟合的效果图.

05-11 19:24