数据拟合算法c语言实现,数据拟合算法剖析及C语言实现.doc

数据拟合算法剖析及C语言实现

数据拟合算法剖析及C语言实现

[摘要]数据拟合在很多地方都有应用,主要用来处理实验或观测的原始离散数据。通过拟合可以更好的分析和解释数据。在引用前人的算法基础上,采用正交多项式最小二乘法进行曲线拟合,通过实验对算法进行了分析,并给出了C语言实现的代码。

[关键词]数据拟合 正交多项式 最小二乘法 算法分析 代码实现

中图分类号:TP301文献标识码:A文章编号:1671-7597(2009)0920093-02

在科学实验和工程实践中,会产生很多原始数据,为更好地分析和解释这些数据,通常用曲线来进行拟合。借助于数据拟合可以很好地获取数据的整体特征,但拟合的方式、次数都将影响最终的效果。一般来说,拟合效果是通过误差来判断的。下文先是介绍了拟合算法,随后根据实验数据,从误差角度进行了分析。

一、算法分析

曲线拟合是数值逼近的一种方法。它用带有参数的简单函数逼近待定函数,并根据函数在观察点的取值状况确定参数。给定一组观测值,(xi,yi)(I=0,1,…n),选取一组简单函数φk(x)(k=0,1,…n)作为基函数,通过确定拟合模型φ(x)=μkφk(x)的待定参数μk,使φ(x)与观测值(xi,yi)在总体上尽可能接近。这种确定φ(x)的方法称为离散数据的曲线拟合。

离散数据的曲线拟合需要解决两个问题:

1.合模型的选取。在线性模型中,拟合函数是一些基函数的线性组合,选取一组适当的基函数是决定拟合效果好坏的关键因素。一般来说,需要对问题进行仔细的分析,根据问题本身的性质决定基函数的形式。如果没有与问题有关的背景信息,则可以通过分析观测数据的分步规律,选择拟合模型的基函数。通常基函数可以取多项式函数、三角函数、指数函数和样条函数等。本文主要采用多项式函数。

2.型参数的确定。模型参数选择的原则是使误差在拟合标准下取极小值,不同的拟合标准决定了不同的参数确定方法。常见的拟合标准有:最大误差绝对值最小、误差绝对值之和最小、误差平方和最小。前两项虽然很直观,但是用来确定参数却很困难;第三个就是通常所说的最小二乘标准,使用比较方便,采用最小二乘标准的拟合也称为最小二乘拟合。本文即采用最小二乘标准。

在实际问题中,怎样由观测的数据设计和确定“最贴近”的拟合曲线?关键在于选择适当的拟合曲线类型,有时根据专业知识和工作经验即可确定拟合曲线类型;在对拟合曲线一无所知的情况下,不妨先绘制数据的粗略图形,或许从中观测出拟合曲线的类型;更一般地,对数据进行多种曲线类型的拟合,并计算均方误差,用数学试验的方法找出在最小二乘意义下的误差最小的拟合函数。

多项式拟合的基函数的模型虽然形式简单,但是法方程组的系数矩阵是严重病态的矩阵,将影响拟合计算的数值稳定性。

为了克服多项式拟合中病态的系数矩阵,可以另外选择一组多项式基函数,使它对应的系数矩阵为对角阵,这就是正交多项式拟合。以下主要介绍正交多项式拟合算法,并通过实验程序,对误差加以分析。

二、正交多项式最小二乘法数据拟合算法

以下是通过给定的一组测试数据,求解正交多项式进行数据拟合的算法。其中(x,y)是给定的一组观测值,μk是最终多项式的系数。||δ||22是拟合误差。

三、试验程序实现及结果分析

以下是用C编写的正交多项式最小二乘数据拟合的程序实现代码,主要用来产生一些试验数据,为后续的结果分析做准备。

试验数据:

试验结果表明针对上述实例,只需5次拟合就可达到精度,即5次拟合精度和6、7、8、9次拟合精度相同。可见并不是拟合次数越高拟合效果越好。所以一般情况下,拟合次数限制在20次内。

针对前一算法,继续测试,分别取N=20,200,2000,20000,M=1015。

测试数据产生来源:y=x-e-x,从x0=0开始,取步长h=0.1的若干个数据点。

测试结果如下:取N=2000,取M=10,运行结果如图1-2所示;取N=2000,取M=15,运行结果如图1-3所示。

由以上数据可以看出,随着数据量的增加,误差绝对值最大值也在增大。

此外,改变步长,即h,对误差平方和和误差绝对值和的影响较显著,但对误差绝对值最大值影响不显著。当测试数据点数超过万次,增大步长会降低误差平方和和误差绝对值和。

如:取M=15,N=20000,H=0.1时,误差为:dt(0)=4.403835e+000dt(1)=5.721071e+001 dt(2)=8.884759e-001;而取M=15,N=20000,H=0.5时,误差为:dt(0)=1.510947e+000dt(1)=1.596108e+001dt

(2)

你可能感兴趣的:(数据拟合算法c语言实现)