如果程序可以的话必有重谢!!多多加分!
简单的方法是用相邻点的差分代替导数:
float x[200],y[200],z[200];
float dx,dy;
int i;
// 输入 x[200],y[200]
z[0] = 0.0;
for (i=0;i<199;i++){
dx = x[i+1] - x[i];
dy = y[i+1] - y[i];
if (dx == 0.0) { printf("I can not deal with dx==0.0\n"); exit(1);};
z[i] = dy / dx;
}
z[199] = z[198];
// 输出 z[];
复杂一点:
拟合离散点。如果是时间序列,考虑顺序,如果是非时序不考虑顺序。得拟合曲线。再计算拟合曲线的导数。
float x[200],y[200],z[200];
float dx,dy;
int i;
// 输入 x[200],y[200]
z[0] = 0.0;
for (i=0;i<199;i++){
dx = x[i+1] - x[i];
dy = y[i+1] - y[i];
if (dx == 0.0) { printf("I can not deal with dx==0.0\n"); exit(1);};
z[i] = dy / dx;
}
z[199] = z[198];
// 输出 z[];
复杂一点:
拟合离散点。如果是时间序列,考虑顺序,如果是非时序不考虑顺序。得拟合曲线。再计算拟合曲线的导数。
温馨提示:答案为网友推荐,仅供参考