[计算机数值分析]拉格朗日插值公式

Posted Spring-_-Bear

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[计算机数值分析]拉格朗日插值公式相关的知识,希望对你有一定的参考价值。

问题描述

实际问题中碰到的函数 f(x) 是各种各样的,有的表达式很复杂,有的甚至给不出数学式子,只提供了一些离散数据,譬如某些点上的函数值和导数值。由于问题的复杂性,直接研究函数 f(x) 可能很困难。面对这种情况,一个很自然的想法是,设法将所考察的函数 f(x) “简单化”,就是说,构造某个简单的函数 p(x) 作为 f(x) 的近似函数,然后通过处理 p(x) 获得关于 f(x) 的结果。如果要求近似函数 p(x) 取给定的离散数据,则称之为 f(x) 的插值函数。

例:已知根号 100 等于 10,根号 121 等于 11,根号 144 等于 12,试用拉格朗日插值公式求解根号 115 的值。

运行示例

源码

#include<iostream>
using namespace std;

#define MAX 10

typedef struct Point  //插值节点信息结构体

	double x;
	double y;
point;

int main(void)

	int n;   //插值节点个数
	double x, item, sum;   //item为每一项插值基函数与其对应函数值的乘积

	point p[MAX];   //定义结构体数组

	sum = 0;

	cout << "请输入插值节点的个数:";
	cin >> n;

	for (int i = 1; i <= n; i++)   //将节点信息存入结构体数组
	
		cout << "请输入第" << i << "个点的坐标:";
		cin >> p[i].x;
		cin >> p[i].y;
	

	cout << "请输入x的值:";   //输入x提示
	cin >> x;

	for (int i = 1; i <= n; i++)    //外层循环实现对item的累加
	
		double denominator = 1;   //分母赋初值为1
		double numerator = 1;   //分子赋初值为1

		for (int j = 1; j <= n; j++)    //内层循环实现拉格朗日基函数各分子、分母部分的求解
		
			if (i == j)
			
				continue;
			
			 denominator *= p[i].x - p[j].x;   //基函数分母
			 numerator *= x - p[j].x;   //基函数分子
		

		item = numerator / denominator * p[i].y;   //求解拉格朗日插值法的每一项
		sum += item;   //累加求和
	

	cout << "运用拉格朗日基函数插值法求得f(x) ≈ p(x) = " << sum << endl;

	return 0;

以上是关于[计算机数值分析]拉格朗日插值公式的主要内容,如果未能解决你的问题,请参考以下文章

拉格朗日插值公式

拉格朗日插值公式

《数值分析》-- 拉格朗日插值

[数值计算-14]:拉格朗日插值与Python代码实现

拉格朗日(Lagrange)插值算法

数值分析Python实现系列—— 拉格朗日插值法