分享

曲线拟合法的Mat lab 实现

 hi! 2011-04-08
曲线拟合法的Mat lab 实现

  罗成汉1, 刘小山2

  ( 1. 集美大学信息工程学院 福建厦门 361021; 2. 广州海运集团公司 广东广州 510220)

  摘 要: 介绍最小二乘曲线拟合法的基本原理, 对最小二乘曲线拟合法的Matlab 实现方法进行研究, 其实现方法非常方便、简单; 并给出曲线拟合Mat lab 实现的源程序。给出一个仿真测试实例, 仿真结果表明该方法是可行的、有效的。

  1 引 言

  试验数据的正确处理, 关系到是否能达到试验目的, 得出明确结论。传统的数据处理方法, 很难得到一条很好地适应所有点的曲线, 同时也无法估计所得曲线的精度, 由此所确定的特征值就可能有较大的误差, 且没有建立起由这些点构成曲线的数学模型, 直接影响利用数学方法进行解析分析。在进行试验数据的分析时, 通常可采用曲线拟合法, 曲线拟合方法的目的是寻找一条光滑曲线, 他在某种准则下最佳地拟合数据。常用的曲线拟合方法有最小二乘法、契比雪夫法及插值法等。考虑到一般测试仪器的实际测试精度要求、微机的数据运算存储能力及实际调试中的经验, 实际测试中如受条件限制, 原始数据量有限, 为保证测试精度, 可以用插值法增加数据, 以使插值后的拟合曲线更接近实际状态。插值的方法可采用拉格朗日插值、牛顿插值、样条插值等, 通常是采用具有一定精度而运算量相对较小的分段二次插值, 即分段抛物线插值。

  本文介绍最小二乘曲线拟合法的基本原理, 就其Matlab 的实现方法进行研究, 给出曲线拟合Matlab实现的源程序, 并进行仿真测试, 对测试误差进行分析。

  2 曲线拟合法

  曲线拟合问题是指:已知N + 1 个点( xi, yi) , i= 0, 1, 2, ?, n, 其中x i 互不相同, 寻求函数f ( x) , 使f ( x) 与所有的数据点最接近。也可称为数据的平滑问题。曲线拟合最常用的方法是线性最小二乘法, 其基本的思路是:f ( x) = Σmi= 0 a iki ( x)其中: ki ( x) 是事先选定的一组函数; a i 是待定系数, ( i= 0, 1, 2?m, m< n) 。寻求a 0, a1 , a 2, ?, am, 使得J = Σmi= 0 ( f ( x i) -yi) 2 最小, 即称为最小二乘法准则[ 1]。当选取f ( x) = a0+ a1x 称为线性拟合;f ( x) = a0+ a 1x+ a2x2?+ amxm 称为多项式拟合;当选取f ( x) = a0+ a1ex 称为指数拟合。在某些场合下可采用解线性方程组来求曲线拟合。以多项式拟合为例, 选取f ( x) = a 0+ a 1x+ a2x 2?+ amxm, 已知数据( xi, yi) , i= 0, 1, 2, ?, n, 将( xi , yi) 依次代入上述多项式得到如下线性方程组:Σmk= 0 akxik , i= 0, 1, 2, ?, n其中: a k 为变量。其矩阵式表示为:可记作RA= Y, 求解以上线性方程组可得ak。用Matlab求解该线性方程非常简单, 只需编写简单的程序就能实现。其他拟合方法与多项式拟合类似, 只是在构造矩阵选取的函数不同而已。如指数拟合, 其矩阵式表示为:

  3 最小二乘曲线拟合法的Matlab 实现

  采用Basic, For tran, C 等编程语言来实现曲线拟合, 需要编写非常复杂的算法程序, 对一般的工程技术人员而言, 将是一个非常艰巨的任务。而Matlab 语言是集数值计算、符号运算和图形处理等强大功能于一体的科学计算语言, 适用于工程应用各领域的分析、设计和复杂计算, 而且他易学易用, 不要求使用者具备高深的数学知识和编程技巧。在此方面, Matlab 具有一般高级语言无法比拟的优势[ 2]。在Matlab 环境中, 他提供了许多函数来实现曲线拟合, 下面介绍曲线拟合法的Matlab 实现方法。

  ( 1 ) 使用Matlab 的最优化工具箱中的lsqcurvefit ( ) 函数来实现该函数的调用格式为:[ a, J] = lsqcurvefit ( 原型函数名, a0 , x, y)其中: a 0 为最优化的初值; x, y 为原始输入输出数据矢量。调用该函数则将返回待定系数向量a , 以及在此待定系数下的目标函数的值J 。

  ( 2) 采用线性方程组编程实现根据上述的线性方程组的构造原则, 针对不同的原型函数, 他的构造矩阵不同, 编写的程序不同。以指数拟合为例, 其Matlab 实现方法的源程序如下所示:

  function f= funlch3 ( x, y)t= [ ones ( size ( x) ) exp ( x) ] ;a= t\ y针对多项式拟合的实现, 除了上述方法外, 还可采用多项式拟合函数来实现。Matlab 提供多项式拟合函数:p = ployfit( x, y, m)其中: 2 个输入参数x, y 是矢量, 表示已知的原始的输入值和输出值; m 为拟合多项式的次数。当m = 1 时为线性拟合。以及求解多项式拟合的测试函数:y1 = polyval( p , x1 )其中: x1 为测试数据矢量;y1 为多项式拟合曲线的输出矢量。

  4 应用实例

  假设一组测试数据x 和y:x = 0∶0. 5∶10;y = 0. 1* exp( - 0. 2* x) + 0. 5* exp( -0. 2* x) * sin( 1. 5* x ) ;该测试数据满足函数原型为:y( x) = a1ea2x + a 3ea4xsin( a5x )其中: ai 为待定系数。采用最小二乘曲线拟合的目的就是获得这些待定系数, 使得目标函数的值为最小。使用函数lsqcurvefit ( ) 来实现曲线拟合的步骤:

  ( 1) 根据原型函数, 编写如下的原型函数:function y= f unlch6( a, x)y = a ( 1) * exp( a ( 2) * x)+ a ( 3) * exp ( a( 4) * x) . * sin( a( 5) * x) ;

  ( 2) 使用函数lsqcurvefit( ) 来实现曲线拟合:x= 0∶0. 5∶10;y= 0. 1* exp( - 0. 2* x) + 0. 5* exp( - 0. 2* x) . * sin( 1. 5* x) ; %输入测试数据[ xx, r es]= lsqcurvefit( @funlch6, [ 1, 1, 1, 1, 1] , x, y) ;%进行曲线拟合计算可得到:xx= [ 0. 0998, - 0. 1994, 0. 5002, - 0. 2001, 1. 5000]r es= 1. 2398e- 007.由此可知, 计算出的待定系数xx 接近理论值a=[ 0. 1, - 0. 2, 0. 5, - 0. 2, 1. 5] , 精度较高。

  ( 3) 测试数据可视化处理:

  x1= 0∶0. 1∶10;

  y1= funlch6 ( xx, x1) ; %拟合曲线计算

  y2= funlch6 ( xx, x) ; %拟合曲线的计算值

  y3= ( y2- y) . / y; %计算相对误差

  plot ( x1, y1, x, y, '* ') ; %画出拟合曲线可得到拟合曲线如图1 所示。

  图1 拟合曲线图

  5 结 语

  本文介绍最小二乘曲线拟合法的基本原理, 就其Matlab 的实现方法进行研究, 给出曲线拟合Matlab实现的源程序, 并进行仿真测试。采用Matlab 对实验数据进行处理, 能够快捷的得到图文并茂的比较令人满意的处理结果。在许多工程分析和科学研究中,Matlab 软件正起着越来越重要的作用。可以预见,Matlab 软件在工程界将获得日益广泛的应用, 必将使他成为工程人员必备的工具。

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多