三次样条插值方法在工程实践中的应用.docx
南昌航空大学数学与信息科学学院实验报告南昌航空空大学数学与信信息科学学学院实 验 报 告告课程名称称:计 算 方方 法实验名称称:三次次样条插插值方法法在工程程实践中中的应用用实验类型型: 验验证性综合性性 设计计性实验室名名称:DD504班级学号号: 08806111155学生姓名名: 杨杨朝峰 任课教师师(教师师签名):成绩:实验日期期: 220099-111-133公路平面面曲线的的设计一、实验验目的由实验一一,我们们已经对对插值的的思想和和原理有有了更深深入的理理解。从从中可以以知道,分段低低次插值值虽然解解决了高高次插值值的振荡荡现象和和数值不不稳定现现象,使使得插值值多项式式具有一一致收敛敛性,保保证了插插值函数数整体的的连续性性,但在在函数插插值节点点处不能能很好地地保证光光滑性要要求,这这在某些些要求光光滑性的的工程应应用中是是不能接接受的。如飞机机的机翼翼一般要要求使用用流线形形设计,以减少少空气阻阻力。因因此,在在分段插插值的基基础上,引进了了一种新新的插值值方法,在保证证原方法法的收敛敛性和稳稳定性的的同时,又使得得函数具具有较高高的光滑滑性。通过本实实验的学学习,应应掌握样样条插值值的基本本思想和和原理,熟悉样样条插值值法的程程序编制制,能用用来解决决实际问问题。最最好能绘绘出插值值函数的的曲线,并与实实验一中中的几种种插值法法的图象象进行比比较。二、实验验原理、方法该题是一一个实际际问题。其中关关键的是是,我们们所设计计的公路路必须满满足汽车的安安全和旅旅客舒适适等要求求,而安安全又是是重中之之重,因因此只要要解决这这个问题题,那本本题就解解决了一一大部分分了。实际解题题时,可可能需要要用到三三次样条条插值,这是分分段插值值的一种种,但是是又比简简单的分分段线性性插值和和抛物插插值要复复杂一些些。由于于已进行行过插值值的理论论学习,前面实实验也已已做过分分段插值值方面的的练习,其算法法和编程程应自行行设计。三、实验验题目1问题题提出目前在我我国公路路的平面面曲线设设计中,主要以以直导线线与元曲曲线的组组合以及及直导线线与复曲曲线的组组合为主主,在解解决曲线线的顺适适性(即即光滑性性)方面面,也只只用了缓缓合曲线线来进行行直线与与曲线,曲线与与曲线间间的过渡渡。这种种设计模模式,在在地形和和其他条条件受到到限制的的条件下下,必然然会使设设计标准准降低,设计结结果不能能很好地满满足规范范要求。所以在在当前立立体交叉叉桥的环环道线性性设计中中,以及及一些先先进发达达国家的的公路平平面设计计中,正正在试图图突破以以往设计计模式,寻找和和探讨一一种较理理想的设设计方法法。而在在某些情情况下,样条插插值便是是一种有有效的方方法。下下面是一一个关于于公路平平面曲线线设计的的实际问问题:吉林省辉辉南县到到靖宇县县,地处处长白山山脚下,为山岭岭重丘区区,地形形复杂,冬季多多雪。从从辉南县县到靖宇宇县的二二级公路路中,有有一地形形限制较较严重的的曲线段段,经实实地测得得数据如如下(为为方便起起见,设设以曲线线两端点点的连线线方向为为坐标xx轴方向向,以连连线的法法方向为为坐标yy轴方向向):x50.00 100.00 150.00 200.00 250.00y23.21 43.56 50.00 43.56 23.21且知二级级公路山山岭重丘丘区的曲曲线极限限半径为为R=660m,试寻找找一种方方法,设设计一条条平面曲曲线,使使之既通通过限定定很死的的地形点点,而又又能满足足设计规规范规定定的曲线线要素要要求,并并通过计计算加密密施工控控制点,进行实实地敷设设地面。2解题题要求试寻找一一种方法法,设计计一条平平面曲线线,使之之既通过过限定很很死的地地形点,而又能能满足设设计规范范规定的的曲线要要素要求求,并通通过计算算加密施施工控制制点,进进行实地地敷设平平面曲线线。四、实验验公式及及程序框框图1. 基基本公式式:hi=xxi-xi-1(ii=1,2,n)fxii-1,xi=(f(xi)-f(xi-11)/(xi-xi-1)(i=1,22,n)ui=hhi/(hhi+hi+1)(i=1,22,n-11) vi= hii/ (hhi+hi+1)= 1-ui(i=1,22,n-11)gi=66*(ffxi+1,xxi-fxxi,xi-1) /(hi+hi+1) (ii=1,2,n-1)2.程序序框图:输出Mi以及Si(x)解方程组得到Mi(i=0,1,2,n)按公式计算ui,vi, gi (i=1,2,n-1)按公式计算g0与 gn计算hi与fxi-1,xi (i=1,2,n)输入xi,yi(i=1,2,n)2.源程程序代码码:#inccludde <<stddio.h>#inccludde <<matth.hh>mainn()floaat xx5=550,1100,1500,2000,2250,y5=233.211,433.566,500.000,433.566,233.211; flooat h55,ff5,u5,r55,gg5,b5,t55,MM5; intt i,n=44;for(i=11;i<<=n;i+) hii=xxi-xi-11; /*求求出相邻邻x的差差*/ fii=(yii-yyi-1)/hi; /*求出ffxii,xii+1*/ forr(i=1;ii<n;i+) /*求出uui、ri、gii*/ uii=hhi/(hhi+hi+11); rii=11-ui; gii=66*(ffi+1-fii)/(hi+hii+1); b11=rr1/2; forr(i=2;ii<n-1;ii+) /*求出bbi*/ bii=rri/(22-ui*bii-1); t11=gg1/2; forr(i=2;ii<n;i+) /*求出出tii*/ tii=(gii-uui*ti-11)/(2-uii*bbi-1); M00=00;Mn=0; Mnn-1=tn-11; forr(i=n-22;i>>0;ii-) /*求出MMi*/ MMi=ti-bii*MMi+1; forr(i=0;ii<n;i+) pprinntf("M%d=%fnn",ii,Mi); forr(i=1;ii<=nn;i+) priintff("ss%d(x)=%f(%f-x)3+(%f)*(xx-%ff)33+(%f)*(%ff-x)+(%f)*(x-%f)n"", ii,Mi-11/(6*hhi), xii,MMi/(66*hi),xi-11,(yii-1-Mi-11*hhi*hi/6)/ hi,xii,(yii-MMi*hi*hii/66)/hhi,xi-11);四、实验验过程中中需要记记录的数数据:在程序中中,主要要记录的的数据有有hi,ui,vi,gi以及最最重要的的是在区区间xxi-11, xi的三次次插值函函数的二二阶导数数Mi,最后后输出在在各个小小区间内内的三次次样条插插值函数数即可。五、 实验数据据处理及及结果分分析在程序检检查无误误时,在在winn-TCC上运行行并看结结果,结结果如图图:结果分析析:由计计算机算算出的应应该没有有错,但但是在输输出Si(x)时的形形式不怎怎么规范范,因此此可以把把结果写写成:当x属于于(500.000,1000.000)时时s(x)=-00.00000224(xx-500.00000000)33+0.46442000(1000.00000000-x)+0.99322286(x-550.00000000)当x属于于(1000.000,1150.00)时s(x)=-00.00000224(1150.00000000-x)3-0.00000144(x-1000.00000000)33+0.93222866(1550.00000000-x)+1.00338857(x-1100.00000000)当x属于于(1550.000,2200.00)时s(x)=-00.00000114(2200.00000000-x)3-0.00000244(x-1500.00000000)33+1.03338577(2000.00000000-x)+0.93322886(xx-1550.00000000)当x属于于(2000.000,2250.00)时s(x)=-00.00000224(2250.00000000-x)3+0.00000000(x-2000.00000000)33+0.93222866(2550.00000000-x)+0.46642000(xx-2000.00000000)六、 实验中存存在的问问题及解解决方案案在编程的的过程中中,开始始没有很很好的区区分和利利用三次次样条的的公式,导致实实验一直直是错误误地答案案,与事事实不相相符。而而且在实实验的输输出结果果中无法法用一种种很好的的方式输输出正确确的形式式,最终终只能用用s%dd(x)=%ff(%ff-x)3+(%ff)*(x-%f)3+(%f)*(%f-xx)+(%f)*(x-%f)的的形式输输出结果果。并且且在该实实验程序序中有太太多的循循环,导导致循环环的次数数有时会会搞错,而且又又要合理理的利用用每次循循环的次次数,才才能达到到一个正正确的结结果。七、 心得体会会通过本次次编程,在一定定程度下下进一步步对样条条插值的的思想和和原理有有了更深深入的理理解,也了解了了分段低低次插值值虽然解解决了高高次插值值的振荡荡现象和和数值不不稳定现现象。同时也也通过此此次的综综合性实实验,让让我更加加地清楚楚认识到到利用样样条插值值法,能能用来解解决实际际公路问问题,也也说明计计算方法法在实际际中利用用之广泛泛。既然然与实际际问题有有如此密密切的关关系,在在一定程程度上激激发了我我对计算算方法的的进一步步学习的的兴趣。不论怎怎样,利利用c语语言编程程,对我我来讲确确实有一一定的难难度,使使得在做做同一个个实验时时,我花花费的时时间比别别人更多多。9