rstudio拉格朗日插值法_拉格朗日插值法
我们遇到的问题是,给定一个多项式的点值表示和一个数,求出这个数带入多项式后的值。
这个问题如果用待定系数法,可以使用高斯消元,但是复杂度是\(O(n^3)\)的,无法通过本题。
所以我们来引入拉格朗日插值法。
它的关键在于,有一个拉格朗日基本公式:
$$f(k) = \sum_{i=0}^ny_i\prod_{i \neq j} \frac{k - x_j}{x_i - x_j}$$
这个公式使得\(f(x_i) = y_i\) ,也就是同时满足这些点的表示。
原因在于,对于一个\(x_i\),只有在第\(i\)项,他后面的值是1,剩下的时候全是0,相当于全部被消掉了。(感觉这个地方和\(CRT\)的构造好像……),所以这个公式自然就满足所有点的表示了。
之后,我们就可以直接把值带入,模拟计算即可。时间复杂度\(O(n^2)\)。
特殊的,一般来讲我们遇到的题目,所有的\(x_i\)都是连续的。这样我们可以进一步优化这个算法,使之在\(O(n)\)内计算出值。
具体的,我们再观察一下上面的式子。我们发现分母其实就是一个阶乘的形式。可以先预处理出来。然后对于分子,对于每个\(k\),我们可以先维护其前缀积和后缀积,即\(pre_i = \prod_{j = 0}^i k - j\),\(suf_i = \prod_{j = i}^n j - k\),式子就变成了
$$f(k) = \sum_{i=0}^ny_i \frac{pre_{i-1}suf_{i+1}}{fac_i fac_n-i}$$
之后就可以\(O(n)\)计算了。 注意分母,在\(n-i\)为奇数的时候,分母是负数。
先这些吧……剩下的坑以后再填。
看一下代码。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define rep(i,a,n) for(int i = a;i <= n;i++)
#define per(i,n,a) for(int i = n;i >= a;i--)
#define enter putchar('\n')
#define fr friend inline
#define y1 poj
#define mp make_pair
#define pr pair
#define fi first
#define sc second
#define pb push_back
using namespace std;
typedef long long ll;
const int M = 100005;
const int INF = 1000000009;
const double eps = 1e-7;
const ll mod = 998244353;
ll read()
{
ll ans = 0,op = 1;char ch = getchar();
while(ch < '0' || ch > '9') {if(ch == '-') op = -1;ch = getchar();}
while(ch >= '0' && ch <= '9') ans = ans * 10 + ch - '0',ch = getchar();
return ans * op;
}
ll n,k,x[M],y[M],ans;
ll qpow(ll a,ll b)
{
ll p = 1;
while(b)
{
if(b & 1) p *= a,p %= mod;
a *= a, a %= mod;
b >>= 1;
}
return p;
}
int main()
{
n = read(),k = read();
rep(i,1,n) x[i] = read(),y[i] = read();
rep(i,1,n)
{
ll cur = 1;
rep(j,1,n)
{
if(i == j) continue;
ll now = (x[i] - x[j] + mod) % mod;
cur = cur * (k - x[j] + mod) % mod * qpow(now,mod-2) % mod;
}
ans = ans + (y[i] * cur % mod),ans %= mod;
}
printf("%lld\n",ans);
return 0;
}
rstudio拉格朗日插值法_拉格朗日插值法相关推荐
- 拉格朗日插值_拉格朗日插值定理的理论基础
缺失,几乎是不可避免的.只要做数据处理,不可避免的工作就是插值.而插值里面比较常用的方法之一就是拉格朗日插值法,这篇文章就跟大家讲讲拉格朗日插值的理论基础. 为什么需要进行插值 我们进行数据处理的理想 ...
- rstudio拉格朗日插值法_拉格朗日插值法函数使用问题
拉格朗日差值法:在数值分析中,拉格朗日插值法是以法国十八世纪数学家约瑟夫·拉格朗日命名的一种多项式插值方法. 概念 一般地,若已知 在互不相同 n+1 个点 处的函数值 ( 即该函数过 这n+1个点) ...
- rstudio拉格朗日插值法_拉格朗日插值法学习笔记
拉格朗日插值法是一个根据点对求回原函数的算法,原理挺好懂的. 原理和优化方法上面的大佬都讲得很好. 其实主要就是这个式子: 然后暴力算这个式子的话是每求一项f(k)的时间复杂度都是n^2. 这个时间很 ...
- python缺失值拉格朗日插值_拉格朗日插值-python
在数据库中,有些数据是异常值或者空值,这些值在分析的时候应该特殊处理,比如最简单的忽略掉或者通过算法推测它的值.其中拉格朗日插值就是通过其他已经知道的值,对x位置缺失的值插入的算法. 假定我们已经知道 ...
- mysql实现线性插值法_线性插值法
线性插值法(linear interpolation) 什么是线性插值法 线性插值法是指使用连接两个已知量的直线来确定在这两个已知量之间的一个未知量的值的方法. 如何进行线性插值 假设我们已知坐标(x ...
- rstudio拉格朗日插值法_电力窃漏电用户识别案例
一.案例综述 案例编号:102003 案例名称:电力.热力.燃气及水生产和供应业--电力窃漏电用户识别 作者姓名(或单位.或来源):朱江 案例所属行业:D442 电力供应 案例所用软件:R 案例包含知 ...
- 拉格朗日插值的优缺点_拉格朗日与牛顿插值法的比较
第 1 页 共 7 页 拉格朗日插值法与牛顿插值法的比较 一. 背景 在工程和科学研究中出现的函数是多种多样的.常常会遇到这样的情况:在某个实际 问题中,虽然可以断定所考虑的函数 ) ( x f 在区 ...
- 拉格朗日插值的优缺点_拉格朗日插值法与牛顿插值法的比较
第 1 页 共 7 页 拉格朗日插值法与牛顿插值法的比较 [ 摘 要 ] 在生产和科研中出现的函数是多样的.对于一些函数很难找出其解析表达式.即使在某些情况下,可以写出函 数的解析表达式,但由于解析表 ...
- 拉格朗日插值的优缺点_拉格朗日插值的优缺点_拉格朗日插值法与牛顿插值法的比较...
第 1 页 共 7 页 拉格朗日插值法与牛顿插值法的比较 [ 摘 要 ] 在生产和科研中出现的函数是多样的.对于一些函数很难找出其解析表达式.即使在某些情况下,可以写出函 数的解析表达式,但由于解析表 ...
最新文章
- reboot 百度网盘资源
- 看大众点评如何通过实时监控系统CAT打造7*24服务
- 单片机 解释型 c语言脚本,解释型单片机应用程序的研究.pdf
- TensorFlow练习9: 生成妹子图(PixelCNN)
- 程序员霸榜 2020 年十大高薪岗位,不料幸福度却垫底了!
- 【MATLAB教程案例1】通信系统中成形滤波器原理的MATLAB设计实现
- MySQL中的条件赋值
- 一步步完成jsRender + Spring MVC + Nginx前后端分离示例
- React demo:express、react-redux、react-router、react-roter-redux、redux-thunk(一)
- 理解并使用ASP.NET的高级配置
- awk----基本用法
- 如何在Debian 9 / Debian 8上安装MariaDB 10.3
- 正则表达式判断是否为数字
- C#开发Android应用实战
- ECSHOP图书销售网站模板
- Python神经网络模型和预测
- 计算机专业人士研究生论文,计算机专业研究生论文致谢
- 矛与盾:黑客攻防命令大曝光
- Clickhouse优点 缺点 / Doris 优点 缺点
- PD3.0 PPS限流