資源描述:
《bspline-三次樣條(bspline - 三次樣條)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、bspline-三次樣條(bspline-三次樣條)//bspline插值/*三次b-spline好用,可根據(jù)您自己的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]);//輸出關(guān)閉文件(FP);}/*======================================================//函數(shù)名:SPL//功能描述:光滑插值//輸入?yún)?shù):X指向存放N個結(jié)點的數(shù)據(jù)的數(shù)組的指針//Y指向存放N個結(jié)點的函數(shù)值的數(shù)組的指針//N結(jié)點個數(shù)//T指定的插值點,EPS絕對值小于此值的數(shù)據(jù)認為是0//返回值:在指定插值點的函數(shù)近似值=========================================================*///#包括“stdio.h”//#包括“數(shù)學。”/雙聲壓級(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)/*沒有提供結(jié)點,返回0.0*/return(0.0).if(n==1)/*只有一個結(jié)點,返回此函數(shù)值*/return(y[0]);if(n==1)/*只有兩個結(jié)點,使用線性插值*/{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