您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 三次样条插值方法在工程实践中的应用
南昌航空大学数学与信息科学学院实验报告课程名称:计算方法实验名称:三次样条插值方法在工程实践中的应用实验类型:验证性√综合性□设计性□实验室名称:D504班级学号:08061115学生姓名:杨朝峰任课教师(教师签名):成绩:实验日期:2009-11-13南昌航空大学数学与信息科学学院实验报告1公路平面曲线的设计一、实验目的由实验一,我们已经对插值的思想和原理有了更深入的理解。从中可以知道,分段低次插值虽然解决了高次插值的振荡现象和数值不稳定现象,使得插值多项式具有一致收敛性,保证了插值函数整体的连续性,但在函数插值节点处不能很好地保证光滑性要求,这在某些要求光滑性的工程应用中是不能接受的。如飞机的机翼一般要求使用流线形设计,以减少空气阻力。因此,在分段插值的基础上,引进了一种新的插值方法,在保证原方法的收敛性和稳定性的同时,又使得函数具有较高的光滑性。通过本实验的学习,应掌握样条插值的基本思想和原理,熟悉样条插值法的程序编制,能用来解决实际问题。最好能绘出插值函数的曲线,并与实验一中的几种插值法的图象进行比较。二、实验原理、方法该题是一个实际问题。其中关键的是,我们所设计的公路必须满足汽车的安全和旅客舒适等要求,而安全又是重中之重,因此只要解决这个问题,那本题就解决了一大部分了。实际解题时,可能需要用到三次样条插值,这是分段插值的一种,但是又比简单的分段线性插值和抛物插值要复杂一些。由于已进行过插值的理论学习,前面实验也已做过分段插值方面的练习,其算法和编程应自行设计。三、实验题目1.问题提出目前在我国公路的平面曲线设计中,主要以直导线与元曲线的组合以及直导线与复曲线的组合为主,在解决曲线的顺适性(即光滑性)方面,也只用了缓合曲线来进行直线与曲线,曲线与曲线间的过渡。这种设计模式,在地形和其他条件受到限制的条件下,必然会使设计标准降低,设计结果不能很好地满足规范要求。所以在当前立体交叉桥的环道线性设计中,以及一些先进发达国家的公路平面设计中,正在试图突破以往设计模式,寻找和探讨一种较理想的设计方法。而在某些情况下,样条插值便是一种有效的方法。下面是一个关于公路平面曲线设计的实际问题:南昌航空大学数学与信息科学学院实验报告2吉林省辉南县到靖宇县,地处长白山脚下,为山岭重丘区,地形复杂,冬季多雪。从辉南县到靖宇县的二级公路中,有一地形限制较严重的曲线段,经实地测得数据如下(为方便起见,设以曲线两端点的连线方向为坐标x轴方向,以连线的法方向为坐标y轴方向):且知二级公路山岭重丘区的曲线极限半径为R=60m,试寻找一种方法,设计一条平面曲线,使之既通过限定很死的地形点,而又能满足设计规范规定的曲线要素要求,并通过计算加密施工控制点,进行实地敷设地面。2.解题要求试寻找一种方法,设计一条平面曲线,使之既通过限定很死的地形点,而又能满足设计规范规定的曲线要素要求,并通过计算加密施工控制点,进行实地敷设平面曲线。x50.00100.00150.00200.00250.00y23.2143.5650.0043.5623.21四、实验公式及程序框图1.基本公式:hi=xi-xi-1(i=1,2,…n)f[xi-1,xi]=(f(xi)-f(xi-1))/(xi-xi-1)(i=1,2,…n)ui=hi/(hi+hi+1)(i=1,2,…n-1)vi=hi/(hi+hi+1)=1-ui(i=1,2,…n-1)gi=6*(f[xi+1,xi]-f[xi,xi-1])/(hi+hi+1)(i=1,2,…n-1)2.程序框图:南昌航空大学数学与信息科学学院实验报告32.源程序代码:#includestdio.h#includemath.hmain(){floatx[5]={50,100,150,200,250},y[5]={23.21,43.56,50.00,43.56,23.21};floath[5],f[5],u[5],r[5],g[5],b[5],t[5],M[5];inti,n=4;for(i=1;i=n;i++){h[i]=x[i]-x[i-1];/*求出相邻x的差*/f[i]=(y[i]-y[i-1])/h[i];/*求出f[xi,xi+1]*/}for(i=1;in;i++)/*求出u[i]、r[i]、g[i]*/输出Mi以及Si(x)输入xi,yi(i=1,2,…n)解方程组得到Mi(i=0,1,2,…n)计算hi与f[xi-1,xi](i=1,2,…n)按公式计算g0与gn按公式计算ui,vi,gi(i=1,2,…n-1)南昌航空大学数学与信息科学学院实验报告4{u[i]=h[i]/(h[i]+h[i+1]);r[i]=1-u[i];g[i]=6*(f[i+1]-f[i])/(h[i]+h[i+1]);}b[1]=r[1]/2;for(i=2;in-1;i++)/*求出b[i]*/b[i]=r[i]/(2-u[i]*b[i-1]);t[1]=g[1]/2;for(i=2;in;i++)/*求出t[i]*/t[i]=(g[i]-u[i]*t[i-1])/(2-u[i]*b[i-1]);M[0]=0;M[n]=0;M[n-1]=t[n-1];for(i=n-2;i0;i--)/*求出M[i]*/M[i]=t[i]-b[i]*M[i+1];for(i=0;in;i++)printf(M%d=%f\n,i,M[i]);for(i=1;i=n;i++)printf(s%d(x)=%f(%f-x)^3+(%f)*(x-%f)^3+(%f)*(%f-x)+(%f)*(x-%f)\n,i,M[i-1]/(6*h[i]),x[i],M[i]/(6*h[i]),x[i-1],(y[i-1]-M[i-1]*h[i]*h[i]/6)/h[i],x[i],(y[i]-M[i]*h[i]*h[i]/6)/h[i],x[i-1]);}四、实验过程中需要记录的数据:在程序中,主要记录的数据有hi,ui,vi,gi以及最重要的是在区间[xi-1,xi]的三次插值函数的二阶导数Mi,最后输出在各个小区间内的三次样条插值函数即可。南昌航空大学数学与信息科学学院实验报告5五、实验数据处理及结果分析在程序检查无误时,在win-TC上运行并看结果,结果如图:结果分析:由计算机算出的应该没有错,但是在输出Si(x)时的形式不怎么规范,因此可以把结果写成:当x属于(50.00,100.00)时s(x)=-0.000024(x-50.000000)3+0.464200(100.000000-x)+0.932286(x-50.000000)当x属于(100.00,150.00)时s(x)=-0.000024(150.000000-x)3-0.000014(x-100.000000)3+0.932286(150.000000-x)+1.033857(x-100.000000)当x属于(150.00,200.00)时s(x)=-0.000014(200.000000-x)3-0.000024(x-150.000000)3+1.033857(200.000000-x)+0.932286(x-150.000000)当x属于(200.00,250.00)时s(x)=-0.000024(250.000000-x)3+0.000000(x-200.000000)3+0.932286(250.000000-x)+0.464200(x-200.000000)南昌航空大学数学与信息科学学院实验报告6六、实验中存在的问题及解决方案在编程的过程中,开始没有很好的区分和利用三次样条的公式,导致实验一直是错误地答案,与事实不相符。而且在实验的输出结果中无法用一种很好的方式输出正确的形式,最终只能用s%d(x)=%f(%f-x)^3+(%f)*(x-%f)^3+(%f)*(%f-x)+(%f)*(x-%f)的形式输出结果。并且在该实验程序中有太多的循环,导致循环的次数有时会搞错,而且又要合理的利用每次循环的次数,才能达到一个正确的结果。七、心得体会通过本次编程,在一定程度下进一步对样条插值的思想和原理有了更深入的理解,也了解了分段低次插值虽然解决了高次插值的振荡现象和数值不稳定现象。同时也通过此次的综合性实验,让我更加地清楚认识到利用样条插值法,能用来解决实际公路问题,也说明计算方法在实际中利用之广泛。既然与实际问题有如此密切的关系,在一定程度上激发了我对计算方法的进一步学习的兴趣。不论怎样,利用c语言编程,对我来讲确实有一定的难度,使得在做同一个实验时,我花费的时间比别人更多。南昌航空大学数学与信息科学学院实验报告7
本文标题:三次样条插值方法在工程实践中的应用
链接地址:https://www.777doc.com/doc-167198 .html