• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

MATLAB的曲线拟合

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

MATLAB软件提供了基本的曲线拟合函数的命令。

曲线拟合就是计算出两组数据之间的一种函数关系,由此可描绘其变化曲线及估计非采集数据对应的变量信息。

 

1.线性拟合函数:regress()

调用格式:  b = regress(y,X)

           [b,bint,r,rint,stats] = regress(y,X)

           [b,bint,r,rint,stats] = regress(y,X,alpha)

说明:b=[ε; β],regress(y,X)返回X与y的最小二乘拟合的参数值β、ε,y=ε+βXβ是p´1的参数向量;ε是服从标准正态分布的随机干扰的n´1的向量;y为n´1的向量;X为n´p矩阵。

      bint返回β的95%的置信区间。

      r中为形状残差,rint中返回每一个残差的95%置信区间。Stats向量包含R2统计量、回归的F值和p值。

例:

      x=[ones(10,1) (1:10)\'];

      y=x*[10;1]+normrnd(0,0.1,10,1);

      [b,bint]=regress(y,x,0.05)

 

      结果得回归方程为:y=9.9213+1.0143x

 

2.多项式曲线拟合函数:polyfit()

调用格式: p = polyfit(x,y,n)

          [p,s] = polyfit(x,y,n)

说明:n:多项式的最高阶数;

  xy:将要拟合的数据,用数组的方式输入;

  p:为输出参数,即拟合多项式的系数;

多项式在x处的值y可用下面程序计算:

                                y=polyval(p,x)

例:

       x=1:20;

       y=x+3*sin(x);

       p=polyfit(x,y,6)

       xi=linspace(1,20,100);

       z=polyval(p,xi);        % 多项式求值函数

       plot(x,y,\'o\',xi,z,\'k:\',x,y,\'b\')

       legend(\'原始数据\',\'6阶曲线\')

 

3.一般的曲线拟合curvefit()

调用格式: p=curvefit(‘Fun’,p0,x,y)

说明:Fun: 表示函数Fun(p,data)M函数文件;

  xy:将要拟合的数据,用数组的方式输入;

  p0:  表示函数待拟合参数的初值;

 

4.自定义函数拟合nlinfit()

调用格式:[beta,r,J]=nlinfit(x,y,’fun’,beta0)

说明:    beta:返回函数\'fun\'中的待定常数;

           r:    表示残差;

           J:    表示雅可比矩阵。

           x,y:  要拟合的数据;

           fun: 自定义函数;

           beta0: 待定常数初值;

例:化工生产中获得的氯气的级分y随生产时间x下降,假定在x≥8时,y与x之间有非线性模型:

     现收集了44组数据,利用该数据通过拟合确定非线性模型中的待定常数。

     x            y                   x            y                   x            y

     8            0.49               16           0.43               28           0.41

     8            0.49               18           0.46               28           0.40

     10           0.48               18           0.45               30           0.40

     10           0.47               20           0.42               30           0.40

     10           0.48               20           0.42               30           0.38

     10           0.47               20           0.43               32           0.41

     12           0.46               20           0.41               32           0.40

     12           0.46               22           0.41               34           0.40

     12           0.45               22           0.40               36           0.41

     12           0.43               24           0.42               36           0.36

     14           0.45               24           0.40               38           0.40

     14           0.43               24           0.40               38           0.40

     14           0.43               26           0.41               40           0.36

     16           0.44               26           0.40               42           0.39

     16           0.43               26           0.41

首先,定义非线性函数的m文件:fff6.m

     function  yy=model(beta0,x)

     a=beta0(1);

     b=beta0(2);

     yy=a+(0.49-a)*exp(-b*(x-8));

拟合程序:

     x=[8.00 8.00 10.00 10.00 10.00 10.00 12.00 12.00 12.00 14.00 14.00 14.00... 

        16.00 16.00 16.00 18.00 18.00 20.00 20.00 20.00 20.00 22.00 22.00 24.00...  

        24.00 24.00 26.00 26.00 26.00 28.00 28.00 30.00 30.00 30.00 32.00 32.00...

        34.00 36.00 36.00 38.00 38.00 40.00 42.00]\';

     y=[0.49 0.49 0.48 0.47 0.48 0.47 0.46 0.46 0.45 0.43 0.45 0.43 0.43 0.44 0.43...

        0.43 0.46 0.42 0.42 0.43 0.41 0.41 0.40 0.42 0.40 0.40 0.41 0.40 0.41 0.41...

        0.40 0.40 0.40 0.38 0.41 0.40 0.40 0.41 0.38 0.40 0.40 0.39 0.39]\';

     beta0=[0.30 0.02];

     betafit = nlinfit(x,y,\'sta67_1m\',beta0)

结果:betafit =

                0.3896   0.1011

       即:a=0.3896 ,b=0.1011 拟合函数为:

 

4.多元非线性拟合

(1).nlinfit()

调用格式:[beta,r,J]=nlinfit(X,Y,\'fun\',beta0)

说明:    beta:返回函数\'fun\'中的待定常数;

           r:    表示残差;

           J:    表示雅可比矩阵。

           X,Y:  要拟合的多元数据矩阵;

           fun: 自定义函数;

           beta0: 待定常数初值;

例:  

      x1 = [1150,1000,900,850,700,625,550,475,3350,3500,5900,

            5800,5700,4600,4625,4725,11650,11200,11200 ]\';
      x2 = [175,100,25,0,75,100,150,200,50,600,500,

            225,100,1225,1600,2000,1200,1000,1550 ]\';
      x  = [x1,x2];
      y  = [1.44E-02,1.80E-02,6.08E-02,5.59E-02,3.42E-02,7.74E-03,1.17E-03,

            6.16E-03,1.91E-04,1.91E-04,1.02E-03,2.83E-03,9.52E-05,3.77E-04,

            2.70E-04,1.87E-04,3.98E-04,4.04E-04,4.02E-04 ]\';
      beta0 = [0.1 0.1 1 1];
     
 myfun = @(a,x)4030.0./pi./4.2./(a(1).*x(:,1).^a(2).*a(3).*x(:,1).^a(4))
.*exp(-(x(:,2).^2./2./(a(1).*x(:,1).^a(2)).^2+30.0.^2./2./(a(3).*x(:,1).^a(4)).^2));
      [a,b,c,d,res] = nlinfit(x,y,myfun,beta0);

      a,res
      plot3(x1,x2,y,\'o\',x1,x2,myfun(a,x))

  % 值的选取没有定法,与实际问题的模型有关。

 

(2).regress()

线性的不行,用二次函数。
      format long
      A=[...
      0.2 13.6 8503 251 27.4 
      7.7 9.9 3658 314 13.9 
      5.8 10.8 7307 433 26.8 
      7.70 9.70 6717 257 23.8 
      7.5 9.8 7609 280 21.7 
      5.6 11.3 4271 533 14.6 
      6.2 7.6 52169 48 225 
      3.23 9.16 16516 80 44.1 
      0.33 11.3 17366 85 54.1 
      0.14 9.5 14245 91 56.6 
      5.5 9.7 18184 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap