三次参数样条曲线拟合,主要是为解决三次样条函数不能解决的问题而提出的。三次样条函数要求x满足单调递增,即x序列满足x0x) khi=k;
else klo=k;
}
hh=abs(xa[khi]-xa[klo]);
aa=(xa[khi]-x)/hh;
bb=(x-xa[klo])/hh;
y=aa*ya[klo]+bb*ya[khi]+((aa*aa*aa-aa)*m[klo]+(bb*bb*bb-bb)*m[khi])*hh*hh/6.0;
}
//===========================================================================
// 函数功能: 对一系列点求二阶偏导数,点横坐标单调递增(I型边界)(结合Spline)
// 输入参数: *xa 为横坐标值,ya为纵坐标值,n为点个数,m为二阶偏导数(输出值)
// bound1、bound2为边界点一阶偏导数
// 返回值: 无返回值
//
// 作者: 蒋锦朋 [email protected]
// 单位: 中国地质大学(武汉) 地球物理与空间信息学院
// 日期: 2014/12/03
//===========================================================================
void CSpline::Spline1(double *xa,double *ya,int n,double *&m,double bound1,double bound2)
{
// 追赶法解方程求二阶偏导数
double f1=bound1,f2=bound2;
double *a=new double[n]; // a:稀疏矩阵最下边一串数
double *b=new double[n]; // b:稀疏矩阵最中间一串数
double *c=new double[n]; // c:稀疏矩阵最上边一串数
double *d=new double[n];
double *f=new double[n];
double *bt=new double[n];
double *gm=new double[n];
double *h=new double[n];
m=new double[n];
for(int i=0;i |