三次样条拟合范例
用三次样条函数拟合模具型腔廓线
( ≤暂+, J , , ,一1 暂≤ I =12 …,l ) 其 中 劬 , , 西为待定 系数 。 %
() 1
线的数据 ,然后根据所测数据利用数控机床进行加工 。这种制 1 2 , , . 造方法存 在两个 问题 ,一是 使用 过 的原 型腔表 面有一定 的磨 1 2 1确 定 % ..
Байду номын сангаас
固 用次侯丁合具腔 曾郑清毅科。1 珊梅源拟模咸2 三样函(大阳1 琪 条数西学7 陕 型廓 技 0 8 ) 线
Di a i u l e f t u i s l e f n t n e c vt o tn iwi c bc pi u ci y i t h n o
Z N hn—q 。 H N Ii HO ig u n D N i E GS a i Z E G le。 U Qn —y a , I G Y  ̄ (h a x U i r t o c ne&T c nlg , in ag7 2 8 , hn ) S a n i nv s y f i c e i S e eh o y X a yn 10 1C ia o
因之 一 。
西 =一2 ,+ 一, /^, +(』 +) + (,- , 3+1 6+ -/^,・ ) ( =12 … ,l ) J , , ,一1
() 3
三次样条函数属于 高次分段 多项式 ,整体具有一定的连续 性 。它是一般多项 式的推广 ,也可以看成是阶梯函数的若干次
西的确 定
损, 使测得的廓线数据 有误 差。同时 , 量中还会 产生一定 的测 测 量误差 ,在加工过程中难以得到精确的修正 ;二 是无法从离散 点组成的曲线分析 出它 的成形规律 。因此 ,制造 出的型腔与原
三次样条函数
yi ' = a1 + a 2 (2 xi − xi +1 ) + a3 3 xi − 2( xi +1 + xi )xi + xi xi +1
]
2
i +1
1
2
i +1
3
i +1
i
i +1
其中:
y − yi y − y i −1 + arctg i arctg i +1 xi +1 − xi xi − xi −1 yi ' = tg 2
y1 − y 0 x1 − x 0 x1 − x0
(
)
y1 '− a 2 + a 3 x1 =
(0.6)
由(0.4)
2a 2 + a 3 (4 x0 − 2 x1 ) = 0
(0.7)
(0.6)-(0.7)
a 3 x1 − a 3 (2 x0 − x1 ) = y1 '− y1 '− y1 − y 0 x1 − x0 x1 − x0
3
2 n−2
− x n−1 x n − 2
)
)(2.3)
y n −1 " = 2a 2 + a3 (6 x n −1 − 2( x n − 2 + x n −1 )) = 2a 2 + 2a3 (2 x n −1 − x n− 2 ) (2.2) –(2.1)
(2.4)
y n −1 − y n − 2 = a1 ( x n −1 − x n− 2 ) + a 2 ( x n −1 − x n − 2 )x n − 2 = ( xi +1 − xi )(a1 + a 2 xi )
三次样条插值与多项式拟合的关系
三次样条插值与多项式拟合的关系《三次样条插值与多项式拟合的关系》一、简介在数学建模和数据分析中,插值和拟合是非常重要的方法。
三次样条插值和多项式拟合是其中常见且有效的技术。
它们之间有着密切的关系,对于理解它们的原理、特点和应用是很有帮助的。
二、三次样条插值的原理与方法三次样条插值是一种通过对给定的一组点进行插值,得到一个分段三次插值多项式的方法。
它的原理是将整个插值区间划分为多个小区间,每个小区间内都使用一个三次多项式来插值。
这样可以保证整个插值曲线在每个小区间内都是光滑的,并且两个相邻的插值多项式在连接点处有相同的函数值和导数值。
三次样条插值不仅可以实现较高的插值精度,还可以很好地避免龙格现象和振荡问题。
三、多项式拟合的原理与方法多项式拟合是一种通过多项式来逼近已知数据点的方法。
常见的拟合方法包括最小二乘法和最小二乘多项式拟合等。
多项式拟合的原理是使用一个n次多项式函数来逼近n个数据点,使得这个多项式函数在这n个数据点处的函数值与给定数据点的函数值尽可能接近,并且可以用于对其他数据点的预测。
四、三次样条插值与多项式拟合的关系在实际应用中,三次样条插值和多项式拟合有着密切的关系。
可以将三次样条插值看作是一种特殊的分段多项式拟合,只不过它要求在每个小区间上都使用三次多项式来进行拟合。
多项式拟合可以被认为是三次样条插值的一种特殊情况,当插值区间只有一个小区间时,三次样条插值就变成了普通的三次多项式拟合。
可以说三次样条插值和多项式拟合是在不同层次上对数据进行逼近的方法,它们之间有着内在的联系和相互影响。
五、个人观点和理解在实际工程和科学领域中,三次样条插值和多项式拟合都有着广泛的应用。
对于一些特定的数据集,三次样条插值可以提供更加精确和光滑的插值结果,而对于一些简单的数据集,多项式拟合可能会更加高效和简便。
了解它们之间的关系和特点,可以帮助我们在实际应用中选择合适的技术来处理数据,并且更好地理解其原理和局限性。
三种曲线拟合方法的精度分析
三种曲线拟合方法的精度分析L,曲线拟合是皂丝圈宁的曲线光滑方法它根据给定的离散点?建立一个适当的解析式,使所表示的连续曲线反映和逼近已知点构成的特征多边形.地形图上的曲线具有多种类型.例如境界,道路,等高线和水网线等.这些曲线图形多数是多值函数,呈现出大挠度,连续拐弯的图形特征.在传统的测绘工作中,各种曲线是根据实测点位由人工联接勾绘而成.随着测绘自动化及数字化技术的不断发展,野外地面测量仪器中的经纬仪.已被全站仪逐渐取代.而在平板仪上进行的地形图清绘整饰工作,则可在微机上借助交互式图形技术完成.这一进步不仅可增加工作效率,缩短生产周期,减低劳动强度,也提高了图形质量.野外实测数据确定的特征多边形,需在计算机图形编辑中采用一定的曲线线跫对其作曲线拟合.本文对三种曲线拟台线型——圆曲线,二次B样条曲线,三次B样条曲线的理论拟台精度展开讨论.并在实验中得到验证.l三种曲线拟合方法1.1圆曲线平面上三点;(?,y1),B(?.),(南,ya)}其圆弧方程++/)X+Ey+F=0.过上述三点作圆弧(图1).当I丑yl1f?的顶点.二次B样条的一阶导数为:小l.B.且Bo?t?l0?t?1其端点性质如下:P(o)一?(Bo4-且)}P(1)=告(B】+岛);(0)一BI一&}(1)=岛一B}P(专)吉&+}且+吉岛=1{吉[P(o)+P(1)]+蜀};(音)一{(岛一Bo)一P(1),P(0)以上性质说明二次B样条曲线的起点P(0)在B特征多边形第一边的中点处,且其切向量且一&即为第一边的走向;终点P(1)在第二边的中点处,且其切向量B:一B为第二边的走向.而且P(1/Z)正是凸P(O)昌P(1)的中线B,M的中点,在P(1/2)处的切线平行于P(O)P(1)(图2).图2二次B样条拟台特征多边形上海蚨道大学第17告1.3三次B样条曲线三次B样条的分段函数式为..c一霎c一-,d一c+一一,,c一=s,z=.,,z,s 三次B样条曲线的矩阵为:3P()=?.3(f)BL=J一口其一阶导数为:[产1]?百1?(t)一[产t1]?告?一l3—3l3—630,30301410一l3—3l2—42O一10l0昂目岛鼠鼠且岛且0?t?10?t?l三次B样条曲线的端点性质如下:P(0)=音(岛+4且+岛)一{(堡{)+号且}P(1)=吉(且+4B+鼠)={(鱼{)+导局;(0)一百1(岛一Bo);(1):I(B一Bi)以上性质说明:三次B样条曲线起点P(0)落在反目B的中线/3.研上距/3的三分之一处,该点的切向量(0)平行于厶‰矗岛的底边/3.Bz,长度为其一半;终点P(1)处的情况与此相对应(见图3).if一}图3三次B拌条拟合特征多边形2三种拟合曲线的比较2+l圆曲线与二次B样条曲线的比较取平面上三点/3-,马…/3井分两种情况进行比较一一一第3期许恺.三神曲拽拟音方法的情虚分析(1)当瓦=瓦瓦时(见图4),过岛,B,岛作圆曲线岛Q最岛,其与特征多边形有两处偏离值最大,即QR与c,,且QR=UV.而二次B样条曲线RTU与特征多边形有一处偏离值最大,即B?则.0??,,7j,一—,/I//,?L—r/.s图4圈曲线与二趺B样条比较(1)QR=s蜀T={(2r?si譬)式中,为圆弧半径l0为弦届置所对圆心角l2,6为弦BoBz所对圆心角.由此即可知.器=>1(>0)(2)鼠晶?蜀岛时,随着岛蜀与蜀岛的差值加大,QR也加大,而B,T值是一定值(见图5).由此可得出二次B样条曲线拟合优于圆曲线拟合的结论.j,一0/..7.一\,}l一?I1形图等高线上选定点位组成特征多边形.分别用圆曲线,二次B样条曲线,三次B样条曲线对等高线特征多边形进行曲线拟合,测出拟合曲线与特征多边形的偏离值.共50个观测值,对测中误差为0.05rnm,取偏离值的平均值列于附表.附裹兰莫拟台曲线平均偏差比较裹哪由上分析可得出如下结论:1?圆曲线拟合特征多边形时,其偏差值要太于=次B样条曲线的拟合偏差.特征多边形相邻两边的长度相差越大.上述两种曲线拟合偏差之差越大.2一二次B样条曲线的拟合误差是三次B样条曲线拟合误差的四分之三.3一对特征多边形作曲线拟合时,在圆曲线.二次B样条,三次B佯条中使用二次B样条参考文献1盒延赞.计算机图形学.杭州t浙江大学出版杜.1988165,1672许隆文.计算机绘图.北京机槭工业出版杜.1989,334,3383孙家广.扬长贵.计算机图形学.北京清华大学出版杜.1994:288,2g0AnalysisofAccuracyofThreeCurve—FittingMethodsXHKdi(Dept?ofCivilE.ShanghaiTiedaoUniv)..Abst喇{reecurve—fittigmethodsareanalyzedandcornpared.ThequadraticBph”re岛ekcted.heopjmlJmcurvefittingforimp?Vingmapaccuracyoftopo graghicaldrawing?andthey8reverifiedbexperiments.dsltopographicmap,eurve—fittig,fittingaccuraey,BsDlines。
三次样条拟合典型实例
1设计目的、要求对龙格函数22511)(xx f +=在区间[-1,1]上取10=n 的等距节点,分别作多项式插值、三次样条插值和三次曲线拟合,画出)(x f 及各逼近函数的图形,比较各结果。
2设计原理(1) 多项式插值:利用拉格朗日多项式插值的方法,其主要原理是拉格朗日多项式,即:01,,...,n x x x 表示待插值函数的1n +个节点, 0()()nn j k k j j k L x y l x y ===∑,其中0,1,...,j n =;011011()...()()...()()()...()...()...()k k n k k k k k k k n x x x x x x x x l x x x x x x x x x -+-+----=----(2) 三次样条插值:三次样条插值有三种方法,在本例中,我们选择第一边界条件下的样条插值,即两端一阶导数已知的插值方法:00'()'S x f = '()'n n S x f =(3)三次曲线拟合:本题中采用最小二乘法的三次多项式拟合。
最小二乘拟合是利用已知的数据得出一条直线或者曲线,使之在坐标系上与已知数据之间的距离的平方和最小。
在本题中,n= 10,故有11个点,以这11个点的x 和y 值为已知数据,进行三次多项式拟合,设该多项式为23432xi i i i p a a x a x ax =+++,该拟合曲线只需2[]xi i p y -∑的值最小即可。
3采用软件、设备计算机、matlab 软件4设计内容1、多项式插值:在区间[]1,1-上取10=n 的等距节点,带入拉格朗日插值多项式中,求出各个节点的插值,并利用matlab 软件建立m 函数,画出其图形。
在matlab 中建立一个lagrange.m 文件,里面代码如下: %lagrange 函数function y=lagrange(x0,y0,x) n=length(x0);m=length(x); for i=1:m z=x(i); s=0.0; for k=1:n p=1.0; for j=1:n if j~=kp=p*(z-x0(j))/(x0(k)-x0(j)); end ends=p*y0(k)+s; end y(i)=s; end建立一个polynomial.m 文件,用于多项式插值的实现,代码如下: %lagrange 插值 x=[-1:0.2:1];y=1./(1+25*x.^2); x0=[-1:0.02:1];y0=lagrange(x,y,x0); y1=1./(1+25*x0.^2); plot(x0,y0,'--r') %插值曲线 hold on %原曲线plot(x0,y1,'-b')运行duoxiangshi.m 文件,得到如下图形:2、三次样条插值:所谓三次样条插值多项式()n S x 是一种分段函数,它在节点i x 011()n n a x x x x b -=<<⋅⋅⋅<<=分成的每个小区间1[,]i i x x -上是3次多项式,其在此区间上的表达式如下:22331111111()[()()]()()666[,]1,2,,.i i i i i i i i i i i i i i i i i h x x h x x S x x x M x x M y M y M h h h x x x i n --------=-+-+-+-∈=⋅⋅⋅,,因此,只要确定了i M 的值,就确定了整个表达式,i M 的计算方法如下: 令:11111111116()6(,,)i i i i i i i i i i i i i i i i i i i i i h h h h h h y y y y d f x x x h h h h μλμ++++--+++⎧===-⎪++⎪⎨--⎪=-=⎪+⎩,则i M 满足如下1n -个方程:1121,2,,1i i i i i i M M M d i n μλ-+++==⋅⋅⋅-,对于第一种边界条件下有⎪⎪⎩⎪⎪⎨⎧-=+-=+---000110111)'],([62]),['(62h f x x M M h x x f f M M n n n n n n如果令100100016([,]')6('[,])1,,1,,n n n n n n f x x f f f x x d d h h λμ----====那么解就可以为⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛----n n n n n n n d d d d M M M M 110110********* μλμλμλ 求函数的二阶导数: >> syms x>> f=sym(1/(1+25*x^2)) f =1/(1+25*x^2) >> diff(f) ans =-(50*x)/(25*x^2 + 1)^2将函数的两个端点,代入上面的式子中:f’(-1)=0.0740f’(1)=-0.0740求出从-1到1的n=10的等距节点,对应的x,y值对应m文件代码如下:for x=-1:0.2:1y=1/(1+25*x^2)endy =得出x=-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1y=0.0385 0.0588 0.1 0.2 0.5 1 0.5 0.2 0.1 0.0588 0.0385编写m文件Three_Spline.mx=linspace(-1,1,11);y=1./(1+25*x.^2);[m,p]=scyt1(x,y,0.0740,-0.0740);hold onx0=-1:0.01:1;y0=1./(1+25*x0.^2);plot(x0,y0,'--b')得到如下图像:.其中蓝色曲线为原图,红色曲线为拟合后的图像。
样条函数及三次样条插值PPT课件
(x)
lim
x xk
Sk 1( x)
lim
x
x
k
Sk (x)
lim
x
x
k
Sk1( x)
k 1,2,,n 1
------(4)
lim
x
x
k
Sk( x)
lim
x
x
k
Sk1( x)
共4n 2个条件
5
Sk (x)是[xk , xk 1 ]上的三次样条插值多项式,应有4个待定的系数 即要确定S(x)必须确定4n个待定的系数 少两个条件 并且我们不能只对插值函数在中间节点的状态进行限制 也要对插值多项式在两端点的状态加以要求 也就是所谓的边界条件:
例. 使用不同的插值方法于函数
y
1
1 x2
x [5,5]
最后,介绍一个有用的结论
定理 . 设f (x) C 2[a,b], S(x)是以xk (k 0,1,, n)
为节点, 满足任意边界条件的三次样条插值函数,
设hi
xi 1
xi
,
h
max
0in1
hi
,
min
0in1
hi
,
则当 h
c 时
S(x)和S(x)在[a,b]上一致收敛到f (x)和f (x)
------(6)
13
由(11)式,可知
S0( x0
)
6( x0
x1 h03
2 x0
) ( y1
y0 )
6 x0
2 x0 h02
4 x1
m0
6 x0
4 x0 h02
2 x1
m1
6 h02
(
基于遗传算法的三次样条函数拟合_陈小平
引 言
在连 续信号 的复原 和重建 过程中 ,须从 离散样 本求出不位于取样点上的数值。 如果 考虑复原过程 总会 存在误差 ,那么通 过一些 有误差 的离散 数据来 得到 整个区间的 曲线是 一个曲 线拟合或 逼近问 题。
而当误差为零时 ,逼近就退化成了插值。作为逼近当 然存在一个用什么函数来逼近的 问题 ,样条 函数 ,尤 其是 三次样条函 数 ,是 曲线拟 合的一 个公认 的较好 方法 ,它具有很好的分段光滑性。但三次样条函数拟 合涉及到矩阵求逆 ,当离散样本点 (观测数据 )越多 , 矩阵就越庞大 ,求逆就越繁琐。 为了解决这 个矛盾 , 本文提出将遗 传算法 ( Genetic algo rithms, GA )用于
据采 样点处 于 tk 上 ,k 为整 数 ,而 h 为采样 间隔 ,则
任意一点可以表 示为 t= tk+ ph , 0≤ p < 1,当采用三
次 B-样条函数来进 行信号拟合时 ,有
k+ 2
∑ S( tk + ph ) =
anB3 ( p + k - n)
n= k- 1
其中
∑ =
1 6h
3 n=
0
Genetic Algorithms Based Cubic Spline Functions Fitting
Chen X iaoping Y u Shengl in Liu Wenbo
Depar tment of M ea sur ement and T esting Enginee ring , N anjing U niv ersity of Aer onautics & Astr onautics N anjing , 210016
数据插值方法范文
数据插值方法范文数据插值是指利用已知数据点来估算或预测未知数据点的方法。
在实际应用中,数据插值常常用于填补缺失数据、估算缺失数据以及生成光滑曲线等任务。
本文将介绍常用的数据插值方法。
1.线性插值方法:线性插值是数据插值的一种简单且常用方法。
它假设在两个已知数据点之间的未知数据点的取值是线性变化的。
线性插值的计算公式可以表示为:y=y1+(x-x1)*(y2-y1)/(x2-x1),其中x1和x2是已知数据点的位置,y1和y2是对应的取值,x是待插值点的位置,y是对应的待插值的值。
2.拉格朗日插值方法:拉格朗日插值方法是一种高次插值方法。
它通过构造一个多项式函数来逼近已知数据点,然后利用多项式进行插值。
拉格朗日插值的计算公式可以表示为:y = Σ(yi * L(xi)),其中xi和yi是已知数据点的位置和取值,L(xi)是拉格朗日插值多项式的系数。
3.牛顿插值方法:牛顿插值方法也是一种高次插值方法。
与拉格朗日插值不同的是,牛顿插值使用了差商的概念来构造插值多项式。
牛顿插值的计算公式可以表示为:y=Σ(Di*ωi),其中Di是差商,ωi是权重。
牛顿插值可以通过迭代计算差商并更新权重来求解。
4.三次样条插值方法:三次样条插值方法是一种光滑插值方法,其主要思想是以每两个已知数据点为节点,通过拟合三次多项式来进行插值。
三次样条插值的计算公式可以表示为:S(x) = ai + bi(x-xi) + ci(x-xi)^2 + di(x-xi)^3,其中ai、bi、ci、di是多项式的系数,xi是已知数据点的位置。
5.克里金插值方法:克里金插值方法是一种空间插值方法,主要用于地质学、气象学等领域。
它假设未知点的取值是由已知点的取值通过一定的权重加权求和得到的。
克里金插值的计算公式可以表示为:Z(x)=Σ(λi*Zi),其中Z(x)是待插值点的取值,Zi是已知数据点的取值,λi是权重。
除了以上介绍的几种常用的数据插值方法外,还有一些其他的插值方法,如最邻近插值、反距离权重插值、径向基函数插值等。
三次样条实验报告范文三次样条插值的实验报告范文
三次样条实验报告范文三次样条插值的实验报告范文湘潭大学实验报告课程名称计算机图形学实验名称参数三次样条的绘制页数专业计算机科学与技术班级一班同组者姓名学号2022551208姓名刘兆臣实验日期2022.05.05实验目的使学生掌握三次参数样条的定义、画法和程序的编写。
实验内容和要求给定型值点,要求用VC++6.0画出通过给定型值点的参数三次样条曲线。
实验方案设计给定型值点,计算出参数三次样条曲线的每个区间段的代数式,由Hermit曲线定义画出每个区间的曲线。
开始开始给定型值点给定型值点计算出参数计算出参数ifn=1Yifn=1N给系数矩阵赋值给系数矩阵赋值Ifn=2YIfn=2给定系数值给定系数值N求解方程组,计算出各点导数求解方程组,计算出各点导数Ifi<ni=0Ifi<ni=0Y计算第i段的二次项,三次项系数计算第i段的二次项,三次项系数结束结束t=0t=0Ift<tt[i-1]Ift<tt[i-1]NYt=t+et=t+e计算出第i段中各点的某,y值计算出第i段中各点的某,y值连线段连线段i++i++程序运行和实验结果说明和分析。
使用VC++6.0运行程序后得到如下图形图为四段曲线组成的三次参数样条曲线,其中各段的绘制是通过给定了型值点的相关参数计算出型值点的导数,再由Hermit曲线知识,在各段上以直代曲绘制出每段的图形。
基本达到了实验目的,完成实验要求。
性能、扩展性等方面存在的不足和可能的改进之处。
不足:在源代码中的n个点采用了数据初始化的方法给出且给定了型值点的个数。
由于给定型值点较少,三次参数样条曲线看起来不够明显。
可改进:可将初始化的型值点数据去除,采用手动键盘输入或文件输入的方法导入多个型值点数据。
附件一源程序,执行程序,符号列表文件。
#include<graphic.h>#include<math.h>#include<conio.h>main(){intgdriver=DETECT,gmode;float某[100],y[100],a[100],b[100],c[100];floatp某[100],py[100],q某[100],qy[100],tt[100];floatd某[100],dy[100];inti,n=4,t,e=3;floatb某3,b某4=0.0,by3=0.0,by4,c某,cy;initgraph(&gdriver,&gmode,"");for(i=0;i<n;i++) {a[i]=0.0;b[i]=0.0;c[i]=0.0;p某[i]=0.0;py[i]=0.0;d某[i]=0.0;dy[i]=0.0;tt[i]=0.0;q某[i]=0.0;qy[i]=0.0;}p某[0]=1.0;py[0]=1.0;p某[4]=1.0;py[4]=1.0;某[0]=10.0;y[0]=110.0;某[1]=40.0;y[1]=100.0;某[2]=80.0;y[2]=90.0;某[3]=130.0;y[3]=95.0;某[4]=200.0;y[4]=105.0;moveto(某[0],y[0]);for(i=0;i<n;i++)putpi某el(某[i],y[i],15);putpi某el(某[0],y[0],15);for(i=0;i<n;i++)tt[i]=qrt((某[i]-某[i-1])某(某[i]-某[i-1])+(y[i]-y[i-1])某(y[i]-y[i-1]));if(n==1)gotopO;for(i=1;i<=n-1;i++){a[i]=2某(tt[i]+tt[i+1]);b[i]=tt[i+1];c[i]=tt[i];d某[i]=3某(tt[i]某(某[i+1]-某[i])/tt[i+1]+tt[i+1]某(y[i]-y[i+1])/tt[i]);}d某[i]=d某[1]-tt[2]某p某[0];d某[n-1]=d某[n-1]-tt[n-1]某p某[n];dy[1]=dy[1]-tt[2]某py[0];dy[n-1]=dy[n-1]-tt[n-1]某py[n];if(n==2){p某[1]=d某[1]/a[1];py[1]=dy[1]/a[1];gotopO;}c[1]=c[1]/a[1];for(i=2;i<=n-1;i++){a[i]=a[i]-b[i]某c[i-1];c[i]=c[i]/a[i];}q某[1]=d某[1]/a[1];qy[1]=dy[1]/a[1];for(i=2;i<=n-1;i++){q某[i]=(d某[i]-b[i]某q某[i-1])/a[i]; qy[i]=(dy[i]-b[i]某qy[i-1])/a[i];}p某[n-1]=q某[n-1];qy[n-1]=qy[n-1];for(i=n-2;i>=1;i--){p某[i]=q某[i]-c[i]某p某[i+1];py[i]=qy[i]-c[i]某py[i+1];}pO:for(i=0;i<=n-1;i++){b某3=(3某(某[i+1]-某[i])/tt[i+1]-2某p某[i]-p某[i+1])/tt[i+1];b某4=((2某(某[i]-某[i+1])/tt[i+1]+p某[i]+p某[i+1])/tt[i+1])/tt[i+1];by3=(3某(y[i+1]-y[i])/tt[i+1]-2某py[i]-py[i+1])/tt[i+1];by4=((2某(y[i]-y[i+1])/tt[i+1]+py[i]+py[i+1])/tt[i+1])/tt[i+1];t=0;do{t=t+e;c某=某[i]+(p某[i]+(b某3+b某4某t)某t)某t;cy=y[i]+(py[i]+(by3+by4某t)某t)某t;lineto(c某,cy);}while(t<tt[i+1]);}getch();cloegraph();}某[i]i型值点某坐标y[i]i型值点Y坐标a[i]初始赋值方程组系数矩阵mi,i的值b[i]初始赋值方程组系数矩阵mi,i+1的值c[i]初始赋值方程组系数矩阵mi,i-1的值p某[i]i型值点导函数某值py[i]i型值点导函数Y值q某[i],qy[i],d某[i],dy[i]均为解方程组中的各项系数tt[i]第i段参数范围(型值点i-1到型值点i的距离)b某,y3每段函数中二次项的系数b某,y4每段函数中三次项的系数c某每段函数中各点的某值cy每段函数中各点的Y值e作图时每段‘以直代曲’中的参数增量其中方程矩阵形式为:m1,1m1,2p1C1m2,1m2,2m2,3p2C2m3,2m3,3m3,4p3C3............=...mn-1,n-2mn-1,n-1mn-1,npn-1Cn-1mn,n-1mn,npnCn将系数矩阵改写为:其中方程矩阵形式为:(变量与代码变量不对应,如a2不等于a[2]) m1,1m1,2l11u1m2,1m2,2m2,3a2l21u2m3,2m3,3m3,4a3l31u3.........=.........mn-1,n-2mn-1,n-1mn-1,nan-1ln-11un-1mn,n-1mn,nanln1pi对应代码中p某[i],py[i]的值Ci对应代码中q某[i],qy[i]的值附件二运行结果文件。
基于多项式插值与三次样条插值曲线拟合的比较
《数值分析》课外课堂大作业论文题目:基于多项式插值与三次样条插值曲线拟合的比较姓名:学号:学院:专业方向:联系方式:(QQ号)(手机号)导师姓名:完成人(亲笔)签字基于多项式插值与三次样条插值曲线拟合的比较摘要:在数值计算中经常要计算函数,当函数只在有限点集上给定函数值要包含改点集的区间上用公式给出函数的简单表达式,这就涉及在已知区间上用简单函数逼近已知复杂函数问题。
本文为了解决这类问题就采用多项式插值与三次样条插值两种插值法并利用MATLAB数值分析软件进行编程,实现相应数据的曲线拟合以获得最佳曲线模型与相应数据的曲线拟合,选出最优的插值法以解决所给数据的曲线拟合问题。
关键词:函数;多项式插值;三次样条插值;曲线拟合;MATLABAbstract:In numerical analysis ,the function value is often calculated .when the function is only given a function point set ,the simple expression of the function is given by the interval .which involves the use of a simple function to approximate the known complex function .in order to solve this problem ,we use polynomial interpolation and cubic spline interpolation tow kind of interpolation method and use MATLAB numerical analysis software to program ,to achieve the curve fitting of the corresponding date to obtain the best cure fitting ,and to choose the best interpolation method to solve the problem of curve fitting to the date.Keyword: Function ; Polynomial interpolation ; Cubic spline interpolation ; Fitting of a curve ; MATLAB前言现代科学研究中,物理量之间的相互关系通量是用函数来描述的,许多实际问题都用函数y=f(x)来表示某种内在规律的数量关系其中相当一部分函数是通过试验或观测得到的也有少量函数关系是由经典物理分析推导得到的,但许多实际问题很难用经典理论分析得出,因为虽然f(x)在某个区间[a,b]上是存在的,有的还是连续的,但往往这个f(x)并不包含我们所得函数表的所有值因此我们希望根据给定的函数表做一个即能反应函数f(x)的特行,又便于计算的简单函数p(x),用p(x)近似f(x),这样确定的p(x)就是我们希望得得到的插值函数。
参数三次插值样条曲线
边界条件: 给定 点P1 和Pn的一阶导数 给定 点P1 和Pn的二阶导数 造型中的实际方法,头尾增加两个虚拟点, 使所有型值点成为内点(例如采用自然边 界条件)。
优缺点:
优点:三次多项式在使用的灵活性和计算速度上
提供一个合理的平衡方案,与高次多项式比较, 运算较少且较稳定,与低次多项式比则在曲线拟 合上更灵活。
n=2时,有3个控制点p0、p1和p2,Bezier多项式是 二次多项式:
p (t ) Pk BENk , 2 (t )
k 0 2 (1 t ) 2 P0 2t (1 t ) P t P2 1 2 ( P2 2 P P ) t 2( P 1 0 1 P 0 )t P 0 2
向量方程: P(u)=au3 +bu2 +cu +d, (0≤u≤ 1) 曲线矩阵方程: a P(u)= [u3 u2 u 1] b 以0,1代入,求出边界条件
Pk-1 Pk Pk+1 Pk+2 c d
求解多项式系数
a b c d 其中: Mc = -t 2-t t-2 t 2t t-3 3-2t -t -t 0 t 0 0 1 0 0 是Cardinal矩阵 Pk-1 Pk Pk+1 Pk+2 Pk-1 Pk Pk+1 Pk+2 Pk-1 Pk Pk+1 Pk+2
2 3 p(t ) Pk BENk ,3 (t ) (1 t )3 P0 3t (1 t ) 2 P 3 t ( 1 t ) P t P3 1 2 k 0 3
BEN0,3 (t ) P 0 BEN 1,3 (t ) P 1 BEN2,3 (t ) P 2 BEN3,3 (t ) P 3
三次样条插值在工程拟合中的应用
三次样条插值在工程拟合中的应用摘要: 介绍了工程实验、勘测、设计中常见的列表函数之数值插值方法、程序实现及工程应用, 应用此法可方便地将任何列表函数计算到工程设计、施工所需要的精确程度, 给出了各参数随主要参数变化而变化的光滑曲线, 并将其应用推广到一般情况.关键词: 列表函数; 数值拟合; 三次样条插值; MA TLAB 程序设计与应用在实际工程中, 广泛存在这样的问题: 根据设计要求和具体的工程条件, 在初始设计阶段会勘测得到若干组该工程的控制参数, 但这些参数之间彼此离散、不够密集, 利用它们来施工则不能满足施工的精度要求. 为了解决这一问题, 需要对已知的参数数据进行分析处理, 进行必要的插值、拟合, 以达到施工所需要的数据精度.本文以工程实例为基础, 对实际工程中插值方法的选取、插值的实现和插值曲线的拟合加以讨论, 提出能得到较合乎实际的插值方法, 给出一般工程人员就能实现的计算方法以及能得到光滑曲线的拟合方法.1 工程应用实例表1 所示的为某双曲拱坝体形原始参数[ 1对于这一类工程列表参数有一个显著的特点:尽管不同工程的参数多寡不同, 但都是由n 行k列的离散的列表数据给出, 虽然同一行代表某工程特定位置的几个参数(或高程参数, 或上游半径参数⋯) , 但相邻两行由于位置距离太大, 两行各参数之间究竟存在什么数值关系, 对工程设计、施工有何影响, 这是工程技术人员需要弄清楚的[ 2 ].以双曲拱坝为例, 它沿整个高程的变化是一个连续光滑的空间曲面. 从施工需要来看, 这些数据太稀疏, 难以满足设计、施工放样与钢筋配置等要求, 如果照此施工, 则有可能达不到工程精度、降低工程效率; 从计算机图形模拟来看, 要生成这个曲面仅由这一列表函数是得不到光滑曲面的, 是不可取的. 所以, 为使计算精确, 满足工程施工过程中任何断面位置、任意水平位置、任意高程位置所必需的施工数据与设计图纸, 保证工程施工的高品质,就要求作精确的数据处理.进一步分析可知, 在这些参数表中, 各行的参数都随某一主要参数的变化而变化, 如上游半径参数随高程的变化而变化⋯, 它们的这种函数关系,在数值分析中有许多的方法可以求得. 但是哪种方法能更好、更合乎实际地给出平滑曲线呢? 下面所选的插值方法能够较好地满足这一要求.2 插值方法的选择在数值分析中, 这种插值过程可具体使用线性( 1inear ) 插值、三次样条( sp line ) 插值、立方(cub ic) 插值等方法, 在曲线插值法中最常用的是线性插值法, 它是估计两个主干点之间数值的最简单、最易实现的方法, 但采用线性插值法会有以下缺点:一是使得曲线不能显示连接主干点间的凸状弧线;二是使得从曲线导出远期曲线时会形成人为的“尖头”(sp ikes) [ 2 ].因此, 通常采用样条法来构造曲线. 样条法是用一平滑曲线来对各主干点进行拟合的方法. 它是通过构造多项式(一个或一组不同阶多项式) 来形成一条把所有主干点连接起来的平滑曲线. 一般常常选择三次曲线(根据三次插值样条函数所得的曲线) 进行拟合.通常, 在[a, b ]上的以x i ( i=0, 1, 2, ⋯, n) 为节点的三次插值样条函数[ 3 ] 定义如下: 给定区间[a, b ]的一个划分$: a= x 0< x 1< x 2< ⋯< x n = b和区间[a, b ]上的一个函数f (x ) , 若函数S (x ) 满足下列条件:(1) 一致通过n+ 1 个插值点(x i, y i) , 即S (x i) = f (x i) = y i ( i= 0, 1, 2, ⋯, n) ;(2) 二阶连续, 即S (x ) ∈C2 [a, b ];(3) 三次分段, 即在每一个小区间[ x i- 1, x i ]( i= 1, 2, ⋯, n) 上均为三次多项式.则称S (x ) 为函数f (x ) 的三次插值样条函数. 在构造三次插值样条函数时, 为确定S (x ) 应根据n+ 1个插值条件, 3n- 3 个连续条件以及给定的边界条件, 再利用节点处的一阶导数或二阶导数就可构造出三次插值样条函数. 在构造曲线过程中, 关键是估计三次多项式函数和确定样条函数形式.从以上理论分析可知, 三次活动曲线具有优良的数学特征, 而且用三次曲线去拟合时, 其结果要比线性插值估计更接近于工程实际情况[ 4 ]. 三次曲线法又可分为三次样条插值法和立方插值法. 在数值分析中有许多的方法, 限于篇幅, 本文仅以工程上用得较多的、具有优良效果的三次样条插值为例介绍插值方法.3 插值计算原理三次样条函数的数学原理及其子程序, 可见于多种数学著作[ 5 ]与算法手册. 这里作简单介绍.由于拱坝或其他工程曲面都是连续而光滑的空间曲面, 它的断面高程自坝底至坝顶均满足a= j 1< j 2< ⋯< j n= b,且每一位置(高程) 都对应有一组几何参数: y 1, y 2,⋯, y n. 如上游半径、下游半径、拱厚等(见表1 所列) , 因此对于一组高程插值点j 1= t1< t2< t3< ⋯< tm ≤j n ,可用三次自然样条函数S (x ) 求解它们在各插值点的函数值及其一阶导数S ′(x ) 和二阶导数S ″(x ).三次样条函数S (x ) 是用分段三次多项式逼近函数y = f (x ) , 且满足S (x ) 为区间[a, b ]上曲线y= f (x ) 的三次样条插值函数的三个条件.经两次积分, 可得三次样条插值函数S (x ) 的表达式为利用函数S (x ) 在样点x i 处具有连续二阶导数的条件, 再根据三次自然样条插值法, 增加自然边界条件得到如下方程组:解上述方程组, 求得M i ( i= 0, 1, 2, ⋯, n) 代入S (x ) 公式, 即可得每个子区间[ x i- 1, x i ] ( i= 1, 2,⋯, n) 上的三次样条函数.根据上述原理, 对工程原始列表数进行插值计算, 即可满足多种施工要4 插值方法的实现由以上可以看出, 三次样条插值的关键是寻找插值函数, 但插值函数寻找相当复杂, 对于一般的工程人员很难完成, 那么怎样才能使三次样条插值这一优秀的插值方法被人们所掌握呢?M athworks公司推出了功能强大的数学计算软件MA T2LAB[ 6 ] , 它不但使源程序编写简单、源程序代码简短(因为现成的三次样条插值函数可供使用) , 而且可以利用其强大的作图功能方便地拟合出光滑曲线. 因此, 本文选用MA TLAB 语言作为计算语言MA TLAB 程序设计原理:在以上参数表中, 各行的各参数都随高程这一主要参数的变化而变化, 根据它们变化的这种函数关系, 以高程为插值的已知节点(其中已知节点个数n = 6) , 为使插值结果一致通过这些节点, 以1. 36为步长调用插值函数进行插值.MA TLAB 程序设计算法:( 1) 写入原始参数矩阵, 以同一组参数为行,以同一种参数为列;(2) 产生插值的精度矩阵, 在最小值与最大值之间以1. 36 为步长, 产生矩阵;(3) 调用MA TLAB 中的三次样条插值函数,产生插值结果矩阵, 以对每一种参数的插值结果为行产生矩阵, 再转置.MA TLAB 程序设计:x 0= [470∶1. 36∶504 ];ou t= [x 0; sp line (x (1∶6) , x (7∶12) , x 0) ; sp line (x (1∶6) , x (13∶18) , x 0) ; sp line (x (1∶6) , x (19∶24) , x 0)sp line (x (1∶6) , x (25∶30) , x 0) ; sp line (x (1∶6) , x (31∶36) , x 0) ; sp line (x (1∶6) , x (37∶42) , x 0) ]′运算数据分析:(1) 这组运算数据一致通过已知节点, 而且偏差较小、数学处理和程序设计都大大简化(与文献[1 ]相比).(2) 经过以上的运算, 可以使原来仅有的6 组数据变为26 组, 而且还可以根据工程人员的需要对上述程序步长进行修改, 就可任意提高精度, 从而使工程人员能够更好地了解各种参数在各点的数据, 使工程精度大大提高5 插值曲线拟合当然, 无论以多么小的数为步长、无论给出多少组数据, 这些参数还是一些离散的数据, 在有些情况下, 工程人员要了解某些数据随某一主要参数的变化而变化的连续曲线, 这时, 可以在数据插值的基础上, 发挥MA TLAB 在图形处理上的强大功能, 对以上插值所得的数据进行曲线拟合, 以便更好地了解各参数随某一主要参数变化而变化的趋势.在以上插值数据的基础上,在上面程序的尾部编写MA TLAB 作图程序, 作图程序如下, 运行后得到图1 所示插值拟合曲线.p lo t (x 0, ou t (27∶52) ,‘- ’)ho ld onp lo t (x 0, ou t (53∶78) ,‘- + ’)p lo t (x 0, ou t (79∶104) ,‘∶’)p lo t (x 0, ou t (105∶130) ,‘- - ’)p lo t (x 0, ou t (131∶156) ,‘- 3 ’)p lo t (x 0, ou t (157∶182) ,‘- . ’)legend (‘上游半径’,‘下游半径’,‘拱厚’,‘半中心角’,‘圆心距’,‘淤沙高程’)ho ld offgrid on从图1 中, 可以看到各参数随高程的变化而变化的曲线, 从而更好地去了解各参数的变化规律,实现对工程各参数的整体把握, 这是一般数值处理方法所无法实现的.6 小结以上仅为三次样条插值及其实现方法的一个实例, 本文在插值方法的选择上选取了能够得到平滑曲线的、具有优良数学特征的三次样条插值法;在插值的实现上选取了具有强大计算功能的数学软件MA TLAB, 它能够以较少的编码, 较简单的语句实现这一复杂的计算, 并能得到较合理的结论; 在曲线的拟合上我们在插值的基础上同样选取具有强大图形处理功能的MA TLAB 软件, 从而形成较准确、较平滑、较合实际的曲线. 总之, 以上所提供的方法是三次样条插值和MA TLAB 科学计算语言在工程中应用的一个实例, 它能使计算较简便, 又能很好地满足光滑性要求, 使曲线也不失真.实现了工程数学、计算数学、程序设计的结合与简化.三次样条插值不仅在工程方面, 而且在测绘、勘察、预测等方面都有着十分广泛的应用参考文献:[ 1 ]彭荣利, 靳萍, 欧阳建国. 工程列表函数的数值拟合与应用[J ]. 武汉大学学报(工学版) , 2002, 35 (4) : 42~45.[ 2 ]王瑞华. 水利工程数据插值计算及图形处理[J ]. 农田水利与小水电, 1994 (8) : 15~19.[ 3 ]鞠时光, 郭伟刚. 实用三次样条插值函数[J ]. 小型微型计算机系统, 1992, 13 (9) : 20~23.[ 4 ]谢赤, 钟钻. 插值法在零息收益曲线构造中的实证研究[J ]. 数量经济技术经济研究, 2002 (4) : 31~34.[ 5 ]曾绍标, 韩秀芹. 工程数学基础[M ]. 北京: 科学出版社, 2001.[ 6 ]王沫然. MA TLAB 与科学计算(第2 版) [M ]. 北京: 电子工业出版社, 2003。
matlab三次样条曲线拟合代码
在MATLAB中,你可以使用`polyfit` 和`polyval` 函数来进行三次样条曲线拟合。
以下是一个简单的样例代码:
```matlab
样本数据
x = [1, 2, 3, 4, 5]; x 数据
y = [1, 4, 9, 16, 25]; y 数据
计算差分,得到差分数据
dx = diff(x);
dy = diff(y);
拟合样条曲线,得到系数
p = polyfit(x(1:end-1), y(1:end-1), 3);
计算三次样条曲线
xx = x(1:end-1);
yy = polyval(p, xx);
画图
figure;
plot(x, y, 'o', xx, yy, '-');
legend('原始数据', '三次样条曲线');
xlabel('x');
ylabel('y');
```
在这个例子中,我们首先定义了一组x 和y 数据。
然后,我们计算了差分,得到了连续的x 和y 值。
使用`polyfit` 函数,我们得到了描述三次样条曲线的系数。
使用这些系数和`polyval` 函数,我们可以在任何x 值上计算出对应的y 值。
最后,我们画出了原始数据和三次样条曲线。
注意,这个例子假设你的数据是等间隔的。
如果你的数据不是等间隔的,你可能需要更复杂的方法来计算差分和拟合样条曲线。
三次参数样条曲线
目 录
• 参数样条曲线简介 • 三次参数样条曲线的数学模型 • 三次参数样条曲线的构建过程 • 三次参数样条曲线的应用实例 • 三次参数样条曲线的优缺点分析 • 三次参数样条曲线与其他插值方法的比较
01
CATALOGUE
参数样条曲线简介
定义与特性
定义
三次参数样条曲线是一种数学函 数,通过给定的数据点,使用参 数化方法拟合出一条光滑的曲线 。
与多项式插值的比较
1
多项式插值适用于已知数据点之间存在某种特定 关系的情况,而三次参数样条曲线则不需要事先 知道这种关系。
2
多项式插值在处理高阶数据时可能会遇到计算量 大和稳定性差的问题,而三次参数样条曲线则相 对较稳定。
3
多项式插值在处理非线性数据时可能会产生较大 的误差,而三次参数样条曲线能够更好地适应非 线性数据的处理。
算法实现
可以使用数值计算方法和编程语言来实现三次参数 样条曲线的计算,例如Python、MATLAB等。
优化方法
为了提高计算效率和精度,可以采用一些优 化方法,如共轭梯度法、牛顿法等。
03
CATALOGUE
三次参数样条曲线的构建过程
数据准备
数据收集
01
收集用于拟合曲线的离散数据点,确保数据具有代表性且分布
易于理解和实现
三次参数样条曲线具有直观的几 何意义,易于理解和实现,不需 要复杂的数学背景。
缺点分析
01
对异常值敏感
三次参数样条曲线对异常值比较 敏感,如果数据中存在异常值, 可能会导致拟合结果偏差。
02
对初始程可 能会陷入局部最优解,影响拟合 效果,需要合理设置初始值。
合理。
数据清洗
MATLAB数据拟合多项式及三次样条比较
polyfit命令是多项式拟合,其拟合精度相对来说不是很好,尤其是在样本点稀疏和图像有尖点的地方,可以从以下语句与图形中看出这一点,举例波动性较强的正弦函数绘图。
顺便说一句,三次样条还不是最好的拟合函数,但一般情况下也够了,本例题里只是选择了6个样本点,已经达到了这样的拟合效果。
function fit_tulun%多项式拟合方式x=linspace(0,4*pi,6);y_jingque=sin(x); %决定稀疏样本点数据p_poly=polyfit(x,y_jingque,5);x_poly_fit=linspace(0,4*pi,100);y_poly_fit=polyval(p_poly,x_poly_fit);%三次样条拟合方式sp=csapi(x,y_jingque);%求三次样条函数的导数.s_diff=fnder(sp,1);plot(x_poly_fit,y_poly_fit,'ko',x_poly_fit,y_poly_fit,'b:')%plot(x_poly_fit,y_poly_fit,'b:')hold onfnplt(sp,'r')fnplt(s_diff,'c')x1=linspace(0,4*pi,200);plot(x1,sin(x1),'m','linewidth',1.8)legend('多项式拟合样本点','多项式拟合曲线','三次样条拟合曲线','三次样条导数曲线','正弦曲线精确图形')。
三次样条函数系数的求解
详细描述
在实际应用中,数据的分布和特点可能比较复杂,需要综合考虑数据的特性和实际需求来选择合适的 节点和求解方法。有时候可能需要对参数进行调整和优化,以获得更好的拟合效果和预测精度。
04
三次样条函数系数的求 解结果分析
结果的准确性分析
三次样条函数的应用场景
数据拟合
三次样条函数可以用于拟合一系列离散的数据点,从 而得到一个连续的函数。
数值分析
在数值分析中,三次样条函数可以用于求解微分方程 的近似解。
机器学习
在机器学习中,三次样条函数可以用于插值和拟合数 据,从而进行预测和分类等任务。
02
三次样条函数系数的求 解方法
最小二乘法求解
共轭梯度法求解
共轭梯度法是一种用于求解无约束优化问题的迭代算 法,通过构造一组共轭方向来逼近最优解。
在求解三次样条函数系数时,共轭梯度法利用函数的 梯度和Hessian矩阵信息,构造一组共轭方向,并沿
着这些方向进行搜索以找到最优解。
这种方法在处理大规模优化问题时具有较好的收敛速 度和数值稳定性,但在处理小规模问题时可能不如其
他方法高效。
03
三次样条函数系数的求 解实例
实例一:简单数据集的求解
总结词
简单数据集的求解相对容易,可以通过手动计算或使用简单 的数学软件进行求解。
详细描述
对于简单的数据集,可以通过观察数据点的分布和变化趋势 ,手动选择合适的节点,然后利用三次样条插值的公式计算 系数。也可以使用一些简单的数学软件,如Excel或Python 的NumPy库,进行计算。
最小二乘法是一种常用的数学优化技术,通过 最小化误差的平方和来找到数据的最佳函数匹 配。
三次样条插值和曲线拟合–LonelyNights
三次样条插值和曲线拟合–LonelyNights很多东西不在手上用着就容易忘,尤其是书本知识。
就弄这么个类别,叫作“书到用时方恨少”,来记录这些知识。
曲线拟合是一个“数值计算“中的一个基本内容。
在实际的项目中,使用拟合的目的就是从有限个点得到一条平滑曲线。
曲线本身也是由点构成的,所以如何从有限个点得到曲线上的其它点,就是插值所关注的内容。
插值的方法有很多,把这些个点逐个用直线段连起来也是一种插值。
样条插值是一种工业设计中常用的、得到平滑曲线的一种插值方法,三次样条又是其中用的较为广泛的一种。
Google 三次样条插值可以看得到不少材料,这里就不罗列公式了,直接看看在代码里,我们怎么做。
首先我们需要各个点的坐标,以x,y表示。
const int len =[_points count];float x[len];float y[len];for(int i =0; i < len; i++){CGPoint p =[[_points objectAtIndex:i] CGPointValue];x[i]= p.x;y[i]= p.y;}取变量x,y从算法中可以得知,我们的目标是样条插值函数,这是一个分段函数,x最高次数为三次,在各个点二次连续可导以保证最终函数曲线的光滑性。
我们每两个点求一个三次函数,我们有n个点,那么这里就需要4(n-1)个方程。
目前我们有n个点的坐标,有n-2个连接点,有n个函数两次连续可导,这里有n+n-2+2*(n-2)共4n-6个方程,还差两个条件。
这里一般有三种处理方法,最方便的,也是我们这里使用的是自然三次样条,也就是在首尾两个点上二次导为0。
具体计算不在此列举了,根据算法构建一个方程组求一组中间值sx,左边是一个三对角矩阵。
float h[len];float u[len];float lam[len];for(int i =0; i < len-1; i++){h[i]= x[i+1]- x[i];}u[0]=0;lam[0]=1;for(int i =1; i <(len -1); i++){u[i]= h[i-1]/(h[i]+ h[i-1]);lam[i]= h[i]/(h[i]+ h[i-1]);}float a[len];float b[len];float c[len];float m[len][len];for(int i =0; i < len; i++){for(int j =0; j < len; j++){m[i][j]=0;}if(i ==0){m[i][0]=2;m[i][1]=1;b[0]=2;c[0]=1;}else if(i ==(len -1)) {m[i][len -2]=1;m[i][len -1]=2;a[len-1]=1;b[len-1]=2;}else{m[i][i-1]= lam[i];m[i][i]=2;m[i][i+1]= u[i];a[i]= lam[i];b[i]=2;c[i]= u[i];}}求三对角矩阵,自下而上对角线上的参数是a,b,c当然需要得到方程组右边的值float g[len];g[0]=3*(y[1]- y[0])/h[0];g[len-1]=3*(y[len -1]- y[len -2])/h[len -2];for(int i =1; i < len -1; i++){g[i]=3*((lam[i]*(y[i]-y[i-1])/h[i-1])+u[i]*(y[i+1]-y[i])/h[i]);}下面就是求解这个方程组了,对于三对角矩阵,使用追赶法//< Solve the Equationsfloat p[len];float q[len];p[0]= b[0];for(int i =0; i < len -1; i++){q[i]= c[i]/p[i];}for(int i =1; i < len; i++){p[i]= b[i]- a[i]*q[i-1];}float su[len];float sq[len];float sx[len];su[0]= c[0]/b[0];sq[0]= g[0]/b[0];for(int i =1; i < len -1; i++){su[i]= c[i]/(b[i]- su[i-1]*a[i]);}for(int i =1; i < len; i++){sq[i]=(g[i]- sq[i-1]*a[i])/(b[i]- su[i-1]*a[i]);}sx[len-1]= sq[len-1];for(int i = len -2; i >=0; i--){sx[i]= sq[i]- su[i]*sx[i+1];}求得了参数,现在就得到分段插值函数了。
4.4三次样条插值(共70张PPT)
解 做差商表(P111),由于是等距离(jùlí)节点,
hi xi xi1 0.15 i 1,2,3,4
i
hi hi1 hi
1 2
,
i
hi1 hi1 hi
1 2
第二十六页,共七十页。
由第二类边界条件得
2 1
M0 5.86667
0.5
2
0.5
M
1
5.14260
0.5
x1 6
] f
[
xi
1
,
xi
,
xi
1
]
(i 1,2,..., n 1)
M
n
1
2Mn
6
f [xn1, xn , xn ]
第二十二页,共七十页。
三次(sān cì)样条插值
第二类边界条件 s'' (x0 ) f '' (x0 ) M 0 , s'' (xn ) f '' (xn ) M n 同理可得
yi xi
yi1 xi1
2 (6 Mi
1 6 M i1)(xi
xi1)
(2)
因为s( x)连续,所以(1)(2)即
yi1 yi xi1 xi
(
1 6
M
i 1
2 6
M
i
)( xi 1
xi
)
yi xi
yi1 xi1
(
2 6
M
i
1 6
M
i 1
)( xi
xi1)
记hi xi xi1
i
hi hi1 hi
则法方程为其中xedx1008731273130873127313169030903平方误差为06277452对离散数据的曲线拟合最小二乘法曲线拟合问题对于fx插值问题要想提高精度就要增加节点因此多项式的次数也就太高计算量过大而节点少多项式的次数低但误差精度不能保证为了消除误差干扰取多一些节点利用最小二乘法确定低次多项式近似表示fx这就是曲线拟合问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1设计目的、要求对龙格函数22511)(xx f +=在区间[-1,1]上取10=n 的等距节点,分别作多项式插值、三次样条插值和三次曲线拟合,画出)(x f 及各逼近函数的图形,比较各结果。
2设计原理(1) 多项式插值:利用拉格朗日多项式插值的方法,其主要原理是拉格朗日多项式,即:01,,...,n x x x 表示待插值函数的1n +个节点,()()nn j k k j j k L x y l x y ===∑,其中0,1,...,j n =;011011()...()()...()()()...()...()...()k k n k k k k k k k n x x x x x x x x l x x x x x x x x x -+-+----=----(2) 三次样条插值:三次样条插值有三种方法,在本例中,我们选择第一边界条件下的样条插值,即两端一阶导数已知的插值方法:00'()'S x f = '()'n n S x f =(3)三次曲线拟合:本题中采用最小二乘法的三次多项式拟合。
最小二乘拟合是利用已知的数据得出一条直线或者曲线,使之在坐标系上与已知数据之间的距离的平方和最小。
在本题中,n= 10,故有11个点,以这11个点的x 和y 值为已知数据,进行三次多项式拟合,设该多项式为23432xi i i i p a a x a x ax =+++,该拟合曲线只需2[]xi i p y -∑的值最小即可。
3采用软件、设备计算机、matlab 软件4设计内容1、多项式插值:在区间[]1,1-上取10=n 的等距节点,带入拉格朗日插值多项式中,求出各个节点的插值,并利用matlab 软件建立m 函数,画出其图形。
在matlab 中建立一个lagrange.m 文件,里面代码如下: %lagrange 函数function y=lagrange(x0,y0,x) n=length(x0);m=length(x); for i=1:m z=x(i); s=0.0; for k=1:n p=1.0; for j=1:n if j~=kp=p*(z-x0(j))/(x0(k)-x0(j)); end ends=p*y0(k)+s; end y(i)=s; end建立一个polynomial.m 文件,用于多项式插值的实现,代码如下: %lagrange 插值 x=[-1:0.2:1];y=1./(1+25*x.^2); x0=[-1:0.02:1];y0=lagrange(x,y,x0); y1=1./(1+25*x0.^2); plot(x0,y0,'--r') %插值曲线 hold on %原曲线plot(x0,y1,'-b')运行duoxiangshi.m 文件,得到如下图形:2、三次样条插值:所谓三次样条插值多项式()n S x 是一种分段函数,它在节点i x 011()n n a x x x x b -=<<⋅⋅⋅<<=分成的每个小区间1[,]i i x x -上是3次多项式,其在此区间上的表达式如下:22331111111()[()()]()()666[,]1,2,,.i i i i i i i i i i i i i i ii i h x x h x x S x x x M x x M y M y M h h h x x x i n --------=-+-+-+-∈=⋅⋅⋅,, 因此,只要确定了i M 的值,就确定了整个表达式,i M 的计算方法如下: 令:11111111116()6(,,)i i i i i i i i i i i i i ii i i i i i i h h h h h h y y y y d f x x x h h h h μλμ++++--+++⎧===-⎪++⎪⎨--⎪=-=⎪+⎩,则i M 满足如下1n -个方程:1121,2,,1i i i i i i M M M d i n μλ-+++==⋅⋅⋅-,对于第一种边界条件下有⎪⎪⎩⎪⎪⎨⎧-=+-=+---000110111)'],([62]),['(62h f x x M M h x x f f M M n n n n n n如果令100100016([,]')6('[,])1,,1,,n n n n n n f x x f f f x x d d h h λμ----====那么解就可以为⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛----n n n n n n n d d d d M M M M 110110111102222μλμλμλ求函数的二阶导数: >> syms x>> f=sym(1/(1+25*x^2)) f =1/(1+25*x^2) >> diff(f) ans =-(50*x)/(25*x^2 + 1)^2将函数的两个端点,代入上面的式子中:f’(-1)=0.0740f’(1)=-0.0740求出从-1到1的n=10的等距节点,对应的x,y值对应m文件代码如下:for x=-1:0.2:1y=1/(1+25*x^2)endy =得出x=-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1y=0.0385 0.0588 0.1 0.2 0.5 1 0.5 0.2 0.1 0.0588 0.0385编写m文件Three_Spline.mx=linspace(-1,1,11);y=1./(1+25*x.^2);[m,p]=scyt1(x,y,0.0740,-0.0740);hold onx0=-1:0.01:1;y0=1./(1+25*x0.^2);plot(x0,y0,'--b')得到如下图像:.其中蓝色曲线为原图,红色曲线为拟合后的图像。
3、三次曲线拟合:这里我们使用最小二乘法的3次拟合建立一个Three_fitting .m文件,代码如下:%主要代码x=[-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1];y=[0.0385 0.0588 0.1 0.2 0.5 1 0.5 0.2 0.1 0.0588 0.0385];a=polyfit(x,y,3);x1=[-1:0.01:1];y1=a(4)+a(3)*x1+a(2)*x1.^2+a(1)*x1.^3;x0=[-1:0.01:1];y0=1./(1+25*x0.^2)%原曲线 plot(x0,y0,'-r') hold on %三次拟合曲线 plot(x1,y1,'-b')上图中,蓝色部分为三次拟合曲线,红色部分为原曲线6结果分析拉格朗日插值的优点是对于某一区域,不限于被估计点周围,公式简单易实施。
一般认为n 的次数越高,逼近)(x f 的精度就越好,但在本题中,对龙格函数22511)(xx f +=,中间部分插值效果比较好,而对于两端,插值结果是非常不理想的,即龙格现象。
样条函数可以给出光滑的插值曲线,从本题中就能体现出来。
从以上图形可以看出,三次样条插值的图形是比较逼近于原图的,收敛性相对而言是非常好的,但在本题中,仅将原区间分成10个等距区间,因此,逼近效果还不是特别理想,当我们将n 增大时,插值后的曲线越逼近于原曲线。
总的来说,三次样条插值的稳定性比较好,收敛性比较强。
在这三种方法中,三次曲线拟合的效果是最差的,所得的图形与原曲线差距甚远。
最小二乘法中,并不要求拟合后的曲线经过所有已知的点,只需要拟合多项式上的点在某种标准上与定点之间的差距最小即可,因此与原曲线的逼近程度是最差的。
最小二乘法的多项式拟合只适用于多项式,而本题中的函数并不是一个多项式,因此,不建议使用最小二乘法拟合。
参考文献:[1] 李庆扬王能超等.数值分析[M].清华大学出版社[2] 吴振远.科学计算实验指导书基于MATLAB数值分析[M].中国地质大学出版社[3] 宋叶志.MATLAB数值分析与应用[M]. 机械工业出版社 , 2009.07附录三次样条插值主要代码:function [m,p]=scyt1(x,y,df0,dfn)n=length(x);r=ones(n-1,1);u=ones(n-1,1);d=ones(n,1);r(1)=1;d(1)=6*((y(2)-y(1))/(x(2)-x(1))-df0)/(x(2)-x(1));u(n-1)=1;d(n)=6*(dfn-(y(n)-y(n-1))/(x(n)-x(n-1)))/(x(n)-x(n-1));for k=2:n-1u(k-1)=(x(k)-x(k-1))/(x(k+1)-x(k-1)); r(k)=(x(k+1)-x(k))/(x(k+1)-x(k-1));d(k)=6*((y(k+1)-y(k))/(x(k+1)-x(k))-(y(k)-y(k-1))/(x(k)-x(k-1)))/(x(k+1)-x(k-1));endA=eye(n,n)*2;for k=1:n-1A(k,k+1)=r(k);A(k+1,k)=u(k);endm=A\d;ft=d(1);syms tfor k=1:n-1 %求s(x)即插值多项式p(k,1)=m(k)/(6*(x(k+1)-x(k)));p(k,2)=m(k+1)/(6*(x(k+1)-x(k)));p(k,3)=(y(k)-m(k)*(x(k+1)-x(k))^2/6)/(x(k+1)-x(k));p(k,4)=(y(k+1)-m(k+1)*(x(k+1)-x(k))^2/6)/(x(k+1)-x(k));sx(k)=p(k,1)*(x(k+1)-t)^3+p(k,2)*(t-x(k))^3+p(k,3)*(x(k+1)-t)+p(k,4)*(t-x(k)); endkmax=1000;xt=linspace(x(1),x(n),kmax);for i=1:n-1 %出点xt对应的y值for k=1:kmaxif x(i)<=xt(k)&xt(k)<=x(i+1)fx(k)=subs(sx(i),xt(k));endendendplot(xt,fx,'r'); xlabel('x');ylabel('y'); title('f');text(x(fix(n/2)),y(fix(n/2)),'f')hold onplot(x,y,'*')hold off。