1、牛顿插值的作用
牛顿插值是用于拟合曲线--在有限个点的条件下,拟合出一条平滑的曲线
这里有个前提条件-输入的点必须无错误,也就是说牛顿插值并不能解决误差的问题
插值有两个,一个叫拉格朗日插值,一个是牛顿插值,牛顿插值优胜于拉格朗日插值法
2、一些事项
2.1、笔者认为,牛顿插值可以分成两:1、磋商,2、计算某个点对应的坐标值;考虑到提升CPU的性能,所以应当先进行磋商,把磋商后的结果储存起来,然后计算点时就用磋商值直接计算
2.2、注意:插值次数不能大于等于已知点的个数,但是与所查数列长度有关,因此最佳值应是已知点个数减一。
3、话不多说-代码:
3.1、算法函数
#define pointMax 6 //已知点的个数 //牛顿插值第一步计算-差商 输入 x轴数据,y轴数据,ff储存数组,num插值次数 void Newton1(float xx[],float yy[],float ff[pointMax][pointMax],int num) { unsigned char i,j; if(pointMax <= num + 1) num = pointMax - 1; for(i=0;i3.2、调用算法函数计算
void main(void) { float x_aim;//任意x轴上的坐标点 float y_aim;//x轴上某点对应的Y轴的坐标点 - 计算结果 float x[pointMax] = {1,2,3,4,5,6};//已知x轴的坐标点-最好递增,不要有相等值 float y[pointMax] = {1,2,3,4,5,6};//已知y轴点,与上一行x轴要对应 float f[pointMax][pointMax];//储存磋商的值 其有效值在主对角线上 //如:一节磋商值 f[1][1] ,二姐磋商值 f[2][2] 等 Newton1(x,y,f,(pointMax-1));//磋商结果计算 while(1) { x_aim = 4.25;//输入要计算的x轴坐标值 y_aim = Newton2(x,f,x_aim,(pointMax-1));//计算:x_aim对应下的Y轴坐标 } }欢迎分享,转载请注明来源:内存溢出
评论列表(0条)