首页 > 其他分享 >拉格朗日插值学习笔记

拉格朗日插值学习笔记

时间:2023-05-04 18:35:33浏览次数:33  
标签:拉格朗 include 函数 limits 插值 笔记 int prod neq

拉格朗日插值学习笔记

概念

拉格朗日插值用于拟合一个函数。可以通过已知函数中的点拟合出函数。若为 \(n\) 次函数,则需要多于 \(n+1\) 个点。

做法

考虑构造 \(n+1\) 个函数,第 \(i\) 个函数 \(f_i\) 对应点 \(i\) 满足 \(f_i(X_i)=Y_i\) 且对于其他的点 \(j(i\neq j)\) 满足 \(f_i(X_j)=0\)。显然最后结果就为 \(\sum\limits_{i=1}^{n+1} f_i\)。

满足后者,我们只需要让函数 \(f_i\) 形如 \(\prod\limits_{j=1}^{n+1}(x-X_j)(i\neq j)\) 即可。考虑满足后者。

因为 \(0\) 的倍数为 \(0\),所以给函数加系数不影响。当前函数 \(f_i\) 取 \(X_i\) 时为 \(\prod\limits_{j=1}^{n+1}(X_i-X_j)(i\neq j)\) 则让当前值变为 \(Y_i\) 可以乘 \(\frac{Y_i}{\prod\limits_{j=1}^{n+1}(X_i-X_j)(i\neq j)}\)。带入原函数则为

\[f_i(x)=\prod\limits_{j=1,i\neq j}^{n+1}(x-X_j)*\frac{Y_i}{\prod\limits_{j=1,i\neq j}^{n+1}(X_i-X_j)} \]

一般写成

\[f_i(x)=Y_i*\prod\limits_{j=1,i\neq j}^{n+1}\frac{(x-X_j)}{(X_i-X_j)} \]

则最终函数为

\[F(x)=\sum\limits_{i=1}^{n} f_i(x) \]

\[F(x)=\sum\limits_{i=1}^{n} Y_i*\prod\limits_{j=1,i\neq j}^{n+1}\frac{(x-X_j)}{(X_i-X_j)} \]

代码(模板拉格朗日插值)

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<string>
#define mod 998244353
#define int long long
using namespace std;
int n,k;
int x[100001],y[100001],ans;
int pow(int a,int b)
{
	int re=1;
	while(b)
	{
		if(b&1)
		{
			re*=a;
			re%=mod;
		}
		a*=a;
		a%=mod;
		b>>=1;
	}
	return re;
}
signed main()
{
	scanf("%lld%lld",&n,&k);
	for(int i=1;i<=n;i++)
	{
		scanf("%lld%lld",&x[i],&y[i]);
		x[i]%=mod;
		y[i]%=mod;
	}
	for(int i=1;i<=n;i++)
	{
		int mul=1,mul2=1;
		for(int z=1;z<=n;z++)
		{
			if(i==z) continue;
			mul*=(k-x[z])%mod;
			mul2*=(x[i]-x[z])%mod;
			mul%=mod;
			mul2%=mod;
		}
		ans+=mul*pow(mul2,mod-2)%mod*y[i]%mod;
		ans%=mod;
	}
	printf("%lld",(ans%mod+mod)%mod);
}

标签:拉格朗,include,函数,limits,插值,笔记,int,prod,neq
From: https://www.cnblogs.com/lizhous/p/17372162.html

相关文章

  • 学习笔记:数位dp
    1.基本模型数位dp,即以数的每一位作为状态进行dp的算法。通常状态为\(f_{i,0-9}\)表示第\(i\)为取\(0-9\)时的dp值。通常时间复杂度为\(log_{10}n\),十分优秀。2.套路求区间合法类的题,使用容斥思想思想求解,即\([1,r]-[1,l-1]\)dp式子一般很简单,可以使用矩阵快速幂优化......
  • 线性基学习笔记
    概念线性基是一个集合。从原集合中选取任意数都能通过线性基中的数异或得到。本质上是对集合的压缩性质所有数字没有最高位相同的集合大小为\(\log_2\)级别。操作排查:若线性基内有最高位相等的,让其相异或,并继续排查直到没有可操作的数。若原集合内有\(0\)线......
  • 莫队学习笔记
    概念莫队是一种幽雅的暴力。用于处理区间问题。核心思想就是把询问离线下来,然后维护双指针按一定顺序处理每个询问。精髓就在于一定顺序。首先确定一个块长,然后将左端点的位置除以块长,把询问分成若干块。在每个块里按右端点排序。发现当块长为\(\sqrtn\)时两个指针各移动\(......
  • 后缀数组学习笔记
    概念后缀数组,即对于一个串,它的每个后缀按字典序排序后得到的数组。有两个数组要求:\(SA_i\):排名为\(i\)的后缀的开头位置\(RK_i\):以\(i\)为开头的后缀的排名朴素sort排序一下优化倍增优化:我们进行\(\logn\)次排序,第\(k\)次取所有后缀的前\(2^k\)个字符进行......
  • 点分治学习笔记
    概念点分治用于解决有一定要求的链的计数。对于点\(u\)的子树的问题,可以将答案分为:经过点\(u\)不经过点\(u\)第一种可以用桶加暴力。枚举一端的长度,用桶计算另一端长度;第二种分到子树中解决即可。注意到,在随机选根的时候该算法表现不优秀,但若根为重心,因为每次子树......
  • 网络流学习笔记
    概念最大流:在一个网络图上,每个边有流量限制,假如起始点有无线流量,求最多能有多少流量流到终点。增广路:一条从起始点到终点了路径,可以流流量。算法Ford-Fulkerson算法解决这个问题,可以用Ford-Fulkerson算法。该算法的核心就是寻找增广路。每找到一条增广路,就给它它能承受......
  • TypeScript 学习笔记 — 模板字符串和类型体操(十五)
    目录基本介绍字符串类型体操实操环节1.字符串首字母大写CapitalizeString2.获取字符串第一个字符FirstChar3.获取字符串最后一个字符LastChar4.字符串转元组StringToTuple5.元组转字符串TupleToString6.重复字符串RepeatString7.字符串分割SplitString8.获取字符串......
  • react.js学习笔记
    (1)      参考文献1.前端技术手册2.在线编码......
  • 内网工控机通过联网笔记本上网
    1、工控机与笔记本通过网卡连接。2、笔记本win11,工控机ubuntu14.043、笔记本设置共享上网  参考https://zhidao.baidu.com/question/505682783651825564.html,此文。  1)打开控制面板,进入WLAN的属性界面    2)确定后出现一个提示,笔记本的本地连接变成192.168......
  • 最优控制和轨迹规划学习笔记
    最优控制和轨迹规划学习笔记包含多个实际案例倒立摆上翻控制满足车辆运动学约束的路径规划离散点参考线优化lattice横向距离规划YID:5745658004330616......