本帖最后由 duguangqian 于 2014-3-1 17:18 编辑
若拟合后的曲线方程为 Y=a*x^3+b*x^2+c*x+d则其导数为Y’=3*a*x^2+2*b*x+c了 情况一:三次多项式系数a小于零,既它的导函数二次函数开口向下, file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image002.jpg 显然,Ys只有大于零的时候,三次曲线才有极值,二次函数与x轴的交点Xtempj就对应这三次函数极大值(高数中的极值问题的一些结论),也就是三次拟合曲线算法得出的偏移值。怎么用单片机算出来呢?显然直接利用求根公式会耗费单片机资源,那么就采用一种比较和查询的方法求取近似值了。情况①是Xmax小于Xs,那么直接从Xs开始向右代值比较(就是将Xi递增0.1向右求出Yi的值),一旦Yi的值小于零,立即停止递增,此时Xtemp就近似等于Xi了。 同理,情况②是Xmax大于Xs,那么就从Xmax开始搜寻咯。但若Ymax大于零,就向右搜寻,若Ymax小于零,就像左搜寻。 情况二:对于三次多项式系数a大于零的分析,也是和上面的方法一样了。 当磁导线在最左传感器之左或最右传感器之右的时候,三次多项式是单调的,因而没有极大值,也就是二次函数没有根了。 所以此算法在直到上是很管用的,但一旦偏离远了,就必须过渡到其他算法或者是重新拟合一条曲线了 |