• matlab练习程序(最小二乘多项式拟合)


    最近在分析一些数据,就是数据拟合的一些事情,用到了matlab的polyfit函数,效果不错。

    因此想了解一下这个多项式具体是如何拟合出来的,所以就搜了相关资料。

    这个文档介绍的还不错,我估计任何一本数值分析教材上讲的都非常清楚。

    推导就不再写了,我主要参考下面两页PPT,公式和例子讲的比较清楚。

    公式:

    例子:

    matlab代码如下:

    clear all;
    close all;
    clc;
    
    N=10;                %设置拟合阶数
    x=1:0.5:10;
    y=cos(x);           %生成待拟合点
    
    p=polyfit(x,y,N);   %使用matlab函数拟合数据
    
    xx=min(x):0.01:max(x);
    yy=polyval(p,xx);
                
    plot(xx,yy);        %画出拟合结果
    hold on;
    plot(x,y,'r.')
    
    %下面是使用公式来做最小二乘多项式拟合
    F=zeros(N+1,length(x));
    F(1,:)=1;
    for i=2:N+1
       for j=1:length(x) 
            F(i,j) = x(j)^(i-1);      
       end
    end
    F=F*F';
    
    [m ~]=size(F);
    Y=zeros(m,1);
    Y(1) = sum(y);
    for i=2:m
        for j=1:length(y)
            Y(i) = Y(i)+y(j)*x(j)^(i-1);
        end  
    end
    
    Re = FY;
    Re=Re(end:-1:1)';  %数组反序
    figure;
    plot(x,y,'r.')
    hold on;
    yyy=polyval(Re,xx);
    plot(xx,yyy,'g')
    
    p
    Re

    matlab的polyfit函数结果:

    自己的结果:

    在阶数较低的时候两种方法结果基本一致,阶数很高的时候,自己的方法结果就差一些了,matlab原生函数效果还是好一些啊。

     

     关注公众号: MATLAB基于模型的设计 (ID:xaxymaker) ,每天推送MATLAB学习最常见的问题,每天进步一点点,业精于勤荒于嬉

     打开微信扫一扫哦!

                                                                                                                          

  • 相关阅读:
    CodeForces 288A Polo the Penguin and Strings (水题)
    CodeForces 289B Polo the Penguin and Matrix (数学,中位数)
    CodeForces 289A Polo the Penguin and Segments (水题)
    CodeForces 540C Ice Cave (BFS)
    网站后台模板
    雅图CAD
    mbps
    WCF学习-协议绑定
    数据库建表经验总结
    资源位置
  • 原文地址:https://www.cnblogs.com/52geek/p/10093197.html
Copyright © 2020-2023  润新知