首页 > 编程知识 正文

计算机数值分析拉格朗日插值公式是什么,拉格朗日插值在线计算

时间:2023-05-06 06:55:47 阅读:263981 作者:1727

问题描述

实际问题中碰到的函数 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 10typedef 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; //分母赋初值为1double numerator = 1; //分子赋初值为1for (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;}一分快三推荐= 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; //分母赋初值为1double numerator = 1; //分子赋初值为1for (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;}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。