概念

设f(x)在N+1个点(x0,y0)…(xn,yn)处的值已知,其中值xk在区间【a,b】上,xk互不相同,满足a≤x0<x1<…<xn≤b,yk=f(xk)。求任一插值点x对应的y
插值法的思路在于通过构造一个N次多项式P(x),使其通过N+1个点,然后求x处的函数值y

拉格朗日逼近



例题

【问题描述】考虑[0.0,1.2]内的函数y=f(x)=cos(x)。利用多个(2,3,4等)节点构造拉格朗日插值多项式。
【输入形式】在屏幕上依次输入在区间[0.0,1.2]内的一个值x*,构造插值多项式后求其P(x*)值,和多个节点的x坐标。
【输出形式】输出插值多项式系数矩阵,拉格朗日系数多项式矩阵和P(x*)值(保留6位有效数字)。
【样例1输入】
0.3
0 0.6 1.2
【样例1输出】
-0.400435
-0.0508461
1
1.38889 -2.5 1
-2.77778 3.33333 -0
1.38889 -0.833333 0
0.948707
【样例1说明】输入:x为0.3,3个节点的x坐标分别为x0=0,x1=0.6和x2=1.2。
输出:插值多项式系数矩阵,则插值多项式P2(x)表示为-0.400435x**2-0.0508461x+1;
拉格朗日系数多项式矩阵,则P2(x)表示为:y0
(1.38889x2-2.5x+1)+y1*(-2.77778x2+3.33333x-0)+y2*(1.38889x**2-0.83333x+0);
当x*为0.3时,P2(0.3)值为0.948707。
【评分标准】根据输入得到的输出准确

ACcode:

c++ code(后面有python代码)

#include <bits/stdc++.h>
#define pr printf
#define sc scanf
#define for0(i, n) for (i = 0; i < n; i++)
#define for1n(i, n) for (i = 1; i <= n; i++)
#define forab(i, a, b) for (i = a; i <= b; i++)
#define forba(i, a, b) for (i = b; i >= a; i--)
#define pb push_back
#define eb emplace_back
#define fi first
#define se second
#define int long long
#define pii pair<int, int>
#define pdd pair<double, double>
#define vd vector<double>
#define vdd vector<vector<double>>
#define vi vector<int>
#define vii vector<vector<int>>
#define vt3 vector<tuple<int, int, int>>
#define mem(ara, n) memset(ara, n, sizeof(ara))
#define memb(ara) memset(ara, false, sizeof(ara))
#define all(x) (x).begin(), (x).end()
#define sq(x) ((x) * (x))
#define sz(x) x.size()
const int N = 2e5 + 100;
const int mod = 1e9 + 7;
namespace often
{inline void input(int &res){char c = getchar();res = 0;int f = 1;while (!isdigit(c)){f ^= c == '-';c = getchar();}while (isdigit(c)){res = (res << 3) + (res << 1) + (c ^ 48);c = getchar();}res = f ? res : -res;}inline int qpow(int a, int b){int ans = 1, base = a;while (b){if (b & 1)ans = (ans * base % mod + mod) % mod;base = (base * base % mod + mod) % mod;b >>= 1;}return ans;}int fact(int n){int res = 1;for (int i = 1; i <= n; i++)res = res * 1ll * i % mod;return res;}int C(int n, int k){return fact(n) * 1ll * qpow(fact(k), mod - 2) % mod * 1ll * qpow(fact(n - k), mod - 2) % mod;}int exgcd(int a, int b, int &x, int &y){if (b == 0){x = 1, y = 0;return a;}int res = exgcd(b, a % b, x, y);int t = y;y = x - (a / b) * y;x = t;return res;}int invmod(int a, int mod){int x, y;exgcd(a, mod, x, y);x %= mod;if (x < 0)x += mod;return x;}
}
using namespace often;
using namespace std;vd operator*(vd const &y, vdd const &l)
{int m = sz(y);vd c(m);for (int ii = 0; ii < m; ii++)for (int jj = 0; jj < m; jj++)c[ii] += y[jj] * l[jj][ii];return c;
}signed main()
{int __ = 1;//input(__);auto polymul = [&](vd &v, double const &d, double const &err) {int m = sz(v);vd _ = v;_.emplace_back(0);for (int g = 0; g < m; g++)_[g + 1] += v[g] * d, _[g] /= err;_[m] /= err;v = _;};auto polyval = [&](vd const &c, double const &_x) -> double {double res = 0.0;int m = sz(c);for (int ii = 0; ii < m; ii++)res += c[ii] * pow(_x, (double)(m - ii - 1));return res;};while (__--){double _x;cin >> _x;vd x, y;double X, Y;while (cin >> X)Y = cos(X), x.emplace_back(X), y.emplace_back(Y);int n = sz(x);int i, j, k;vdd l(n, vd(n));for0(k, n){vd v(1, 1);for0(j, n){if (j != k){double d = -x[j];double err = x[k] - x[j];polymul(v, d, err);}}l[k] = v;}vd c = y*l;for0(i, n)pr("%g\n", c[i]);for0(i, n){for0(j, n)pr("%g ", l[i][j]);puts("");}pr("%g\n", polyval(c, _x));}return 0;
}

python --code

'''
Author: csc
Date: 2021-04-24 10:52:25
LastEditTime: 2021-04-24 14:06:57
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \code_py\lagrange.py
'''
import numpy as npdef lagrange(_x, n, x, y):l = np.zeros([n, n], dtype=np.double)for k in range(n):v = 1for j in range(n):if j != k:v = np.polymul(v, np.poly1d([1, -x[j]]))/(x[k]-x[j])l[k, :] = vc = y@lfor i in range(n):print('%g' % c[i])for i in range(n):for j in range(n):print('%g' % l[i][j], end=' ')print()_y = np.polyval(c, _x)print('%g' % _y, end=' ')def main():_x = float(input())x = np.array(list(map(float, input().split())))n = len(x)y = np.cos(x)lagrange(_x, n, x, y)if __name__ == '__main__':main()

【计算方法】拉格朗日插值法相关推荐

  1. 数值计算方法-拉格朗日插值法

    要求: 编写拉格朗日插值函数,输入为(x,f,order1) 其中x代表节点数据,为n*2矩阵 f代表是否分段 oreder1:若分段,oreder1代表函数阶次,只能为1或者2 若不分段,则函数阶次 ...

  2. 拉格朗日插值的优缺点_拉格朗日插值法与牛顿插值法的比较

    第 1 页 共 7 页 拉格朗日插值法与牛顿插值法的比较 [ 摘 要 ] 在生产和科研中出现的函数是多样的.对于一些函数很难找出其解析表达式.即使在某些情况下,可以写出函 数的解析表达式,但由于解析表 ...

  3. 拉格朗日插值的优缺点_拉格朗日插值的优缺点_拉格朗日插值法与牛顿插值法的比较...

    第 1 页 共 7 页 拉格朗日插值法与牛顿插值法的比较 [ 摘 要 ] 在生产和科研中出现的函数是多样的.对于一些函数很难找出其解析表达式.即使在某些情况下,可以写出函 数的解析表达式,但由于解析表 ...

  4. Python实现拉格朗日插值法

    已知sinx的一组x,y对应关系,用拉格朗日插值法估计sin(0.3367)的值. x x0.32 0.34 0.36 y 0.314567 0.333487 0.352274 / / class I ...

  5. 拉格朗日插值法(Lagrange插值法)

    插值介绍: 在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点. 插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值. 这是百度百 ...

  6. 2021-01-07 matlab数值分析  插值法 拉格朗日插值法 牛顿插值法

    matlab数值分析  插值法 1 拉格朗日插值法 function yh=lagrange(x,y,xh) n=length(x); m=length(xh); yh=zeros(1,m); for ...

  7. 拉格朗日c语言实验报告,拉格朗日插值法C语言的实现(实验报告)(9页)-原创力文档...

    韩山师范学院 C语言程序设计 实验名称: 实验一:拉格朗日插值法C语言的实现 日期: 2011-9-19 任课教师: 赖国明 专业: 数学与应用数学 学号: 2009111437 姓名: 郑永锋 [实 ...

  8. 拉格朗日插值法matlab上机,拉格朗日插值法使用MATLAB做的例题

    <拉格朗日插值法使用MATLAB做的例题>由会员分享,可在线阅读,更多相关<拉格朗日插值法使用MATLAB做的例题(2页珍藏版)>请在人人文库网上搜索. 1.一物体廓线数据如下 ...

  9. 拉格朗日插值法(Lagrange)

    拉格朗日插值法是基于基函数的插值方法,插值多项式可以表示为: 其中称为 i 次基函数 Matlab中拉格朗日插值法函数为:Language 功能:求已知点数据点的拉格朗日多项式 调用格式:f=Lagr ...

  10. 【BZOJ3453】XLkxc [拉格朗日插值法]

    XLkxc Time Limit: 20 Sec  Memory Limit: 128 MB [Submit][Status][Discuss] Description 给定 k,a,n,d,p f( ...

最新文章

  1. /org/gnome/Terminal/Factory0: Could not connec
  2. Java 缺省适配器模式
  3. DevExpress的TextEdit限制输入内容的格式,比如只能输入数字
  4. QT的QPen类的使用
  5. Hadoop报错AccessControlException: Permission denied: user=vincent, access=WRITE, inode=/:iie4bu:supe
  6. 全国省市编码_地区编码
  7. 10周拿下数据分析师认证
  8. lua中keyvalue_40行中的持久性KeyValue Server和一个可悲的事实
  9. 这所美国大学研发出了Wi-Fi充电技术
  10. pandas (loc、iloc、ix)的区别
  11. 产品配件类目税目分类_终于找到了!“税收分类编码大全”,有这一篇就够了!...
  12. 16比9尺寸是多少厘米_16:9是多大的尺寸?
  13. 设计师必备的三个导航网站
  14. 07. Python-异常
  15. 最早采用二进制的计算机,计算机 | 中国古代人最早提出的二进制思想?
  16. 分享一个有意思的游戏
  17. 通过聚合数据API实现快递数据查询-短信验证码-企业核名
  18. Java实现高数的收敛级数和不定积分求圆周率
  19. python脚本无缝拼接图片
  20. 初识EMC元器件(九)——气体放电管的参数解读及选型应用

热门文章

  1. 传递函数转化为差分方程
  2. python循环语句continue_Python循环控制语句中的break和continue语句
  3. 成长经历html代码,我的成长经历
  4. 【getAttribute】【setAttribute】【removeAttribute】【attr】【remove】自定义属性的应用 怎么设置自定义属性 怎么修改删除自定义属性
  5. Jenkins忘记密码
  6. 计算机应用基础word3答案,3、Word知识部分--计算机应用基础统考试题库及答案
  7. 视听·封报丨5G发展带来哪些改变?“虚拟偶像”成为追星新潮流
  8. 基于语音合成的实时语音合成:让语音通信更加实时
  9. 浙师大数学与计算机学院好吗,浙江师范大学是好学校吗?为什么浙师大排名这么高?...
  10. 轻量化前端框架与小程序移动开发