源代码:拉格朗日插值原型函数

拉格朗日插值代码示例

大家好,这是我的第一篇博客。
我最近有一个在GitHub上建立一个开源C++函数库的计划,写这篇博文也算是给自己做了一个推广。感兴趣的朋友可以点击关注我,也可以到GitHub上持续关注我最近更新的代码。
在这里放一下我的GitHub链接:我的GitHub链接https://github.com/TYduoduo
核心函数代码如下,详细的代码我在GitHub上开源了。(https://github.com/TYduoduo/Algorithmic-Collection-Cpp/blob/master/拉格朗日插值原型函数)
函数功能:
为给定结点的函数值,用拉格朗日法进行插值。
在给定的n个节点中自动选择8个结点进行插值,且使指定的插值点t位于它们的中间。

本文参考了清华大学出版社的《常用函数算法集(C++描述)》

double lagrange(double x[], double y[], int n, double t)
{
int i, j, k, m;
double z, s;
z = 0.0;
if (n < 1) return(z);
if (n == 1) {
 z = y[0];
 return(z);
}
if (n == 2)
{
 z = (y[0] * (t - x[1] - y[1] * (t - x[0])) / (x[0] - x[1]));
 return(z);
}
i = 0;
while ((x[i] < t) && (i < n)) i++;    //寻找插值点t的位置
k = i - 4;					//取插值区间左端点
if (k < 0) k = 0;
m = i + 3;					//取插值区间右端点
if (m > n - 1) m = n - 1;
for (i = k; i < m; i++)
{
 s = 1.0;
 for (j = k; j <= m; j++)
  if (j != i) s = s * (t - x[j]) / (x[i] - x[j]);
 z = z + s * y[i];
}
return(z);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值