已知iPeakarrayY[xlabel]和iPeakarrayX[xlabel],是下位机实时发送计算出来的数,现在想进行三次样条插值重绘图形,以下代码是参考网上三次样条插值做的,但是计算不出来,能帮我看看为什么吗?我找不到原因
iPeakarrayY[xlabel] = rawmax;//得到波峰值
iPeakarrayX[xlabel] = ipeakpp;//得到波峰横坐标
RW = rawmax;

/*chafenvalue = iPeakarrayY[xlabel];//返回波峰值*/
//以下为三次样条插值所加
if(xlabel>=2)
{
chafenx[xlabel-1]=iPeakarrayX[xlabel]-iPeakarrayX[xlabel-1];//横坐标
chafenxpp[xlabel-1]=iPeakarrayY[xlabel]-iPeakarrayY[xlabel-1];//纵坐标

//计算x的步长
for(i=1;i<149;i++)
{
h[i]=chafenx[i]-chafenx[i-1];
}
//指定系数,上三角矩阵系数
for(i=1;i<147;i++)
{
A[i]=h[i-1];
B[i] =2 * (h[i] + h[i-1]);//B[i] = 2 * (h[i] + h[i+1]);
                            C[i] = h[i]; //忽略C(n-1) C[i] = h[i+1];
}
//指定常数D
                        for (i = 1; i<147; i++)
                        {
                          D[i] = 6 * ((chafenxpp[ i ] - chafenxpp[ i-1]) /( h[i -1]+1) - (chafenxpp[i -1] - chafenxpp[ i-2]) / (h[i-2]+1));
                        }
D[0]=0;
D[300]=0;
//解方程
//上三角矩阵
C[0] = C[0] / 2;
D[0] = D[0] / 2; for(i = 1; i<149; i++)
{
xcf = (B[i] - A[i] * C[i-1]);
C[i] = C[i] / (xcf+1);
D[i] = (D[i] - A[i] * D[i-1]) /(xcf+1);
} //直接求出X的最后一个值
X[149] = D[149]; //逆向迭代, 求出X
for(i = 148; i>=0; i--)
{
X[i] = D[i] - C[i] * X[i-1];
}
//自然边界
M[0]=0;
M[149]=0;
for(i=1;i<149;i++)
{
M[i]=X[i-1];
}
//算三次样条曲线的系数
for( i = 0; i < 149; i++)
{
ai[i] = chafenxpp[i];
bi[i] = (chafenxpp[ i ] - chafenxpp[i-1]) / (h[i-1]+1) - (2 * h[i-1] * M[i] + h[i-1] * M[i - 1]) / 6;
ci[i] = M[i] / 2;
di[i] = (M[i ] - M[i-1]) / (6 * h[i]+1);
}
for(i=0;i<150;i++)
{
SRwave[i] = ai[i]+bi[i]*(xlabel-chafenx[i])+ci[i]*(xlabel-chafenx[i])*(xlabel-chafenx[i])+di[i]*(xlabel-chafenx[i])*(xlabel-chafenx[i])*(xlabel-chafenx[i]); }
}