zoukankan      html  css  js  c++  java
  • MATLAB 最小二乘多项式拟合

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

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

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

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

    公式:

    例子:

    matlab代码如下:

     1 clear all;
     2 close all;
     3 clc;
     4 
     5 N=10;                %设置拟合阶数
     6 x=1:0.5:10;
     7 y=cos(x);           %生成待拟合点
     8 
     9 p=polyfit(x,y,N);   %使用matlab函数拟合数据
    10 
    11 xx=min(x):0.01:max(x);
    12 yy=polyval(p,xx);
    13             
    14 plot(xx,yy);        %画出拟合结果
    15 hold on;
    16 plot(x,y,'r.')
    17 
    18 %下面是使用公式来做最小二乘多项式拟合
    19 F=zeros(N+1,length(x));
    20 F(1,:)=1;
    21 for i=2:N+1
    22    for j=1:length(x) 
    23         F(i,j) = x(j)^(i-1);      
    24    end
    25 end
    26 F=F*F';
    27 
    28 [m ~]=size(F);
    29 Y=zeros(m,1);
    30 Y(1) = sum(y);
    31 for i=2:m
    32     for j=1:length(y)
    33         Y(i) = Y(i)+y(j)*x(j)^(i-1);
    34     end  
    35 end
    36 
    37 Re = FY;
    38 Re=Re(end:-1:1)';  %数组反序
    39 figure;
    40 plot(x,y,'r.')
    41 hold on;
    42 yyy=polyval(Re,xx);
    43 plot(xx,yyy,'g')
    44 
    45 p
    46 Re

    matlab的polyfit函数结果:

    自己的结果:

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

  • 相关阅读:
    Ext.FormPanel-----FieldSet的用法
    DAO层,Service层,Controller层、View层
    PageProxy分页的实现
    Layout布局(补充)
    Ext--Layout(布局)
    DirectEvents用法
    Linq的使用
    字符串注入攻击
    winform(C#)里弹出“确定”“取消”对话框
    C#的数组
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/13645689.html
Copyright © 2011-2022 走看看