C代码牛顿插值

本文介绍了牛顿插值法在曲线拟合中的应用,强调了输入数据无误的重要性,并对比了牛顿插值与拉格朗日插值。文章提供了一段C语言代码,分为两个步骤实现牛顿插值:第一步计算差商并存储,第二步根据存储的值计算指定点的坐标。代码适用于已知点个数不超过6的情况,且插值次数不超过已知点个数减一。
摘要由CSDN通过智能技术生成

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;i<num+1;i++)
	{
		ff[0][i]=yy[i];
	}

	//差商 结果在 ff[i][i] 中
	for(j=1;j<=num;j++)
	for(i=j;i<=num;i++)
	{
		ff[j][i]=(ff[j-1][i-1]-ff[j-1][i])/(xx[i-j]-xx[i]);
	}
	
}

//牛顿插值第二分部,返回结果   输入 x轴数据,ff储存数组,x轴查询值,num插值次数
float Newton2(float x[],float f[pointMax][pointMax], float x_aim,unsigned char num)
{
	unsigned char i,j;
	float result,product=1;
    if(pointMax <= num + 1)
        num = pointMax - 1;
	result = f[0][0];
	for(i=1;i<=num;i++)
	{
        product = f[j+1][j+1];
		for(j=0;j<i;j++)
		{
			product = product * (x_aim - x[j]);
		}
		result += product;
	}
	return result;

}

3.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轴坐标
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逐梦之程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值