首页 > 其他分享 >拉格朗日插值

拉格朗日插值

时间:2024-09-07 17:37:34浏览次数:10  
标签:pr 拉格朗 插值 ll 我们 MaxN sum 可以

CSR:又拉又插的东西(又垃圾,又傻叉)

JCY:什么你拉插了一晚上?(我学习拉插学了一晚上)

什么是拉插

给定一些点值,是否可以求出一个函数,使得函数图像穿过这些点,并求出给定的 \(x\) 所对应的 \(y\)。

初步思路

前置

我们想到两个点肯定可以确定一条直线,而三个点肯定可以确定一条抛物线,所以我们猜测 \(n + 1\) 个点肯定可以确定一条 \(n\) 次的函数

正文:构造

考虑到我们可以强行让 \(x\) 取到某个值(比如 \(x_i\))时,它所对应的值为 \(y_i\) 那么可以将式子变成 \(f(x)=y_ik\) 那么如何构造 \(k\) 便是我们要考虑的了,当 \(x\) 不取 \(x_i\)、在取其它 \(x_j\) 的时候,我们可以通过一个 \(x - x_j\) 来将其变为 \(0\),可当 \(x_i\) 时,会有一些其他的东西混进去 (\(x-x_j\) 带来的) 所以我们在构造一个 \(a_i-a_j\) 就可以将前面带了的给去掉,考虑到上面是一个 \(0\) 就变成全 \(0\) 所以上面用乘法,所以将前面的去掉的部分我们也用乘法,两个部分一除,便是答案(哇,好抽象):

\(f(x)=\sum y_i\prod\frac{x-x_i}{x_i-x_j}\)

我们也可以将其理解为构造出来一个 \(k\) 来将函数扭成平滑曲线(可以从分段函数,到用平滑曲线来链接)

CF622F The Sum of the k-th Powers

首先我们要证明 \(\sum i^k\) 是个 \(k + 1\) 次多项式,然后这里可以用 \(n^k-(n-1)^k\) 来证明差分后的次数会 \(-1\) 然后我们便可以证明上述命题(说了跟说了似的,算了自行推导),然后我们便可以考虑拉插,考虑到这些 \(x\) 值连续,所以我们便可以通过一些奇怪的做法将整个优化到 \(O(n)\)(哇,我真是个天才,这个也还不如自行推导)

#include <iostream>

using namespace std;
using ll = long long;

const int MaxN = 1e6 + 10, mod = 1e9 + 7;

ll f[MaxN], pr[MaxN], pl[MaxN], y[MaxN], n, k, ans, sum = 1;

ll qpow(ll a, ll b) {
  ll res = 1;
  for (ll i = 1; i <= b; i <<= 1) {
    (b & i) && (res = res * a % mod);
    a = a * a % mod;
  }
  return res;
}

int main() {
  cin >> n >> k, f[0] = pl[0] = pr[k + 3] = 1;
  for (int i = 1; i <= k + 2; i++) {
    f[i] = f[i - 1] * i % mod, sum = sum * (n - i) % mod;
    pl[i] = pl[i - 1] * (n - i) % mod;
  }
  for (int i = k + 2; i >= 1; i--) {
    pr[i] = pr[i + 1] * (n - i) % mod;
  }
  for (int i = 1; i <= k + 2; i++) {
    y[i] = (y[i - 1] + qpow(i, k)) % mod;
  }
  for (int i = 1; i <= k + 2; i++) {
    ll a = pl[i - 1] * pr[i + 1] % mod, b = f[i - 1] * f[k + 2 - i] % mod * ((k + 2 - i) % 2 ? -1 : 1) % mod;
    ans = (ans + a * qpow(b, mod - 2) % mod * y[i] % mod) % mod;
  }
  cout << (ans % mod + mod) % mod << endl;
  return 0;
}

标签:pr,拉格朗,插值,ll,我们,MaxN,sum,可以
From: https://www.cnblogs.com/ybtarr/p/18401931

相关文章

  • matlab中的插值与拟合(代码)
    目录1.对均匀数据的插值与拟合2.对散点数据的拟合(如ANSYSfluent导出的节点数据)1.对均匀数据的插值与拟合interp1:一维插值。这是最常用的插值函数之一,用于对一维数据进行插值。它可以执行线性插值、最近邻插值、样条插值等多种类型的插值。%已知数据点x=1:5;y......
  • 拉格朗日插值优化 DP 做题笔记
    本来想在洛谷题单里找斜率优化DP的,然后发现了一个拉格朗日插值优化DP的题单,就点进去尝试了一下。题单。于是先看了雨兔的题解,学了CF995F的做法,然后A了这个题。雨兔题解的链接和我的代码见CF上的提交记录。现在正在做后面的题。P3643[APIO2016]划艇\(a_i,b_i......
  • [转]插值-样条插值 - 努力的孔子 - 博客园
    百度百科定义插值:在离散数据的基础上插补连续函数,使得这条连续曲线经过全部离散点,同时也可以估计出函数在其他点的近似值。样条插值:一种以可变样条来作出一条经过一系列点的光滑曲线的数学方法。插值样条是由一些多项式组成的,每一个多项式都是由相邻的两个数据点决定的,这样,任......
  • 有符号浮点运算的基本步骤:以双线性插值为例
    参考:韩彬的图像处理书、无双软件学院方法。步骤一:无损定点化浮点数在硬件计算中首先需要做的便是定点化,一般是左移一定位宽,可以是2048或4096;这个过程要注意保障无损;步骤二:运算和位宽匹配;要确定所有参与计算的数小数位位宽是匹配的,否则无法进行任何层次的计算;需要特别注意很......
  • vue ---- {{}}插值表达式数据绑定
    数据绑定常用有4种方式:{{}}、v-text、v-html、template{{}}数据绑定最常见的形式就是使用“Mustache”语法(双大括号)的文本插值:<span>message:{{msg}}</span>mustache标签会被替代为对应数据对象航msgproperty的值。无论何时,绑定的数据对象msgproperty发生了改变,插值处的......
  • 拉格朗日插值 学习笔记
    我们知道,对于一个\(k\)次多项式,我们只需知道它在\(k+1\)个点上的取值,就能求出这个多项式。我们可以列方程求出每一个的系数,但是这样的时间复杂度是\(n^3\)的,所以我们使用一些别的方法来求出对于某个点的值。拉格朗日插值:设已知平面内的\(n\)个点,要求这\(n\)个点的\(n......
  • 集合:(ArrayList)的插值和去重,包含(Iterator和listIterator)迭代器相关使用
    总结:去重用for循环,插值可用for循环和迭代器(可以方便在中间插值),如果要修改集合,就用listIterator,防止父类的Iterator没有add添加功能,也避免版本号不一致报错去重:用contains方法,确认新集合中是否存在旧值1、基本数据类型String去重publicclassArrayListQuChong{public......
  • 黑马Java零基础视频教程精华部分_15_基本查找/顺序查找、二分查找/折半查找、插值查找
    系列文章目录文章目录系列文章目录一、基本查找/顺序查找核心思想:从0索引开始挨个往后查找代码:练习:定义一个方法利用基本查找,查询某个元素在数组中的索引,数组包含重复数据。二、二分查找/折半查找核心思想:属于有序查找算法。用给定值先与中间结点比较,每次排除一半的......
  • 【MATLAB源码-第174期】基于matlab的OFDM电力线系统仿真:梳状导频+LS/MMSE/SVD信道估计
    操作环境:MATLAB2022a1、算法描述OFDM电力线通信系统(PLC)是一种通过电力线传输数据的通信技术,利用了OFDM(OrthogonalFrequencyDivisionMultiplexing,正交频分复用)技术的优势来提高数据传输的速率和质量。电力线作为一种传输介质,其特点包括信道条件的不稳定性、高衰减率以及......
  • Vue初识,vue的插值语法,vue指令之文本指令,vue指令之事件指令, vue指令之属性指令
    ⅠVue初识【一】前端的发展史#1HTML(5)、CSS(3)、JavaScript(ES5、ES6、ES13):编写一个个的页面->给后端(PHP、Python、Go、Java)->后端嵌入模板语法->后端渲染完数据->返回数据给前端->在浏览器中查看#2Ajax的出现->后台发送异步请求,Render+Ajax混合#3单......