曲线拟合

曲线拟合
曲线拟合

一种分段曲线拟合方法研究

摘要:分段曲线拟合是一种常用的数据处理方法,但在分段点处往往不能满足连续与光滑.针对这一问题,本文给出了一种能使分段点处连续的方法.该方法首先利用分段曲线拟合对数据进行处理;然后在相邻两段曲线采用两点三次Hermite插值的方法,构造一条连结两条分段曲线的插值曲线,从而使分段点处满足一阶连续.最后通过几个实例表明该方法简单、实用、效果较好.

关键词:分段曲线拟合Hermite插值分段点连续

Study on A Method of Sub-Curve Fitting

Abstract:Sub-curve fitting is a commonly used processing method of data, but at sub-points it often does not meet the continuation and smooth, in allusion to to solve this problem, this paper presents a way for making sub-point method continuous. Firstly, this method of sub-curve fitting deals with the data; and then uses the way of t wo points’ cubic Hermite interpolation in the adjacent, structures a interpolation curve that links the two sub-curves, so the sub-point meets first-order continuation; lastly, gives several examples shows that this method is simple, practical and effective.

Key words:sub-curve fitting Hermite interpolation sub-point continuous

前言

数据拟合是一种重要的数据处理方法,其中最常用的是多项式曲线拟合.然而当数据点较多时,多项式阶数太低,拟合精度和效果不太理想,要提高拟合精度和效果就需要提高曲线阶数,但阶数太高又带来计算上的复杂性及其他方面的不利.因此,如果只采用一种多项式曲线函数拟合较多的数据点,难以取得较好的拟合精度和效果.为有效地解决上述问题,一般采用分段曲线拟合.以往的分段曲线拟合方法主要是针对在自然科学领域中测量的数据而使用的拟合方法,这些数据的变化一般都遵循一定的规律.因此,在对这些测量数据拟合时,传统的分段曲线拟合方法一般是先根据主观经验对数据分段, 然后进行拟合.但是对于有些实际问题的数据,比如社会、经济生活中的大量统计数据,这些数据变化的机理一般非常复杂,往往不像物理定律那样有着严格的规律,所以变化的不确定性很强.因此,传统的分段曲线拟合根据主观经验对数据进行分段的做法就显现出明显地不足.针对这种不足,国内外许多文献也讨论过,文献[1]研究的是最小二乘法在曲线拟合中的实现,给出了最小二乘法在多元正交基函数拟合中的计算机实现方法,以常见的二次曲线拟合为例说明了程序编制的要点,在实验的数据处理中具有实用价值;文献[2]讨论分段最小二乘曲线拟合方法,本文在一般最小二乘的基础上提出分段最小二乘曲线拟合的方案,讨论了连接分段拟合曲线的方法,并且给出分段最小二乘多项式拟合的计算方法;文献[4]主要介绍基于最小二乘原理的分段曲线拟合法,在最小二乘的基础上,运用实测数据点的分段曲线拟合法,探讨相应的模型以及用不同类型的曲线拟合同时拟合数据点的具体应用,对一实例,应用MATLAB编程设计,完成模型的求解、显著性检验等,可以得到拟合精度比较高的拟合曲线,该方法原理简便,其模型易用MATLAB编程求解;文献[5]研究的是基于最小二乘法的分段三次曲线拟合方法研究,多项式曲线拟合是一种较常用的数据处理方法,但当数据点较多时,只采用一种多项式曲线函数拟合所有数据点难以得到较好的拟合效果,针对传统分段曲线拟合方法中对数据点分段时经验成分较多的不足,提出了一种基于最小二乘法原理的分段三次曲线拟合方法,建立三次拟合曲线方程,通过实际数据的检验,验证了该方法的拟合效果;文献[6,7,8]主要研究基于分段三次曲线拟合的广州周发案量预测,随着城市化进程的不断加快,城市人口不断增多,广州市未来治安形势预警,支持政府部门和政法部门关于治安工作的决策,首先需要对未来时期的发案量做出比较精确的预测,由于目前广州市方案量统计数据比较少,且发案量受农历春节影响较明显,针对传统时间序列预测方法在此情况下应用不足,提出了基于分段三次曲线拟合的周发案量预测模型,并给出了具体的建模、计算步骤,最后通过实际数据的检验,证明了方法预测效果较好;文献[9]提出了分段函数的光滑方法及其在曲线拟合中的应用,在分析复杂实验数据时,采用分段曲线拟合方法,利用此方法在段内可以实现最佳逼近,但在段边界上却可能不满足连续性与可导性.

为了克服这种现象,本文主要研究一种能使段边界连续的方法,具有一定的理论和实际意义.在前人的基础上,本文总结分段曲线拟合的方法与步骤,介绍了分段三次曲线的拟合方法和两点三次Hermite插值,然后讨论如何利用Hermite插值方法使得分段拟合曲线在连接点处满足连续方法,最后通过一些实例应用,表明本文所介绍的方法具有一定的应用价值.

1 最小二乘曲线拟合

1.1 最小二乘法[1]

令待求的未知量为12,,,t a a a ,它们可由()n n t ≥个直接测量12,,,n y y y 通过下列函数关系求得:

11122212331212(,,,)(,,,)(,,,)(,,,)

t t t n n t y f a a a y f a a a y f a a a y f a a a ====

若j a 为真值,由上述已知函数求出真值j y ,若其测量值为*j y ,则对应的误差为

*,(1

,2,)j j j y y j n σ=-= .最小二乘法可定量表示为:

2

1min n

j

j σ

==∑ (1.1.1)

对不等精度的测量,应加上各测量值的权重因子j p ,即:

2

1

min n

j j

j p σ

==∑ (1.1.2)

最小二乘法是在随机误差为正态分布时,由最大似然法推出的这个结论.它可使测

量误差的平方和最小,因此被视为从一组测量值中求出一组未知量的最可信赖的方法.

1.2 最小二乘多项式曲线拟合的基本原理[2]

1.2.1 线性拟合原理

将拟合函数取线性函数是一种简单的数据拟合方法,将数据点

1122(,()),(,()),,(,())m m x f x x f x x f x

确定线性拟合函数

()x a bx ?=+ (1.2.1.1) 称为对数据的线性拟合。对于线性拟合问题,需要求函数

2

(,)1[()]

m

a b k k k S a b x y ==+-∑ (1.2.1.2) 的最小值点,该问题的几何背景是寻求一条直线,使该直线与数据表所确定的平面散点

的纵向距离的平方和最小,如图1.2.1-1所示.

(图1.2.1-1)

由函数对两个变量求导得:

1

2[()],m

k k k S

a bx y a =?=+-?∑

(1.2.1.3) 1

2[()],m

k k k k S

a b x y x b =?=+-?∑ (1.2.1.4)

其余等于零,得正规方程组

11

21

11,m m

k k k k m m m

k k k k k k k ma x b y x a x b x y =====?

+=????+=??∑∑∑∑∑ (1.2.1.5) 也可将其矩阵形式写出来即:

112111m

m k k k k m m m i k k k k k k m x y a b x x x y =====???? ? ??? ? ?= ? ? ??? ? ?

????

∑∑∑∑∑ 解得,a b 的值,将其代入(1.2.1.1)即可得到拟合线性函数. 1.2.2 多项式拟合原理

为了确定数据拟合问题,选用幂函数2{1,,,}n x x x 作为函数类,则

2012()n

n x a a x a x a x ?=++++ (1)n m +< (1.2.2.1)

这就是多项式拟合函数.

为了确定拟合函数2012()n n x a a x a x a x ?=++++ 的系数,需要求解正规方程组

01111

21

011111

12011

111m m m

n

k k n k

k k k m m m m

n k k k n k k k k k k m m m m

n n n n k k k n k k

k k k k ma x a x a y x a x a x a x y x a x a x a x y ===+====+====?+++=??

?+++=????

?+++=??∑∑∑∑∑∑∑∑∑∑∑ (1.2.2.2) 也可以用矩阵形式表示为

11

102111111121111m m

m n k k k k k k m m m m n k k k k k k k k k n m m m

m n n n n k k k k k k k k k m x x y a x x x x y a a x x x x y ===+====+====???? ? ?

? ??? ? ? ? ? ? ?= ? ? ? ? ? ? ? ??? ? ? ? ?????

∑∑∑∑∑∑∑∑∑∑∑ 解得01,,,n a a a 即可,将其代入(1.2.2.1)即可得到拟合多项式.

2 分段曲线拟合

2.1 分段曲线拟合的基本原理[3]

先根据实测数据分布的特点,确定分段数目以及相应拟合曲线类型.拟合函数一般可选为多项式函数,因为在一定范围内,连续函数可用多项式任意逼近,然后再应用最小二乘法原理求得各分段拟合方程的系数.

基本步骤为:

第一步:将数据点分段,确定基函数01(),(),,()n x x x ??? , 第二步:根据题目要求,建立正规方程组, 第三步:解正规方程组,求出待定系数, 第四步:写出拟合函数.

下面以分段线性拟合与分段三次曲线拟合为例讨论分段拟合的基本过程. 2.1.1 分段线性拟合

我们把给出的数据点分成k 组12,,,k N N N ,即

1122***

1111121211***2121222222***1122(,),(,),,(,)(,),(,),,(,)

(,),(,),(,)

k k N N N N k k k k kN kN x y x y x y x y x y x y x y x y x y

其中12,,,k N N N 为每组数据的个数.

首先考虑线性拟合这种简单的情形,对k 组数据点分别应用最小二乘线性拟合,得

到各组数据点所对应的近似线性函数,

111()g x a b x =+ 1111()N x x x ≤<

222()g x a b x =+ 1212()N N x x x ≤<

()k k k g x a b x =+ 11()k k k N kN x x x --≤≤

而在整个考虑的拟合区间上就得到了1k -条直线段,现在就这1k -条直线段所在各

区间的左端点定义1()()i i i iN i iN g x g x +=,该函数就成为整个区间上的数据拟合函数.这就是分段最小二乘线性拟合问题.

然而有些数据组并不是每段都呈线性关系,如数据(,)1,2,,i i x y i n = ,根据其散点图却发现其前m 个点较接近直线,后n m -个点呈现非线性关系,则可分两段拟合.分别以一次多项式1Y 和n 次多项式2Y 进行拟合,即

1Y kx b =+ (2.1.1.1) 为了说明具体的方法,不妨选2Y 的阶数为2,即

22012Y a x a x a =++ (2.1.1.2) 要保证在边界点(,)m m x y 连续光滑,所以存在两个约束条件

2

012m m m kx b a x a x a +=++和012m k a x a =+,因此,式(2.1.1.1)和(2.1.1.2)的系数是相关的.解得2

20m b a a x =-,故式(2.1.1.1)为

2

10102(2)m m Y a x a x a x a =+-+

令S 为最小二乘估计量,则

22

2201200121

1

[(2)]()m

n

m i m

i i i i i i m S a x a x a a x y a x

a x a y ==+=++--+

++-∑∑

通过模型

0i

S

a ?=?;0,1,2i =,

可求得最小方差S 的012,,a a a 的值,从而确定出式(2.1.1.1)与(2.1.1.2)中的回归系数.最后,通过

r =

和F 检验值22(2)1n r F r -=-,对回归方程进行显著性检验,式中1

1n

i i y y n ==∑;

2

10102(2)i m i m Y a x a x a x a

=+-+;22012i i Y a x a x a =++. 当然,根据不同的数据,可分三段进行拟合,或根据不同的数据特点,采用多次曲

线拟合方式.

2.1.2 分段三次曲线拟合[4,5]

设有N 个数据123,,,N Z Z Z Z .因为四个数据点可确定一条三次曲线,但在选取分段点时,必须考虑分段后相邻曲线必须连续,即边界点连续,因此用五个数据点拟合一条三次曲线.

拟合方法:首先对数据进行一定的分段,将第一到第五数据分为第一段,再将第五到第九个数据分为第二段,将第九到第十三个数据分为第三段,依次类推进行分组,即前一段末尾的数据为下一段数据的首位,这样便保证了数据分段的连续性.然后再对个分段数据进行三次曲线拟合即可.

令某段数据的三次拟合曲线函数为:23(2,1,0,1,2)t w a bt ct dt t =+++=--可以将此曲线函数分解为奇偶两个函数:奇函数3t v bt dt =+和偶函数2t u a ct =+.下面应用最小二乘法的基本原理求三次拟合曲线的系数[6],由于在每段数据中第一点和最后一点均两次参与拟合,因此,在求一段曲线的拟合方差时需要加权.按照平均分配的原则[7],求方差

的权值221

2

λλ-==,1011λλλ-===,得到该段曲线拟合的方差

2

2

22()t t t t S w Z λ=-=-∑ (2.1.2.1)

曲线表示为奇偶函数的形式如下

,,t t t t t t t w u v u u v v --=+==- (2.1.2.2) 由(2.1.2.2)可以推导出下式

11

(),()22

t t t t t t u w w v w w --=+=- (2.1.2.3)

令,,t t t t t t t Z x y x x y y --=+==-则

11

(),()22

t t t t t t x Z Z y Z Z --=+=- (2.1.2.4)

因此拟合方差为

2

2

2

2

2

222

2

2

2

2

2

22

()() ()() t t t t t t t t t t t t t t t t t t S w Z u v x y u x v y S S λλλλ=-=-=-=-=-=+--=-+-=+∑∑∑∑奇偶

(2.1.2.5)

即t w 对t Z 的平滑可以看作是奇函数和偶函数分别平滑的叠加.从(2.1.2.5)式中可知奇函数拟合的方差.

2

2

2

223

2

1

22

12() 2() 2()(28)t t t t t

t t S x y bt dt

y b d y b d y λλ=-=-=-=

--=+-++-∑∑奇

(2.1.2.6)

120

280

b d y b d y +-=??

+-=?, 解出

2112(2)6

(8)6

b y y d y y =-??

=-?. 因此0S =奇,即奇函数的拟合方差为0,达到最佳逼近.同样,从(2.1.2.5)式中可

知偶函数拟合方差为

2

2222

20

122

()()2()(4)t t t t S

u x a x a c x a c x

λ=-=-=-

+

+-++-∑偶

(2.1.2.7) 由(2.1.2.3)式得知在边界点上

2221

()42

u w w a c -=

+=+. 考虑到边界点连续这一约束条件,令

4e a c =+ (2.3.2.8)

因此由式(2.3.2.7)可令

22

222

120122

01(4)()2()31()2()

44

S S a c x a x a c x a x a e x =-+-=-++-=-++-偶 (2.1.2.9) 解令

2

10S a

?=?,有01312()3()044a x a e x -++-=,得 10(1283)17a x x e =+- (2.1.2.10)

从(2.1.2.10)式可知三次曲线函数的系数,a c 的取值与边界点值有关,将(2.1.2.10)式代入(2.1.2.9)式中可得

2222

22122011(4)()(34)17

S S a c x S e x x e x =-+-=--=+-偶偶 .

所以得出222

2011()(34)17S e x x e x =-++-偶,再令2

0S e

?=?偶,有

2012

2()(34)017

e x x e x -++-=,

解得

102

431718

x x x e -+=. (2.1.2.11)

联立式(2.1.2.8)、式(2.1.2.10)、式(2.1.2.11),解得

012(34)6a x x x =+-

012(325)18c x x x =--+

最后得到三次拟合曲线表达式为

23

0120122112(34)(325)(2)(8)66186t x x x x x x y y y y w t t t

+---+--=+++.

3 基于两点三次Hermite 插值的分段曲线拟合

3.1 插值的定义

定义3.1.1[9] 设函数()y f x =在区间[,]a b 上有定义,且已知在点

012n a x x x x b ≤<<<<≤ 处的函数值(),(0,1,2,,)j j y f x j n == ,若存在n 次多项式

2012()n n n p x a a x a x a x =++++ (3.1.1) 使得

(),(0,1,2,,)n j j p x y j n == (3.1.2) 成立,则称()n p x 为()f x 的插值多项式,012,,,,n x x x x 为插值结点,()f x 为插值函数.

3.2 Hermite 插值方法

Hermite 插值方法可以处理插值条件中合导数值的插值问题,即知道插值结点处的

函数值以及导数值,求插值多项式的插值问题. 3.2.1 三次Hermite 插值

考虑两个插值结点的情形,设01a x x b ≤<≤,函数()[,]f x c a b '∈且已知

00110011(),(),(),()f x y f x y f x m f x m ''====, 在区间[,]a b 上求三次插值函数

230123()H x a a x a x a x =+++ (3.2.1.1) 使其满足插值条件

(),(),(

0,j j j j H x y H x m j '==

=. (3.2.1.2)

定理3.2.1.1[9] 满足插值条件(3.2.1.2)的三次Hermite 插值多项式是存在且唯一的.

证明:由插值条件得线性方程组

23

00000231111122000231111101230123a y x x x a y x x x a m x x a m x x ?????? ??? ? ??? ?= ??? ? ???

? ? ? ???

???? (3.2.1.3)

考虑系数矩阵行列式,利用行列式的拉普拉斯展开定理,可得

23

000234

111102

002

1111()01230123x x x x x x x x x x x x =-- (3.2.1.4) 故系数矩阵非奇异,线性方程组(3.1.2.3)有唯一解,从而三次多项式存在且唯一.

例 1 求满足插值条件0011()1,()0,()0,()0x x x x αααα''====的三次插值多项式

()x α,以及满足插值条件0101()0,()0,()1,()0

x x x x ββββ''====的三次插值多项式()x β.

解:由于1x 是三次多项式()x α的二重零点,故可设

2121)()()(x c x x x c α+-=

由插值条件00)1,()0(x x αα'==得

210201)()1(x c x x c +-=, 210110201()2()()0x x c x c x x c -++-=

求解得

012

323

010101221

,()()()x c x x x x x x c =-

=+--- 代入

2121)()()(x c x x x c α+-=

整理得

2

011010

)()()(12

x x x x x x x x x α----=+ 现求()x β,由于1x 是三次多项式()x β的二重零点,0x 是一重零点,故可设

201)()()(x x x c x x β-=-

由插值条件0()1x β='得

2010001)2()()]1[(x x x x x c x -+--=

求解得

2

101

()x x c -=

所以

2

1010

)(

)()(x x x x x x x β--=- 注:例题中的两个特殊的插值函数实际上是两点Hermite 插值的基函数.

定理3.2.1.2[9] 两点Hermite 插值函数可以用基函数的方法表示为

00110011()()()()()x y x m x m x H x y ααββ+++=,01,][x x x ∈ (3.2.1.5)

其中

2

01010102

0111010

2

10010

2

01110

()(12

)()()(12

)()()()()

()()(

)x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x αββα--=+----=+---=---=--

注:定理3.2.1.2中的0101(),(),(),()x x x x αββα为Hermite 插值基函数,其中

1 () ()00 i j i j i j

x x i j αβ=?==?≠?

1 () ()00

i j i j i j

x x i j βα=?''==?≠?

例2 给定(1)0,(1)4,(1)2,(1)0f f f f ''-==-==,求Hermite 插值多项式. 解:30101()0()4()2()0()H x h x h x g x g x =+++. 显然本题不必计算01(),()h x g x .

2

2

1(1)(1)()12(2)(1)4111(1)x x h x x x ??---??=+=-+

? ?----?

??? 2

2

01()((1))(1)(1)411x g x x x x -??=--=+- ?--??

310()4()2()H x h x g x =+

2231

()(2)(1)(1)(1)2

H x x x x x =-+++-

3.3 基于Hermite 插值的分段曲线拟合基本原理的主要步骤

第一步:根据给出的数据做出其散点图,

第二步:分析散点图的特点,通过拟合试验确定分段拟合函数, 第三步:采用MATLAB 编程求得分段拟合函数的表达式, 第四步:利用Hermite 插值求出分段边界点的插值多项式, 第五步:将插值多项式与分段拟合函数连接成连续的拟合曲线.

4 实例应用

例3 在农业生产试验研究中,对某地区土豆的产量与化肥的关系做了一实验, 得到磷肥的施肥量与土豆产量的对应关系如表4-1所示.

根据上表的数据给出土豆产量与磷肥的关系做出其散点图,如图4-1所示.

土豆产量(公斤)

0510152025303540450

50

100

150

200

250

300

350

400

土豆产量(公斤)

图4-1磷肥的施肥量与土豆产量对应关系的散点图

从图可看出从 0 到 98、从 98 到 342 之间分别呈明显的线性关系, 由此可选取所求拟合函数为一分段的线性函数作拟合试验,换言之,用前 5 点作一线性拟合函数,再用后 5个点也作一线性拟合函数.

采用MATLAB 编程(见附录1)求得,对磷肥的分段拟合函数

0.084432.0771

0.009039.1303x y x +?=?

+?

分段拟合图如图4-2所示.

图4-2磷肥的施肥量与土豆产量分段拟合曲线图

考虑到边界点不连续,采用两点三次Hermite 插值使边界点连续的方法,由于

(98)40.3483,(147)40.4533,(98)0.0844,(147)0.0090y y y y ''====,故可以设其Hermite 插值多项式为

30101()40.3483()40.4533()0.0844()0.0090()H x h x h x g x g x =+++

经计算得

22322

40.3483(147)(2147)40.4533(98)(3432)

()117649

0.0844(147)(98)0.0090(98)(147)2401

x x x x H x x x x x --+--=

--+--+

323()0.00003711550.0144093294 1.839257142936.444499972H x x x x =-+- 将插值多项式与分段边界点连接便可以得到连续的拟合曲线图,达到较好的拟合效果. 拟合曲线图如图4-3所示(程序见附录2).

图4-3磷肥的施肥量与土豆产量的Hermite 插值分段拟合曲线图

例4 弹簧受力F 的作用伸长x ,F 与x 在一定范围内服从虎克定律:F kx =(x 为弹性系数),呈线性关系;但当F 增加到一定值后,不再服从虎克定律.一次试验测得的数据如表4-2所示,其散点图如图4-4所示.

x (cm) 1 3 5 7 9 11 12 14 16 18 F (N)

1.9

5.3

8.6

12.1

15.7

16.8

19.2

20.7

21.4

21.8

图4-4弹簧受力与伸长量的关系的散点图

通过散点图先拟合试验,得出前5个点可用线性拟合,后5个点可作二次函数拟合;同样采用分段拟合的方法,方法同例3(可设211221202,y kx b y a a x a x =+=++).运行程序(见附录3)可得0120.1350; 4.5518;16.5508; 1.7200;0.1200a a a k b =-==-==.同样将拟合函数的边界点采用两点三次Hermite 插值.

由(9)15.6000,(11)17.1840,(9) 1.7200,(11) 1.5818y y y y ''====,采用MATLAB 编程(见附录4)求得插值多项式为

3230.429449999999999712.91805000000000129.8885499999999 420.1039499999994

H x x x

=-+-

再用插值多项式连接分段拟合曲线的边界点便可得到较好的拟合图形,拟合曲线如图4-5所示(程序见附录5).

图4-5弹簧受力与伸长量的Hermite 插值分段拟合曲线图

例5 在油页高温分解的过程中,一种苯有机分解成沥青及其他物质,要了解沥青在一定温度下随时间t (分钟)变化的相对浓度y (%)之间的关系.试验如表4-3所示,

散点图如图4-6所示.

图4-6沥青的相对浓度与时间变化的关系的散点图

同样通过散点图先作拟合试验,得出前5个点可采用三次多项式拟合,后5个点可采用二次多项式拟合,可设分段拟合函数为

322

11121314212223,y a x a x a x a y b x b x b =+++=++ 运行程序(见附录6)得出

12341230.0002;0.0285; 1.5456;7.4491

0.0013;0.1747;16.2750

a a a a

b b b ==-==-=-== 再将拟合函数的边界点采用两点三次Hermite 插值,由

(65)20.4974,(80)22.2531,(65)0.3756,(80)0.3827y y y y ''====

采用MATLAB 编程(见附录7)计算求得插值多项式为

3230.0023298074074074070.506496444444444036.68982888888888 864.2173592592588

H x x x

=-+-

将插值多项式连接分段拟合曲线的边界点后得到的拟合曲线图,拟合曲线见图4-7(程序见附录8).

图4-7沥青的相对浓度与时间变化的关系的Hermite插值分段拟合图

5 结束语

本文介绍最小二乘多项式曲线拟合的基本原理,在具体介绍线性拟合、多项式拟合的基本及方法的基础上,给出了分段曲线拟合的方法与步骤.分段曲线拟合是一种常用的数据处理方法,但是在分段点处往往不能满足连续与光滑,针对这一问题,本文进一步给出了Hermite插值的基本原理,并采用两点三次Hermite插值连接分段曲线,从而使分段点处满足一阶连续,最后通过三个实例表明该方法的拟合效果较好.

另外,本文仅讨论了使用Hermite插值连接分段线性、分段多项式曲线拟合的方法,对其他种类的曲线未作讨论.事实上,两点三次Hermite插值的方法连接其他种类的拟合曲线同样适用.

参考文献

[1] 聂翔, 张瑞林. 最小二乘法在曲线拟合中的实现[J]. 陕西工学院学报, 2000, 3: 79-82.

[2] 张东林. 分段最小二乘曲线拟合[J]. 沈阳大学学报(自然科学版), 1994, 2: 80-83.

[3] 刘晓莉, 陈春梅. 基于最小二乘原理的分段曲线拟合法[J]. 伊犁教育学院学报, 2004, 17(3):

131-136.

[4] 蔡山, 张浩, 陈洪辉, 等. 基于最小二乘法的分段三次曲线拟合方法研究[J]. 科学技术与工程,

2007, 7(3): 352-355.

[5] 张浩, 任义广, 沙基昌. 基于分段三次曲线拟合的广州周发案量预测[J]. 计算机仿真, 2008, 25(6):

257-260.

[6] Roychowdhury S. Fuzzy curve fitting using least square principles[J]. IEEE International Conference

on Systems, Man and Cybemetics, 1998, 4: 4022-4027.

[7] 高伟, 姜水生. 分段曲线拟合与离散度加权的数据误差处理方法[J]. 中国测试技术, 2005, 11:

55-56.

[8] 张兴元. 分段函数的光滑方法及其在曲线拟合中的应用[J]. 西南民族大学学报(自然科学

版),2007, 33(3): 486-490.

[9] 钟尔杰, 黄延祝. 数值分析(第四版) [M]. 北京: 高等教育出版社, 2004.

[10] 韩中庚. 数学建模方法及其应用[M]. 北京: 高等教育出版社, 2005.

[11] 刘卫国. MA TLAB程序设计与应用(第二版) [M]. 北京: 高等教育出版社, 2006.

致谢

经过几个月的努力和忙碌,本次毕业论文即将完成,对为一个本科生的毕业论文,由于经验不足,难免有许多地方考虑不全面,如果没有指导老师的督促与辛勤的指导,以及一起学习的同学们的帮助与支持,想顺利的完成这篇论文比较难.

值此论文完成之际,首先对指导老师李军成老师表示最诚挚的感谢与崇高的敬意.李老师严谨的治学态度,深厚渊博的学术素养,敏锐的思维,积极进去的精神,严以律己,宽以待人的崇高品质,乐观向上的人生态度,谦逊和蔼的为人品德,平等的师生关系,尤其是认真负责的工作态度均给我留下了不可磨灭的印象,相信对我今后的学习、工作以及生活都会有着深远的影响.

感谢陈国华主任、杨笃庆书记、谭本远主任等数学系领导们,你们认真负责的治学态度和高速度、高效率的办事方式深深的感染了我们,让我们能够时时刻刻提醒自己要认真负责对待每件事情、每一个环节,感谢梁经珑老师、杨涤尘老师、余星老师、李军成老师、邓华老师、钟月娥老师、孙红果老师、李兵老师、龙承星老师等数学系的老师们,你们的授课方式与渊博的知识深化了我们的知识面,拓广了我们的视野,使我们对数学有了更浓厚的兴趣与体会.感谢杜鹃老师、郑丽峰老师,你们热忱的帮助使我们有一个很好的学习氛围来完成论文.

在本文的写作过程中,李军成老师,石小芳、彭迪、方其斌等同学提出了许多宝贵的意见,此论文的完成离不开他们的指导,特别是李军成老师;他们渊博的学识与敏锐的头脑让我受益匪浅.再次对帮助我的人表示衷心的感谢.

附录1 磷肥的施肥量与土豆产量的分段拟合函数程序

x=[0,24,49,73,98,147,196,245,294,342];

y=[33.46,32.47,36.06,37.96,41.04,40.09,41.26,42.17,40.36,42.73];

plot(x,y,'r+')

a1=polyfit(x(1:5),y(1:5),1)

a2=polyfit(x(6:10),y(6:10),1)

xx1=0:98; yy1=a1(1)*xx1+a1(2);

xx2=147:342; yy2=a2(1)*xx2+a2(2);

plot(x,y,'r+',xx1,yy1,xx2,yy2)

附录2 磷肥的施肥量与土豆产量的Hermite插值的分段拟合曲线图程序x=[0,24,49,73,98,147,196,245,294,342];

y=[33.46,32.47,36.06,37.96,41.04,40.09,41.26,42.17,40.36,42.73];

plot(x,y,'r+')

a1=polyfit(x(1:5),y(1:5),1)

a2=polyfit(x(6:10),y(6:10),1)

xx1=0:0.01:98; yy1=a1(1)*xx1+a1(2);

xx2=147:0.01:342; yy2=a2(1)*xx2+a2(2);

xx3=98:0.01:147;yy3=0.0000371155*xx3.^3-0.0144093294*xx3.^2+1.83925 71429*xx3-36.444499972;

plot(x,y,'r+',xx1,yy1,xx2,yy2,xx3,yy3)

附录3 弹簧受力与伸长量的关系的分段拟合函数程序

x=[1,3,5,7,9,11,12,14,16,18];

y=[1.9,5.3,8.6,12.1,15.7,16.8,19.2,20.7,21.4,21.8];

plot(x,y,'r+')

a1=polyfit(x(1:5),y(1:5),1)

a2=polyfit(x(6:10),y(6:10),2)

xx1=1:0.01:9; yy1=a1(1)*xx1+a1(2);

xx2=11:0.01:18; yy2=a2(1)*xx2.^2+a2(2)*xx2+a2(3);

plot(x,y,'r+',xx1,yy1,xx2,yy2)

附录4 弹簧受力与伸长量的关系的两点三次Hermite插值多项式程序format long e

clf,clear,

x0=9;x1=11;y0=15.6000;y1=17.1840;m0=1.7200;m1=1.5818;

x=linspace(9,11,100);

y=linspace(15.6000,17.1840,100);

m=2*(y0-y1)+(m0+m1)*(x1-x0);

n=3*(x0+x1)*y1-3*(x0+x1)*y0-(2*x1+x0)*m0*(x1-x0)-(2*x0+x1)*(x1-x0)

*m1;

k=6*x0*x1*(y0-y1)+(x1-x0)*((m0*x1.^2+m1*x0.^2)+2*x1*x0*(m0+m1));

q=x1.^2*(x1-3*x0)*y0+x0.^2*(3*x1-x0)*y1-x0*x1*(x1-x0)*(x1*m0+x0*m1

);

p=(x1-x0).^3;

a=m/p

b=n/p

c=k/p

d=q/p

y=a*x.^3+b*x.^2+c*x+d;

plot(x,y,'r-')

附录5 弹簧受力与伸长量的Hermite插值的分段拟合曲线图程序

x=[1,3,5,7,9,11,12,14,16,18];

y=[1.9,5.3,8.6,12.1,15.7,16.8,19.2,20.7,21.4,21.8];

plot(x,y,'r+')

a1=polyfit(x(1:5),y(1:5),1)

a2=polyfit(x(6:10),y(6:10),2)

xx1=1:0.01:9; yy1=a1(1)*xx1+a1(2);

xx2=11:0.01:18; yy2=a2(1)*xx2.^2+a2(2)*xx2+a2(3);

xx3=9:0.01:11;yy3=0.4294499999999997*xx3.^3-12.91805000000000*xx3.

^2+129.8885499999999*xx3-420.1039499999994;

plot(x,y,'r+',xx1,yy1,xx2,yy2,xx3,yy3)

附录6 沥青的相对浓度与时间变化的关系分段拟合函数程序

x=[5,15,20,50,65,80,100,120,160,180];

y=[0,8.0,15.1,20.1,20.5,22.0,20.9,18.2,11.5,5.5];

plot(x,y,'r+')

a1=polyfit(x(1:5),y(1:5),3)

a2=polyfit(x(6:10),y(6:10),2)

xx1=5:0.01:65; yy1=a1(1)*xx1.^3+a1(2)*xx1.^2+a1(3)*xx1+a1(4);

xx2=80:0.01:180; yy2=a2(1)*xx2.^2+a2(2)*xx2+a2(3);

plot(x,y,'r+',xx1,yy1,xx2,yy2)

附录7 沥青的相对浓度与时间变化的两点三次Hermite插值多项式程序format long e

clf,clear,

x0=65;x1=80;y0=20.4974;y1=22.2531;m0=0.3756;m1=0.3827;

x=linspace(65,80,100);

y=linspace(20.4974,22.2531,100);

m=2*(y0-y1)+(m0+m1)*(x1-x0);

n=3*(x0+x1)*y1-3*(x0+x1)*y0-(2*x1+x0)*m0*(x1-x0)-(2*x0+x1)*(x1-x0) *m1;

k=6*x0*x1*(y0-y1)+(x1-x0)*((m0*x1.^2+m1*x0.^2)+2*x1*x0*(m0+m1));

q=x1.^2*(x1-3*x0)*y0+x0.^2*(3*x1-x0)*y1-x0*x1*(x1-x0)*(x1*m0+x0*m1 );

p=(x1-x0).^3;

a=m/p

b=n/p

c=k/p

d=q/p

y=a*x.^3+b*x.^2+c*x+d;

plot(x,y,'r-')

附录8 沥青的相对浓度与时间变化的Hermite插值的分段拟合曲线图程序x=[5,15,20,50,65,80,100,120,160,180];

y=[0,8.0,15.1,20.1,20.5,22.0,20.9,18.2,11.5,5.5];

plot(x,y,'r+')

a1=polyfit(x(1:5),y(1:5),3)

a2=polyfit(x(6:10),y(6:10),2)

xx1=5:0.01:65;yy1=a1(1)*xx1.^3+a1(2)*xx1.^2+a1(3)*xx1+a1(4);

xx2=80:0.01:180;yy2=a2(1)*xx2.^2+a2(2)*xx2+a2(3);

xx3=65:0.01:80;yy3=0.002329807407407407*xx3.^3-0.5064964444444440 *xx3.^2+ 36.68982888888888*xx3-864.2173592592588;

plot(x,y,'r+',xx1,yy1,xx2,yy2,xx3,yy3)

[整理]matlab拟合工具箱的使用.

matlab拟合工具箱使用 2011-06-17 12:53 1.打开CFTOOL工具箱。在Matlab 6.5以上的环境下,在左下方有一个"Start"按钮,如同Windows的开始菜单,点开它,在目录"Toolboxes"下有一个"Curve Fitting",点开"Curve Fitting Tool",出现数据拟合工具界面,基本上所有的数据拟合和回归分析都可以在这里进行。也可以在命令窗口中直接输入”cftool”,打开工具箱。 2.输入两组向量x,y。 首先在Matlab的命令行输入两个向量,一个向量是你要的x坐标的各个数据,另外一个是你要的y坐标的各个数据。输入以后假定叫x向量与y向量,可以在workspace里面看见这两个向量,要确保这两个向量的元素数一致,如果不一致的话是不能在工具箱里面进行拟合的。 例如在命令行里输入下列数据: x = [196,186, 137, 136, 122, 122, 71, 71, 70, 33]; y = [0.012605; 0.013115; 0.016866; 0.014741; 0.022353; 0.019278; 0.041803; 0.038026; 0.038128; 0.088196]; 3.数据的选取。打开曲线拟合共工具界面,点击最左边的"Data..."按钮,出现一个Data对话框,在Data Sets页面里,在X Data选项中选取x向量,Y Data 选项中选取y向量,如果两个向量的元素数相同,那么Create data set按钮就激活了,此时点击它,生成一个数据组,显示在下方Data Sets列表框中。关闭Data对话框。此时Curve Fitting Tool窗口中显示出这一数据组的散点分布图。

曲线拟合的方法及过程

一、课程设计题目: 对于函数 x e x x f --=)( 从00=x 开始,取步长1.0=h 的20个数据点,求五次最小二乘拟合多项式 5522105)()()()(x x a x x a x x a a x P -++-+-+= 其中 ∑ ===19 95.020 i i x x 二、原理分析 (1)最小二乘法的提法 当数据量大且由实验提供时,不宜要求近似曲线)(x y φ=严格地经过所有数据点),(i i y x ,亦即不应要求拟合函数)(x ?在i x 处的偏差(又称残差) i i i y x -=)(φδ (i=1,2,…,m) 都严格的等于零,但是,为了使近似曲线能尽量反应所给数据点的变化趋势,要求偏差i δ适当的小还是必要的,达到这一目标的途径很多,例如,可以通过使最大偏差i δmax 最小来实现,也可以通过使偏差绝对值之和∑i i δ最小来实 现……,考虑到计算方便等因素,通常用使得偏差平方和∑i i 2δ最小(成为最小 二乘原则)来实现。 按最小二乘原则选择近似函数的方法称为最小二乘法。 用最小二乘法求近似函数的问题可以归结为:对于给定数据),(i i y x (i=1,2,…,m),要求在某个函数类Φ中寻求一个函数)(x * ?,使 [][]2 1 )(2 1 * )()(mi n ∑∑=Φ∈=-=-m i i i x m i i i y x y x ??? (1-1) 其中)(x ?为函数类Φ中任意函数。 (1)确定函数类Φ,即确定)(x ?的形式。这不是一个单纯的数学问题,还与其他领域的一些专业知识有关。在数学上,通常的做法是将数据点),(i i y x 描

matlab曲线拟合实例

曲线拟合 求二次拟合多项式 解:(一)最小二乘法MA TLAB编程: function p=least_squar(x,y,n,w) if nargin<4 w=1 end if nargin<3 n=1 end m=length(y); X=ones(1,m) if m<=n error end for i=1:n X=[(x.^i);X] end A=X*diag(w)*X';b=X*(w.*y)';p=(A\b)' 输入: x=[1 3 5 6 7 8 9 10]; y=[10 5 2 1 1 2 3 4] p=least_squar(x,y,2) 运行得: p = 0.2763 -3.6800 13.4320 故所求多项式为:s(x)=13.432-3.68x+0.27632x (二)正交多项式拟合MATLAB编程: function p=least_squar2(x,y,n,w) if nargin<4 w=1; end if nargin<3 n=1; end m=length(x); X=ones(1,m); if m<=n error end for i=1:n X=[x.^i;X]; end A=zeros(1,n+1);

A(1,n+1)=1; a=zeros(1,n+1); z=zeros(1,n+1); for i=1:n phi=A(i,:)*X;t=sum(w.*phi.*phi); b=-sum(w.*phi.*x.*phi)/t a(i)=sum(w.*y.*phi)/t; if i==1 c=0;else c=-t/t1; end t1=t for j=1:n z(j)=A(i,j+1); end z(n+1)=0 if i==1 z=z+b*A(i,:); else z=z+b*A(i,:)+c*A(i-1,:); end A=[A;z]; end phi=A(n+1,:)*X;t=sum(w.*phi.*phi); a(n+1)=sum(w.*y.*phi)/t; p=a*A; 输入: x=[1 3 5 6 7 8 9 10]; y=[10 5 2 1 1 2 3 4]; p=least_squar2(x,y,2) 运行得: b = -6.1250 t1 = 8 z = 0 1 0 b = -4.9328 t1 = 64.8750 z = 1.0000 -6.1250 0 p = 0.2763 -3.6800 13.4320 故所求多项式为:s(x)=13.432-3.68x+0.27632x

Matlab曲线拟合工具箱cftool功能

Matlab的曲线拟合工具箱CFtool功能 一、单一变量的曲线逼近 Matlab有一个功能强大的曲线拟合工具箱cftool ,使用方便,能实现多种类型的线性、非线 性曲线拟合。下面结合我使用的Matlab R2007b 来简单介绍如何使用这个工具箱。 假设我们要拟合的函数形式是y=A*x*x + B*x, 且A>0,B>0 。 1、在命令行输入数据: 》x=[110.3323 148.7328 178.064 202.8258033 224.7105 244.5711 262.908 280.0447 296.204 311.5475] 》y=[5 10 15 20 25 30 35 40 45 50] 2、启动曲线拟合工具箱 》cftool 3、进入曲线拟合工具箱界面“Curve Fitting tool” (1)点击“Data”按钮,弹出“Data”窗口; (2)利用X data和Y data的下拉菜单读入数据x,y,可修改数据集名“Data set name”,然 后点击“Create data set”按钮,退出“Data”窗口,返回工具箱界面,这时会自动画出数 据集的曲线图; (3)点击“Fitting”按钮,弹出“Fitting”窗口; (4)点击“New fit”按钮,可修改拟合项目名称“Fit name”,通过“Data set”下拉菜单 选择数据集,然后通过下拉菜单“Type of fit”选择拟合曲线的类型,工具箱提供的拟合类 型有: Custom Equations:用户自定义的函数类型 Exponential:指数逼近,有2种类型,a*exp(b*x) 、a*exp(b*x) + c*exp(d*x) Fourier:傅立叶逼近,有7种类型,基础型是a0 + a1*cos(x*w) + b1*sin(x*w) Gaussian:高斯逼近,有8种类型,基础型是a1*exp(-((x-b1)/c1)^2) Interpolant:插值逼近,有4种类型,linear、nearest neighbor、cubic spline、shape- preserving Polynomial:多形式逼近,有9种类型,linear ~、quadratic ~、cubic ~、4-9th degree ~ Power:幂逼近,有2种类型,a*x^b 、a*x^b + c Rational:有理数逼近,分子、分母共有的类型是linear ~、quadratic ~、cubic ~、4-5th degree ~;此外,分子还包括constant型 Smoothing Spline:平滑逼近(翻译的不大恰当,不好意思) Sum of Sin Functions:正弦曲线逼近,有8种类型,基础型是a1*sin(b1*x + c1) Weibull:只有一种,a*b*x^(b-1)*exp(-a*x^b) 选择好所需的拟合曲线类型及其子类型,并进行相关设置: ——如果是非自定义的类型,根据实际需要点击“Fit options”按钮,设置拟合算法、修改 待估计参数的上下限等参数; ——如果选Custom Equations,点击“New”按钮,弹出自定义函数等式窗口,有“Linear Equations线性等式”和“General Equations构造等式”两种标签。 在本例中选Custom Equations,点击“New”按钮,选择“General Equations”标签,输入函 数类型y=a*x*x + b*x,设置参数a、b的上下限,然后点击OK。 (5)类型设置完成后,点击“Apply”按钮,就可以在Results框中得到拟合结果,如下例:

曲线拟合最小二乘法c++程序

课题八曲线拟合的最小二乘法 实验目标: 在某冶炼过程中,通过实验检测得到含碳量与时间关系的数据如下,试求含碳量y与时间t #include #include<> using namespace std; int Array(double ***Arr, int n){ double **p; int i; p=(double **)malloc(n*sizeof(double *)); if(!p)return 0; for(i=0;i>n; cout<<"请输o入¨节¨2点ì值|ì(ê?§Xi)ê:êo"<>X[i]; } cout<<"请输o入¨节¨2点ì函?¥数oy值|ì(ê?§Yi)ê:êo"<>Y[i]; } if(!Array(&A,3)) cout<<"内¨2存?分¤配失o?ì败?¨1!ê"; else { for(i=0;i<3;i++){ for(j=0;j<3;j++){ A[i][j]=0; } } for(i=0;i

matlab曲线拟合2010a演示

2010a版本曲线拟合工具箱 一、单一变量的曲线逼近 Matlab有一个功能强大的曲线拟合工具箱cftool ,使用方便,能实现多种类型的线性、非线性曲线拟合。下面结合我使用的Matlab R2007b 来简单介绍如何使用这个工具箱。 假设我们要拟合的函数形式是y=A*x*x + B*x, 且A>0,B>0。 1、在主命令输入数据: x=233.8:0.5:238.8; y=[235.148 235.218 235.287 235.357 235.383 235.419 235.456 235.49 235.503 235.508 235.536]; 2、启动曲线拟合工具箱 cftool(x,y) 3、进入曲线拟合工具箱界面“Curve Fitting tool” 如图 (1)利用X data和Y data的下拉菜单读入数据x,y,可在Fit name修改数据集名,这时会自动画出数据集的曲线图;

(2)在红色区域选择拟合曲线类型 工具箱提供的拟合类型有: ?Custom Equations:用户自定义的函数类型 ?Exponential:指数逼近,有2种类型,a*exp(b*x) 、a*exp(b*x) + c*exp(d*x) ?Fourier:傅立叶逼近,有7种类型,基础型是a0 + a1*cos(x*w) + b1*sin(x*w) ?Gaussian:高斯逼近,有8种类型,基础型是a1*exp(-((x-b1)/c1)^2) ?Interpolant:插值逼近,有4种类型,linear、nearest neighbor、cubicspline、shape-preserving ?Polynomial:多形式逼近,有9种类型,linear ~、quadratic ~、cubic ~、4-9th degree~ ?Power:幂逼近,有2种类型,a*x^b 、a*x^b + c ?Rational:有理数逼近,分子、分母共有的类型是linear ~、quadratic ~、cubic ~、4-5th degree~;此外,分子还包括constant型 ?Smoothing Spline:平滑逼近(翻译的不大恰当,不好意思) ?Sum of Sin Functions:正弦曲线逼近,有8种类型,基础型是a1*sin(b1*x + c1) ?Weibull:只有一种,a*b*x^(b-1)*exp(-a*x^b) 在results一栏看结果

(完整word版)缓和曲线计算原理

1.2道路线形的基本介绍 道路运输在整个国民经济生活中起着重要作用。道路的新建和改建,测量工作必须先行,所以公路施工测量所承担的任务也是非常大的,为了更好的进行道路施工工作,下面就道路线形进行一下简单的介绍。 一般所说的路线,是指道路中线的空间位置。中线在水平面上的投影称作路线的平面;沿中线竖直剖切再行展开则是路线的纵断面;中线上任一点法向切面是道路在该点的横断面。 无论是铁路、公路还是地铁隧道和轻轨,由于受到地形、地物、地质及其他因素的限制,经常要改变线路前进的方向。当线路方向改变时,在转向处需用曲线将两直线连接起来。因此,线路工程总是由直线和曲线所组成。曲线按其线形可分为:圆曲线、缓和曲线、复曲线和竖曲线等。 公路中线应满足的几何条件是:线形连续平滑;线形曲率连续(中线上任一点不出现两个曲率值);线形曲率变化率连续(中线上任一点不出现两个曲率变化值)。考虑上述几何条件,顾及计算与敷设方便,现代公路平面线形要素由直线、圆曲线和缓和曲线构成,称之为平面线形三要素。其中缓和曲线的曲率半径是从∞逐渐变到圆曲线半径R 的变量。在与直线连接处半径为∞,与圆曲线连接处半径为R ,曲线上任一点的曲率半径与该点至起点的曲线长成反比。 目前公路线形设计已开始使用非对称线形(成为非对称平曲线)设计,特别是在互通立交匝道和山区高速高速公路线形设计中,这种线形设计使用得较多。非对称线形分为完全非对称线形和非对称非完整线形两种,所谓“完全非对称曲线”的含义就是第一缓和曲线和第二缓和曲线起点处(ZH 或HZ )的半径为∞,圆半径为R ,第一缓和曲线长1s l ,第二缓和曲线长为2s l ,12s s l l ≠。所谓“非完整”的含义是第一缓和曲线和第二缓和曲线的半径不是∞,而是1 R 、2 R 。而坐标法成为高速公路放样的主要方法,坐标法放样 线路中线的这个操作过程中,最重要的一部就是计算线路放样点的坐标。 2 路线中桩坐标计算原理 在实际工程中,线路的设计由专门的设计方完成,在线路完成设计得到审批后设计方便把所设计线路的线路要素(或者称为曲线要素)提供给施工方。所提供的曲线要素一般包括:线路中各曲线段的起点坐标、起点里程、起点半径、终点坐标、终点里程、终点半径、交点坐标、曲线参数、转角(包括用一定的符号表示左右转)、两条切线长(起点与终点各所对应的两条切线)、曲线长。当然不同的工程项目所提供的曲线要素也不一样,以上所述的要素是大多数设计方会提供的,有的设计方在提供上述要素的前提下,还提供曲线段的外距、中点坐标、弦长或者走向方位角等要素,供施工方在计算

Matlab的曲线拟合工具箱CFtool使用简介

假设我们要拟合的函数形式是y=A*x*x + B*x,且A>0,B>0。 1、在命令行输入数据: 》x=[110.3323 148.7328 178.064 202.8258033 224.7105 244.5711 262.908 280.0447 296.204 311.5475]; 》y=[5 10 15 20 25 30 35 40 45 50]; 2、启动曲线拟合工具箱 》cftool 3、进入曲线拟合工具箱界面“Curve Fitting tool” (1)点击“Data”按钮,弹出“Data”窗口; (2)利用X data和Y data的下拉菜单读入数据x,y,可修改数据集名“Data set name”,然后点击“Create data set”按钮,退出“Data”窗口,返回工具箱界面,这时会自动画出数据集的曲线图;(3)点击“Fitting”按钮,弹出“Fitting”窗口; (4)点击“New fit”按钮,可修改拟合项目名称“Fit name”,通过“Data set”下拉菜单选择数据集,然后通过下拉菜单“Type of fit”选择拟合曲线的类型,工具箱提供的拟合类型有: ?Custom Equations:用户自定义的函数类型 ?Exponential:指数逼近,有2种类型,a*exp(b*x)、a*exp(b*x) + c*exp(d*x) ?Fourier:傅立叶逼近,有7种类型,基础型是a0 + a1*cos(x*w) + b1*sin(x*w) ?Gaussian:高斯逼近,有8种类型,基础型是a1*exp(-((x-b1)/c1)^2) ?Interpolant:插值逼近,有4种类型,linear、nearest neighbor、cubic spline、shape-preserving ?Polynomial:多形式逼近,有9种类型,linear ~、quadratic ~、cubic ~、4-9th degree ~?Power:幂逼近,有2种类型,a*x^b、a*x^b + c ?Rational:有理数逼近,分子、分母共有的类型是linear ~、quadratic ~、cubic ~、4-5th degree ~;此外,分子还包括constant型 ?Smoothing Spline:平滑逼近(翻译的不大恰当,不好意思) ?Sum of Sin Functions:正弦曲线逼近,有8种类型,基础型是a1*sin(b1*x + c1) ?Weibull:只有一种,a*b*x^(b-1)*exp(-a*x^b)

曲线拟合与插值理论与实例

第11章曲线拟合与插值 在大量的应用领域中,人们经常面临用一个解析函数描述数据(通常是测量值)的任务。对这个问题有两种方法。在插值法里,数据假定是正确的,要求以某种方法描述数据点之间所发生的情况。这种方法在下一节讨论。这里讨论的方法是曲线拟合或回归。人们设法找出某条光滑曲线,它最佳地拟合数据,但不必要经过任何数据点。图11.1说明了这两种方法。标有'o'的是数据点;连接数据点的实线描绘了线性内插,虚线是数据的最佳拟合。 11.1 曲线拟合 曲线拟合涉及回答两个基本问题:最佳拟合意味着什么?应该用什么样的曲线?可用许多不同的方法定义最佳拟合,并存在无穷数目的曲线。所以,从这里开始,我们走向何方?正如它证实的那样,当最佳拟合被解释为在数据点的最小误差平方和,且所用的曲线限定为多项式时,那么曲线拟合是相当简捷的。数学上,称为多项式的最小二乘曲线拟合。如果这种描述使你混淆,再研究图11.1。虚线和标志的数据点之间的垂直距离是在该点的误差。对各数据点距离求平方,并把平方距离全加起来,就是误差平方和。这条虚线是使误差平方和尽可能小的曲线,即是最佳拟合。最小二乘这个术语仅仅是使误差平方和最小的省略说法。

图11.1 2阶曲线拟合 在MATLAB中,函数polyfit求解最小二乘曲线拟合问题。为了阐述这个函数的用法,让我们以上面图11.1中的数据开始。 ? x=[0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1]; ? y=[-.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2]; 为了用polyfit,我们必须给函数赋予上面的数据和我们希望最佳拟合数据的多项式的阶次或度。如果我们选择n=1作为阶次,得到最简单的线性近似。通常称为线性回归。相反,如果我们选择n=2作为阶次,得到一个2阶多项式。现在,我们选择一个2阶多项式。 ? n=2; % polynomial order ? p=polyfit(x, y, n) p = -9.8108 20.1293 -0.0317 polyfit的输出是一个多项式系数的行向量。其解是y = -9.8108x2+20.1293x-0.0317。为了将曲线拟合解与数据点比较,让我们把二者都绘成图。

Boltzmann 函数曲线拟合的 Lisp 程序

Boltzmann 函数曲线拟合的Lisp 程序 1 原程序在计算机中,将以下原代码写入记事本中并保存文件名为“bzlm.lsp” (setq smx (lambda ( / k wi a1 a2 b1 b2 c1 c2 sx) (setq wi (mapcar '(lambda ( x / ) (expt 2.718282 (/ (- x m3) m4))) xi) k 0 a1 (apply '+ (mapcar '(lambda ( y / w) (setq w (nth k wi) k (1+ k)) (/ y (+ 1 w))) yi)) k 0 a2 (apply '+ (mapcar '(lambda ( y / w) (setq w (nth k wi) k (1+ k)) (/ (* y w) (+ 1 w))) yi)) b1 (apply '+ (mapcar '(lambda ( w / ) (/ 1 (expt (+ 1 w) 2))) wi)) b2 (apply '+ (mapcar '(lambda ( w / ) (/ w (expt (+ 1 w) 2))) wi)) c1 b2 c2 (apply '+ (mapcar '(lambda ( w / ) (expt (/ w (+ 1 w)) 2)) wi)) m1 (/ (- (* a1 c2) (* a2 c1)) (- (* b1 c2) (* b2 c1))) m2 (/ (- (* b1 a2) (* b2 a1)) (- (* b1 c2) (* b2 c1))) k 0 sx (apply '+ (mapcar '(lambda ( x / y w) (setq w (nth k wi) y (nth k yi) k (1+ k)) (expt (- y (+ (/ (- m1 m2) (+ 1 w)) m2)) 2)) xi)) ) (if (car s_min) (if (< sx (car s_min)) (setq s_min (list sx m1 m2 m3 m4)) nil) (setq s_min (list sx m1 m2 m3 m4))) ) ) (setq mmc (lambda (range / m1 m2 s_min m3 m4 rm3 rm4 tm4 q3 q4) (setq rm3 (abs range) rm4 rm3 q3 rm3 q4 rm4 m3 0 m4 0) (repeat 5 (setq rm3 (+ m3 q3) m3 (- m3 q3) rm4 (+ m4 q4) m4 (- m4 q4) tm4 m4 q3 (* q3 0.1) q4 (* q4 0.1)) (while (<= m3 rm3) (while (<= m4 rm4) (if (>= m4 1) (smx)) (setq m4 (+ m4 q4))) (setq m3 (+ m3 q3) m4 tm4) ) (setq m3 (nth 3 s_min) m4 (last s_min)) ) s_min ) ) (setq cy (lambda ( / m1 m2 m3 m4) (if sc (progn (setq m1 (nth 1 sc) m2 (nth 2 sc) m3 (nth 3 sc) m4 (nth 4 sc) yc (+ (/ (- m1 m2) (+ 1 (expt 2.718282 (/ (- xc m3) m4)))) m2) ) (set_tile "cy" (vl-princ-to-string yc)) )))) (setq cx (lambda ( / m1 m2 m3 m4 tm) (if sc (progn (setq m1 (nth 1 sc) m2 (nth 2 sc) m3 (nth 3 sc) m4 (nth 4 sc)) (if (and (< y m2) (> (setq tm (- (/ (- m1 m2) (- yc m2)) 1)) 0)) (progn (setq xc (+ m3 (* m4 (log tm))))

Matlab曲线拟合及工具箱简介

MATLAB曲线拟合 一、单一变量的曲线逼近 Matlab有一个功能强大的曲线拟合工具箱cftool ,使用方便,能实现多种类型的线性、非线性曲线拟合。下面结合我使用的Matlab R2007b 来简单介绍如何使用这个工具箱。 假设我们要拟合的函数形式是y=A*x*x + B*x, 且A>0,B>0 。 1、在命令行输入数据: 》x=[110.3323 148.7328 178.064 202.8258033 224.7105 244.5711 262.908 280.0447 296.204 311.5475]; 》y=[5 10 15 20 25 30 35 40 45 50]; 2、启动曲线拟合工具箱 》cftool 3、进入曲线拟合工具箱界面“Curve Fitting tool” (1)点击“Data”按钮,弹出“Data”窗口; (2)利用X data和Y data的下拉菜单读入数据x,y,可修改数据集名“Data set name”,然后点击“Create data set”按钮,退出“Data”窗口,返回工具箱界面,这时会自动画出数据集的曲线图; (3)点击“Fitting”按钮,弹出“Fitting”窗口; (4)点击“New fit”按钮,可修改拟合项目名称“Fit name”,通过“Data

set”下拉菜单选择数据集,然后通过下拉菜单“Type of fit”选择拟合曲线的类型,工具箱提供的拟合类型有: Custom Equations:用户自定义的函数类型 Exponential:指数逼近,有2种类型,a*exp(b*x) 、a*exp(b*x) + c*exp(d*x) Fourier:傅立叶逼近,有7种类型,基础型是a0 + a1*cos(x*w) + b1*sin(x*w) Gaussian:高斯逼近,有8种类型,基础型是a1*exp(-((x-b1)/c1)^2) Interpolant:插值逼近,有4种类型,linear、nearest neighbor、cubic spline、shape-preserving Polynomial:多形式逼近,有9种类型,linear ~、quadratic ~、cubic ~、4-9th degree ~ Power:幂逼近,有2种类型,a*x^b 、a*x^b + c Rational:有理数逼近,分子、分母共有的类型是linear ~、quadratic ~、cubic ~、4-5th degree ~;此外,分子还包括constant型Smoothing Spline:平滑逼近(翻译的不大恰当,不好意思) Sum of Sin Functions:正弦曲线逼近,有8种类型,基础型是 a1*sin(b1*x + c1) Weibull:只有一种,a*b*x^(b-1)*exp(-a*x^b) 选择好所需的拟合曲线类型及其子类型,并进行相关设置: ——如果是非自定义的类型,根据实际需要点击“Fit options”按钮,

道路缓和曲线

缓和曲线定义 在土木工程中使用多种缓和曲线,以在切线和圆形曲线之间以及两条具有不同曲率的圆形曲线之间逐渐引入曲率和超高。 在与其他切线和曲线的关系中,每条缓和曲线要么为内曲要么为外曲。 工程师在设计和布局缓和曲线时最常用的两个参数为L(缓和曲线长度)和R(圆形曲线的半径)。 下图显示了缓和曲线的各种参数: 缓和曲线参数描述 i1 缓和曲线曲线L1 的圆心角,此圆心角为螺旋角。 i2 缓和曲线曲线L2 的圆心角,此圆心角为螺旋角。

T1 从交点到TS 的总切线距离。 T2 从交点到ST 的总切线距离。 X1 SC 处自TS 的切线距离。 X2 CS 处自ST 的切线距离。 Y1 SC 处自TS 的切线偏移距离。 Y2 CS 处自ST 的切线偏移距离。 P1 初始切线进入移动曲线的PC 的偏移。P2 初始切线出来到移动曲线PT 的偏移。K1 参照TS 的移动PC 的横坐标。 K2 参照ST 的移动PT 的横坐标。 LT1 长切线前缓和曲线。

LT2 长切线后缓和曲线。 ST1 短切线前缓和曲线。 ST2 短切线后缓和曲线。 其他缓和曲线参数 A1 A 值等于缓和曲线长度乘以半径的平方根。缓和曲线平面度的测量值。 A2 A 值等于缓和曲线长度乘以半径的平方根。缓和曲线平面度的测量值。 公式 复合缓和曲线 复合缓和曲线提供两条具有不同半径的圆形曲线之间的过渡。与简单缓和曲线一样,复合缓和曲线也考虑曲率函数的连续性,并提供在超高中引入平滑过渡的方法。 回旋线 尽管AutoCAD Civil 3D 支持若干类型的缓和曲线,回旋线是最常用的缓和曲线类型。回旋线广泛用于公路和铁路铁轨设计。 由瑞士数学家Leonard Euler 最先研究,回旋曲线的曲率函数是所选择的线性函数,从而缓和曲线与切线相交处的长度函数曲率为零(0)。然后,曲率将线性增加直到其等于缓和曲线和曲线交点处相邻曲线的曲率。

工具箱曲线拟合类型+评价解释

进入曲线拟合工具箱界面“Curve Fitting tool” (1)点击“Data”按钮,弹出“Data”窗口; (2)利用X data和Y data的下拉菜单读入数据x,y,可修改数据集名“Data set name”,然后点击“Create data set”按钮,退出“Data”窗口,返回工具箱界面,这时会自动画出数据集的曲线图; (3)点击“Fitting”按钮,弹出“Fitting”窗口; (4)点击“New fit”按钮,可修改拟合项目名称“Fit name”,通过“Data set”下拉菜单选择数据集,然后通过下拉菜单“Type of fit”选择拟合曲线的类型,工具箱提供的拟合类型有:Custom Equations:用户自定义的函数类型 Exponential:指数逼近,有2种类型,a*exp(b*x) 、a*exp(b*x) + c*exp(d*x) Fourier:傅立叶逼近,有7种类型,基础型是a0 + a1*cos(x*w) + b1*sin(x*w) Gaussian:高斯逼近,有8种类型,基础型是a1*exp(-((x-b1)/c1)^2) Interpolant:插值逼近,有4种类型,linear、nearest neighbor、cubic spline、shape-preserving Polynomial:多形式逼近,有9种类型,linear ~、quadratic ~、cubic ~、4-9th degree ~ Power:幂逼近,有2种类型,a*x^b 、a*x^b + c Rational:有理数逼近,分子、分母共有的类型是linear ~、quadratic ~、cubic ~、4-5th degree ~;此外,分子还包括constant型 Smoothing Spline:平滑逼近(翻译的不大恰当,不好意思) Sum of Sin Functions:正弦曲线逼近,有8种类型,基础型是a1*sin(b1*x + c1) Weibull:只有一种,a*b*x^(b-1)*exp(-a*x^b) 选择好所需的拟合曲线类型及其子类型,并进行相关设置: ——如果是非自定义的类型,根据实际需要点击“Fit options”按钮,设置拟合算法、修改待估计参数的上下限等参数; ——如果选Custom Equations,点击“New”按钮,弹出自定义函数等式窗口,有“Linear Equations线性等式”和“General Equations构造等式”两种标签。 在本例中选Custom Equations,点击“New”按钮,选择“General Equations”标签,输入函数类型y=a*x*x + b*x,设置参数a、b的上下限,然后点击OK。 (5)类型设置完成后,点击“Apply”按钮,就可以在Results框中得到拟合结果,如下例:general model: f(x) = a*x*x+b*x Coefficients (with 95% confidence bounds): a = 0.009194 (0.009019, 0.00937) b = 1.78e-011 (fixed at bound) Goodness of fit: SSE: 6.146 R-square: 0.997 Adjusted R-square: 0.997 RMSE: 0.8263 同时,也会在工具箱窗口中显示拟合曲线。 这样,就完成一次曲线拟合啦,十分方便快捷。当然,如果你觉得拟合效果不好,还可以在“Fitting”窗口点击“New fit”按钮,按照步骤(4)~(5)进行一次新的拟合。 不过,需要注意的是,cftool 工具箱只能进行单个变量的曲线拟合,即待拟合的公式中,变量只能有一个。对于混合型的曲线,例如y = a*x + b/x ,工具箱的拟合效果并不好。

曲线拟合C语言程序

^ #include<> #include<> void nihe(); void gs(); void main() { int i,j,m,n; float o[50]; \ float x[50] , y[50] ,a[50][50]; printf("输入数据节点数 n = ",n); scanf("%d",&n); for( i=1;i<=n;i++) { printf(" i = %d\n",i); } printf("各节点的数据 x[i] \n"); 、 for(i=1;i<=n;i++) { printf("x[%d] = ",i); scanf("%f",&x[i]); } printf("各节点的数据 y[i] \n"); for(i=1;i<=n;i++) { ¥ printf("y[%d] = ",i); scanf("%f",&y[i]); } printf("\n"); printf("拟合的多项式次数 m = ", m); scanf("%d",&m); ¥ } void nihe(float x[50], float y[50], int m ,int n) { int i,j,k=0,c=1,w=1;

float f,a[50][50] , o[50];; ~ do { f=0; for(i=1;i<=n;i++) { f=f+pow( x[i] , k)*pow( x[i] , k); } … a[c][c]=f ; a[c+1][c-1]=f; a[c-1][c+1]=f; c++; k++; }while(k<=m); , k=1;c=1; do { f=0; for(i=1;i<=n;i++) { f=f+pow( x[i] , k); } * a[c+1][c]=f; a[c][c+1]=f; c++; k++; k++; }while(k<=m+1); ) k=0;c=1; do { f=0; for(i=1;i<=n;i++)

最新导线和缓和曲线测设

导线和缓和曲线测设

第九章道路工程测量(圆曲线缓和曲线计算公式) 学习园地2010-07-29 13:10:53阅读706评论0 字号:大中小订阅 [教程]第九章道路工程测量(圆曲线缓和曲线计算公式)未知 2009-12-09 19:04:30 广州交通技术学院第九章道路工程测量 (road engineering survey) 内容:理解线路勘测设计阶段的主要测量工作(初测控制测量、带状地形图测绘、中线测设和纵横断面测量);掌握路线交点、转点、转角、里程桩的概念和测设方法;掌握圆曲线的要素计算和主点测设方法;掌握圆曲线的切线支距法和偏角法的计算公式和测设方法;了解虚交的概念和处理方法;掌握缓和曲线的要素计算和主点测设方法;理解缓和曲线的切线支距法和偏角法的计算公式和测设方法;掌握路线纵断面的基平、中平测量和横断面测量方;了解全站仪中线测设和断面测量方法。 重点:圆曲线、缓和曲线的要素计算和主点测设方法;切线支距法和偏角法的计算公式和测设方法;路线纵断面的基平、中平测量和横断面测量方法 难点:缓和曲线的要素计算和主点测设方法;缓和曲线的切线支距法和偏角法的计算公式和测设方法。 § 9.1 交点转点转角及里程桩的测设一、道路工程测量概述 分为:路线勘测设计测量 (route reconnaissance and design survey) 和道路施工测量 (road construction survey) 。 (一)勘测设计测量 (route reconnaissance and design survey) 分为:初测 (preliminary survey) 和定测 (location survey)

Matlab最小二乘法曲线拟合的应用实例

MATLAB机械工程 最小二乘法曲线拟合的应用实例 班级: 姓名: 学号: 指导教师:

一,实验目的 通过Matlab上机编程,掌握利用Matlab软件进行数据拟合分析及数据可视化方法 二,实验内容 1.有一组风机叶片的耐磨实验数据,如下表所示,其中X为使用时间,单位为小时h,Y为磨失质量,单位为克g。要求: 对该数据进行合理的最小二乘法数据拟合得下列数据。 x=[10000 11000 12000 13000 14000 15000 16000 17000 18000 19000 2 0000 21000 22000 23000]; y=[24.0 26.5 29.8 32.4 34.7 37.7 41.1 42.8 44.6 47.3 65.8 87.5 137.8 174. 2] 三,程序如下 X=10000:1000:23000; Y=[24.0,26.5,29.8,32.4,34.7,37.7,41.1,42.8,44.6,47.3,65.8,87.5,137.8,17 4.2] dy=1.5; %拟合数据y的步长for n=1:6 [a,S]=polyfit(x,y,n); A{n}=a;

da=dy*sqrt(diag(inv(S.R′*S.R))); Da{n}=da′; freedom(n)=S.df; [ye,delta]=polyval(a,x,S); YE{n}=ye; D{n}=delta; chi2(n)=sum((y-ye).^2)/dy/dy; end Q=1-chi2cdf(chi2,freedom); %判断拟合良好度 clf,shg subplot(1,2,1),plot(1:6,abs(chi2-freedom),‘b’) xlabel(‘阶次’),title(‘chi2与自由度’) subplot(1,2,2),plot(1:6,Q,‘r’,1:6,ones(1,6)*0.5) xlabel(‘阶次’),title(‘Q与0.5线’) nod=input(‘根据图形选择适当的阶次(请输入数值)’); elf,shg, plot(x,y,‘kx’);xlabel(‘x’),ylabel(‘y’); axis([8000,23000,20.0,174.2]);hold on errorbar(x,YE{nod},D{nod},‘r’);hold off title(‘较适当阶次的拟合’) text(10000,150.0,[‘chi2=’num2str(chi2(nod))‘~’int2str(freedom(nod))])

教程(圆曲线缓和曲线计算公式

[教程]第九章道路工程测量(圆曲线缓和曲线计算公 式) 未知2009-12-09 19:04:30 广州交通技术学院 第九章道路工程测量 (road engineering survey) 内容:理解线路勘测设计阶段的主要测量工作(初测控制测量、带状地形图测绘、中线测设和纵横断面测量);掌握路线交点、转点、转角、里程桩的概念和测设方法;掌握圆曲线的要素计算和主点测设方法;掌握圆曲线的切线支距法和偏角法的计算公式和测设方法;了解虚交的概念和处理方法;掌握缓和曲线的要素计算和主点测设方法;理解缓和曲线的切线支距法和偏角法的计算公式和测设方法;掌握路线纵断面的基平、中平测量和横断面测量方;了解全站仪中线测设和断面测量方法。 重点:圆曲线、缓和曲线的要素计算和主点测设方法;切线支距法和偏角法的计算公式和测设方法;路线纵断面的基平、中平测量和横断面测量方法 难点:缓和曲线的要素计算和主点测设方法;缓和曲线的切线支距法和偏角法的计算公式和测设方法。 § 9.1 交点转点转角及里程桩的测设 一、道路工程测量概述 分为:路线勘测设计测量 (route reconnaissance and design survey) 和道路施工测量 (road construction survey) 。 (一)勘测设计测量 (route reconnaissance and design survey) 分为:初测 (preliminary survey) 和定测 (location survey)

1、初测内容:控制测量 (control survey) 、测带状地形图 (topographical map of a zone) 和纵断面图 (profile) 、收集沿线地质水文资料、作纸上定线或现场定线,编制比较方案,为初步设计提供依据。 2、定测内容:在选定设计方案的路线上进行路线中线测量 (center line survey) 、测纵断面图 (profile) 、横断面图 (cross-section profile) 及桥涵、路线交叉、沿线设施、环境保护等测量和资料调查,为施工图设计提供资料。 (二)道路施工测量 (road construction survey) 按照设计图纸恢复道路中线、测设路基边桩和竖曲线、工程竣工验收测量。 本章主要论述中线测量和纵、横断面测量。 二、中线测量 (center line survey) 1、平面线型:由直线和曲线(基本形式有:圆曲线、缓和曲线)组成。 2、概念:通过直线和曲线的测设,将道路中心线的平面位置测设到地面上,并测出其里程。即测设直线上、圆曲线上或缓和曲线上中桩。 三、交点 JD(intersecting point) 的测设 (一)定义:路线的转折点,即两个方向直线的交点,用 JD 来表示。 (二)方法: 1、等级较低公路:现场标定 2、高等级公路:图上定线——实地放线。

相关文档
最新文档