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 页 拉格朗日插值法与牛顿插值法的比较 [ 摘 要 ] 在生产和科研中出现的函数是多样的.对于一些函数很难找出其解析表达式.即使在某些情况下,可以写出函 数的解析表达式,但由于解析表 ...
最新文章
- 虚拟机Ping不通主机解决
- W ndoWs7更新怎么关闭,怎么样取消windows7自动更新
- Linux(Ubuntu)设置环境变量(转载)
- Cookie防伪造防修改
- Spring Security用户认证和权限控制(默认实现)
- 安装配置管理 之 安装和配置 JPackage Java
- Acwing 1243 糖果 - IDA*估值函数
- 利用C语言读取WAV文件
- js如何获取IP地址?教你4种方法
- .pos文件打开方式
- 从物联网到元宇宙-李正海在物联网大会上的发言
- vue3中使用elementui组件
- 汇编-ARMv8架构指令集
- x86_64汇编之二:x86_64的基本架构(寄存器、寻址模式、指令集概览)
- 核心单词Word List 4
- wolframalpha最新版_Wolfram Alpha安装包-数学工具wolfram alpha最新版1.4.4.2018021301下载_飞翔下载...
- 腾讯云服务器申请SSL证书, 配置Nginx, 实现HTTPS
- python 12306登录_python爬虫--模拟12306登录
- PyGame 英文打字游戏
- 电信3G天翼宽带与SP1冲突导致WIN7桌面AERO半透明效果无法开启