• MATLAB多项式及多项式拟合


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

    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的拟合效果图,按任意键,会看到最佳拟合的效果图.

  • 相关阅读:
    (转)Android 判断用户2G/3G/4G移动数据网络
    Android Studio导入第三方类库的方法
    jxbrowser java代码直接调用js代码
    jxbrowser 实现java 和 js互相调用
    jxbrowser 实现自定义右键菜单
    jxbrowser 监听所有网络请求 jxbrowser 系列教程2
    JxBrowser开启调试模式,JxBrowser debug
    MySQL查看数据库表容量大小
    thinkphp5使用PHPMailler发送邮件
    phpstorm psr2样式.xml
  • 原文地址:https://www.cnblogs.com/tensory/p/6590788.html
Copyright © 2020-2023  润新知