欢迎来到天天文库
浏览记录
ID:16172893
大小:19.23 KB
页数:12页
时间:2018-08-08
《bspline-三次样条(bspline - 三次样条)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、bspline-三次样条(bspline-三次样条)//bspline插值/*三次b-spline好用,可根据您自己的x与y进行任意插值.插值与matlab差距很小,保证用一次您就会喜欢!绝对,吐血推荐!*/#includemath.h><#includestdio.h><#includeconio.h><#definepi3.1415926#definetotal_length50#defineoriginal_length20intn=4;inta=1;intinter_points=3;inttotal_number=(n/step1)*(inter_points+1)
2、+1;///**/**/**/doublespl(double*x,double*y,intn,doublet,doubleeps);floatspline_interpolation(intn,floatx,floaty,[]);voidmain(){file*fp;double*x*y*output;x=newdouble[13];y=newdouble[13];output=newdouble[13];inti,j,n;doubleeps,t;epc=0.000001;printf("inputthenumberofdots:");//eg.0123weshouldin
3、put:4scanf("%d",&n);for(i=0;i4、J]);//输出关闭文件(FP);}/*======================================================//函数名:SPL//功能描述:光滑插值//输入参数:X指向存放N个结点的数据的数组的指针//Y指向存放N个结点的函数值的数组的指针//N结点个数//T指定的插值点,EPS绝对值小于此值的数据认为是0//返回值:在指定插值点的函数近似值=========================================================*///#包括“stdio.h”//#包括“数学。”/双声压级(x,y,n,t,EP5、S)/双××,y,t,EPS;n;双声压级(双××,双×Y,intN,双T,双EPS){intk;双Z,d[5],p[4],YY[2];双TMP1和TMP2;if(x==null)6、7、(y==null)检测输入指针是否为空)/**/{printf("pointeriszero");return(0.0).}if(n=1)/*没有提供结点,返回0.0*/return(0.0).if(n==1)/*只有一个结点,返回此函数值*/return(y[0]);if(n==1)/*只有两个结点,使用线性插值*/{z=(y[0]*(t-x[1])-y[1]*(t,x(0)))/(x[08、],x[1]).return(z).}k=0;while((x[k](t)&&(k9、e{d[1]=(y[k]-y{k-1})/(x{k}-x{k-1});D[3]=(y[K+2]-y[K+1]])/(x[K+2]x[K+1]);}If(k<=1)/*求出d0值*/D[0]=2*d[1](d)[2];ElseD[0]=(y[K-1)-Y(k-2)/(x[K-1]x[K-2]);If(k>=(n-3)/*求出d4值*/D[4]=2*d[3](d)[2];ElseD[4]=(y[K+3]-Y(K+2)/(x[K+3]x[K+1]);Tmp1=Fabs(d[3](d)[2];/*求出在第k和k
4、J]);//输出关闭文件(FP);}/*======================================================//函数名:SPL//功能描述:光滑插值//输入参数:X指向存放N个结点的数据的数组的指针//Y指向存放N个结点的函数值的数组的指针//N结点个数//T指定的插值点,EPS绝对值小于此值的数据认为是0//返回值:在指定插值点的函数近似值=========================================================*///#包括“stdio.h”//#包括“数学。”/双声压级(x,y,n,t,EP
5、S)/双××,y,t,EPS;n;双声压级(双××,双×Y,intN,双T,双EPS){intk;双Z,d[5],p[4],YY[2];双TMP1和TMP2;if(x==null)
6、
7、(y==null)检测输入指针是否为空)/**/{printf("pointeriszero");return(0.0).}if(n=1)/*没有提供结点,返回0.0*/return(0.0).if(n==1)/*只有一个结点,返回此函数值*/return(y[0]);if(n==1)/*只有两个结点,使用线性插值*/{z=(y[0]*(t-x[1])-y[1]*(t,x(0)))/(x[0
8、],x[1]).return(z).}k=0;while((x[k](t)&&(k9、e{d[1]=(y[k]-y{k-1})/(x{k}-x{k-1});D[3]=(y[K+2]-y[K+1]])/(x[K+2]x[K+1]);}If(k<=1)/*求出d0值*/D[0]=2*d[1](d)[2];ElseD[0]=(y[K-1)-Y(k-2)/(x[K-1]x[K-2]);If(k>=(n-3)/*求出d4值*/D[4]=2*d[3](d)[2];ElseD[4]=(y[K+3]-Y(K+2)/(x[K+3]x[K+1]);Tmp1=Fabs(d[3](d)[2];/*求出在第k和k
9、e{d[1]=(y[k]-y{k-1})/(x{k}-x{k-1});D[3]=(y[K+2]-y[K+1]])/(x[K+2]x[K+1]);}If(k<=1)/*求出d0值*/D[0]=2*d[1](d)[2];ElseD[0]=(y[K-1)-Y(k-2)/(x[K-1]x[K-2]);If(k>=(n-3)/*求出d4值*/D[4]=2*d[3](d)[2];ElseD[4]=(y[K+3]-Y(K+2)/(x[K+3]x[K+1]);Tmp1=Fabs(d[3](d)[2];/*求出在第k和k
此文档下载收益归作者所有