[数值算法]Lagrange插值法

博客指出Lagrange插值法通常用于分段插值,插值结点过多会出现龙格现象。还给出了Lagrange插值法的代码实现,包括函数定义和测试代码,通过具体数组和插值点计算结果并输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        Lagrange插值法并不是十分实用的插值法,通常是在分段插值中使用,当插值结点过多时,会出现数据不稳定的龙格现象.

 

#include "Lagrange.h"

#include "myAssert.h"

#include <stdlib.h>

#include <stdio.h>

Type lagrangeInsert(Type *xArr,Type *yArr,Type x,int n)

{

       Type tmpSum=Type_Zero,sum=Type_Zero;

       int i=0,j=0;

       asserts(xArr!=NULL,"xArr passed in is null/n");

       asserts(yArr!=NULL,"yArr passed in is null/n");

       for (i=0;i<n;i++)

       {

              tmpSum=yArr[i];

              for(j=0;j<n;j++)

                     if(j!=i)tmpSum*=(x-xArr[j])/(xArr[i]-xArr[j]);

              sum+=tmpSum;

       }

       return sum;

}

 

/*test*/

#include "Lagrange.h"

#include "stdio.h"

#include "string.h"

void main()

{

       double x1[]={0.4,0.5,0.6,0.7};

       double y1[]={-0.916291,-0.693147,-0.510826,-0.356675};

       double ans;

       clrscr();

       ans=lagrangeInsert(x1,y1,0.54,4);//4表示所插值出的是四次多项式.

       printf("The answer of lagrangeInsert is:%f/n",ans);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值