头文件
#ifndef _SPLINE_H
#define _SPLINE_H
#if _MSC_VER > 1000
#pragma once
#endif
#pragma warning (disable:4290)
namespace SplineSpace
{
class SplineFailure
{
private:
const char* Message;
public:
SplineFailure(const char* msg);
const char* GetMessage();
};
class SplineInterface
{
public:
virtual bool SinglePointInterp(const double& x,double& y)=0;
virtual bool MultiPointInterp(const double* x,const int& num,double* y)=0;
virtual bool AutoInterp(const int& num,double* x,double* y)=0;
virtual ~SplineInterface(){
};
};
enum BoundaryCondition
{
GivenFirstOrder=1
,GivenSecondOrder
};
class Spline:public SplineInterface
{
public:
Spline(const double* x0,const double* y0,const int& num,
BoundaryCondition bc=GivenSecondOrder,const double& leftBoundary=0,const double& rightBoundary=0);
bool SinglePointInterp(const double& x,double& y)throw(SplineFailure);
bool MultiPointInterp(const double* x,const int& num,double* y)throw(SplineFailure);
bool AutoInterp(const int& num,double* x,double* y)throw(SplineFailure);
~Spline();
private:
void PartialDerivative1(void);
void PartialDerivative2(void);
const double* GivenX;
const double* GivenY;
const int GivenNum;
const BoundaryCondition Bc;
const double LeftB;
const double RightB;
double* PartialDerivative;
double MaxX;
double MinX;
const double* SplineX;
double* SplineY;
const int* SplineNum;
};
}
#endif
源文件
#include "pch.h"
#include "Spline.h"
#include <cstring>
#include <algorithm>
using namespace std;