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