📄 fixsupcurve.cpp
字号:
#include "fixsupCurve.h"
fixsupCurve::fixsupCurve(void)
{
}
fixsupCurve::fixsupCurve(int n,double temX[],double temY[],double dfxo,double dfxn)
{
setPoint(n,temX,temY,dfxo,dfxn);
CalPara();
}
bool fixsupCurve::setPoint(int n,double temX[],double temY[],double dfxo,double dfxn)
{
if(n>1000||n<1)return false;
num=n;
FPO=dfxo;
FPN=dfxn;
for(int i=0;i<=n;i++)
{
x[i]=temX[i];
f[i]=temY[i];
}
return true;
}
void fixsupCurve::CalPara()
{
int i;
double h[1000],arfa[1000],l[1000],mu[1000],zed[1000];
for(i=0;i<num;i++)
{
a[i]=f[i];
h[i]=x[i+1]-x[i];
}
a[num]=f[num];
arfa[0]=3*(a[1]-a[0])/h[0]-3*FPO;
arfa[num]=3*FPN-3*(a[num]-a[num-1])/h[num-1];
for(i=1;i<num;i++)
{
arfa[i]=3*(a[i+1]-a[i])/h[i]-3*(a[i]-a[i-1])/h[i-1];
}
l[0]=2*h[0];
mu[0]=0.5;
zed[0]=arfa[0]/l[0];
for(i=1;i<num;i++)
{
l[i]=2*(x[i+1]-x[i-1])-h[i-1]*mu[i-1];
mu[i]=h[i]/l[i];
zed[i]=(arfa[i]-h[i-1]*zed[i-1])/l[i];
}
l[num]=h[num-1]*(2-mu[num-1]);
zed[num]=(arfa[num]-h[num-1]*zed[num-1])/l[num];
c[num]=zed[num];
for(i=num-1;i>=0;i--)
{
c[i]=zed[i]-mu[i]*c[i+1];
b[i]=(a[i+1]-a[i])/h[i]-h[i]*(c[i+1]+2*c[i])/3;
d[i]=(c[i+1]-c[i])/(3*h[i]);
}
}
double * fixsupCurve::getpara_A()
{
return a;
}
double * fixsupCurve::getpara_B()
{
return b;
}
double * fixsupCurve::getpara_C()
{
return c;
}
double * fixsupCurve::getpara_D()
{
return d;
}
double **fixsupCurve::getParaMatrix()
{
int i=0;
for(i=0;i<4;i++)
{
ParaMatrix[i]=new double[num];
}
for(i=0;i<num;i++)
{
ParaMatrix[0][i]=a[i];
ParaMatrix[1][i]=b[i];
ParaMatrix[2][i]=c[i];
ParaMatrix[3][i]=d[i];
}
return ParaMatrix;
}
fixsupCurve::~fixsupCurve(void)
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -