📄 新建 文本文档.txt
字号:
bool chebyshev_interp_C(long iNPoints, long iNRank, double dTimeObs[60], double AObs[60],
double dTStart, double dTEnd, double Coff[MODELCLASS + 1])
{
long M, N, i, j, k;
double t[60], A[60], dt;
double B[60][5], BTB[5][5], F[5], Q[5], W, G, tao; //T矩阵 BTB BTA切比雪夫多项式及其系数矩阵
M = iNPoints; //点数
N = iNRank + 1; //阶数
for (i=0; i<M; i++)
{
t[i] = dTimeObs[i];
A[i] = AObs[i];
}
dt=dTEnd - dTStart;
for (i=0; i<M; i++) //且比雪夫多项式B[M][N]建立
{
tao = 2 * (t[i] - dTStart) / dt - 1;
B[i][0] = 1.;
B[i][1] = tao;
for (j=2; j<N+1; j++)
{
B[i][j] = 2 * tao * B[i][j-1] - B[i][j-2];
}
}
for (i=0; i<N; i++) //求: BTB->n[N][N] ;BTX->F[N]
{
for (j=0; j<=i; j++)
{
BTB[i][j] = 0;
for (k=0; k<M; k++)
{
BTB[i][j] += B[k][i] * B[k][j];
}
BTB[j][i] = BTB[i][j];
}
F[i] = 0;
for (k=0; k<M; k++)
{
F[i] += B[k][i] * A[k];
}
}
//////////////////////////////////最小二乘////////////////////////////////
for (k=0; k<N; k++)
{
M = N - k - 1;
if ((BTB[0][0] > -1.e-7) && (BTB[0][0] < 1.e-7))
{
printf("In chebyshev_interp_C: Matrix Singularity Error !!!\n");
return (false);
}
W = 1. / BTB[0][0];
for (i=1; i<N; i++)
{
G = BTB[i][0];
Q[i] = G * W;
if (i <= M)
{
Q[i] = -Q[i];
}
for (j=1; j<=i; j++)
{
BTB[i-1][j-1] = BTB[i][j] + G * Q[j];
}
}
BTB[N-1][N-1] = W;
for (i=1; i<N; i++)
{
BTB[N-1][i-1] = Q[i];
}
}
for (i=0; i<N-1; i++)
{
for (j=i+1; j<N; j++)
{
BTB[i][j] = BTB[j][i];
}
}
for (i=0; i<N; i++)
{
Q[i] = F[i];
}
for (i=0; i<N; i++)
{
A[i] = 0.;
for (j=0; j<N; j++)
{
A[i] += Q[j] * BTB[i][j];
}
}
for (i=0; i<N; i++)
{
Coff[i] = A[i];
}
return (true);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -