浅谈拉格朗日插值法

news/2024/12/28 8:34:19/

浅谈拉格朗日插值法

好像FFT要用到,所以就学习一手

文章目录

  • 浅谈拉格朗日插值法
    • 什么是插值
    • 拉格朗日插值法

什么是插值

在离散数据的基础上补插连续的函数,使得这条连续函数经过所有离散数据点,这个过程就叫插值。

其意义在于:

插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值。

理解一下:
就是把一个足球踢出去,假设球始终在一个平面上飞行,它的轨迹就可以抽象为 f ( x ) f(x) f(x) (假设这个函数至于时间有关)

现在你有一些照片,所以你可以得到某几个时间点球的位置,想要还原出这个函数 f ( x ) f(x) f(x) 的轨迹。但是你的照片数量是有限的,而函数的点是连续的所以插值的结果 g ( x ) g(x) g(x) 可能有无穷多种

插值有许多方法,包括:三角函数插值;线性插值法;牛顿插值法;拉格朗日插值法 …… 但是蒟蒻只会拉格朗日插值法

拉格朗日插值法

这个方法很简单,相当于硬性拼凑。
举个例子,现在平面上有三个点分别是 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x 3 , y 3 ) ( x 1 < x 2 < x 3 ) (x_1 , y_1),(x_2 , y_2),(x_3 , y_3)(x_1 < x_2 < x_3) (x1,y1),(x2,y2),(x3,y3)(x1<x2<x3),我们用这三个插值。
我们需要构造 n n n (这里是3)个函数。第 i i i 个函数满足:
{ 0 , x = x j ( j ! = i ) 1 , x = x i o t h e r s , I d o n ′ t c a r e \left\{\begin{matrix} 0 , x = x_j (j != i) \\ 1 , x = x_i \\ others , I \ don't \ care \end{matrix}\right. 0,x=xj(j!=i)1,x=xiothers,I dont care

这是第一个:

第二个:

第三个

然后我们发现 f ( x ) = y 1 f 1 ( x ) + y 2 f 2 ( x ) + ⋯ + y n f n ( x ) f(x) = y_1f_1(x) + y_2f_2(x) + \cdots + y_nf_n(x) f(x)=y1f1(x)+y2f2(x)++ynfn(x)

对于我们构造出来的第一 1 1 1 条曲线显然满足性质:
f 1 = ( x − x 2 ) ( x − x 3 ) ( x 1 − x 2 ) ( x 1 − x 3 ) f_1 = \dfrac{(x - x_2)(x - x_3)}{(x_1 - x_2)(x_1 - x_3)} f1=(x1x2)(x1x3)(xx2)(xx3)

进一步推广:
f i ( x ) = ∏ j ≠ i n x − x j x i − x j f_i(x) = \prod_{j \neq i} ^ {n}\dfrac{x - x^j}{x_i - x_j} fi(x)=j=inxixjxxj

然后就有了:
f ( x ) = ∑ i = 1 n y i ∗ f i ( x ) f(x) = \sum_{i = 1}^{n}y_i*f_i(x) f(x)=i=1nyifi(x)

##code

#include <bits/stdc++.h>
#define fu(x , y , z) for(int x = y ; x <= z ; x ++)
#define LL long long
using namespace std;
const LL mod = 998244353;
LL n , k;
struct RE {LL x , y;
}re[2005];
LL read () {LL val = 0 , fu = 1;char  ch = getchar ();while (ch < '0' || ch > '9') {if (ch == '-') fu = -1;ch = getchar ();}while (ch >= '0' && ch <= '9') {val = val * 10 + (ch - '0');ch = getchar ();}return val * fu;
}
LL ksm (LL x , LL y) {LL ans = 1;while(y) {if(y&1) ans = ans * x %mod;x = x * x % mod;y >>= 1;}return ans;
}
int main () {LL ans = 0 , ans1;n = read () , k = read ();fu (i , 1 , n) {re[i].x = read () , re[i].y = read ();}fu (i , 1 , n) {ans1 = re[i].y;fu (j , 1 , n)if (i ^ j)ans1 = 1ll * (ans1 * (k - re[j].x) % mod) * ksm (re[i].x - re[j].x , mod - 2) % mod;ans = (ans + ans1+mod) % mod;}printf ("%lld" , ans);return 0;
}

http://www.ppmy.cn/news/50981.html

相关文章

Docker 部署 MySQL 一主多从

主从复制的原理&#xff1a; 1、主库&#xff1a; 创建一个有权访问binlog日志的从库账号&#xff0c;配置需要主从复制的库 有写操作时&#xff0c;可以将写操作或者写操作之后的数据记录到日志文件中(binlog) 通过一个线程通知需要同步数据…

C语言-malloc、free、memset、realloc、strcpy

malloc()开辟指定内存空间 函数原型 void *malloc(size_t size) C 库函数 void *malloc(size_t size) 分配所需的内存空间&#xff0c;并返回一个指向它的指针。 free 释放内存空间 free C 库函数 void free(void *ptr) 释放之前调用 calloc、malloc 或 realloc 所分配的…

经典文献阅读之--VGICP(体素化的ICP匹配)

0. 简介 之前我们在以前的文章中介绍了很多有关于点云匹配相关的知识&#xff0c;最近两年处理GICP这一大一统的ICP匹配方法以外&#xff0c;还有一个工作对体素化和ICP这两者打起了心思&#xff0c;《Voxelized GICP for Fast and Accurate 3D Point Cloud Registration》提出…

并查集解决图的连通性问题

并查集 1. 定义2.并查集3.模板代码4. 力扣例题4.1 剑指 Offer II 118. 多余的边4.2 力扣695. 岛屿的最大面积 1. 定义 在计算机科学中&#xff0c;并查集&#xff08;英文&#xff1a;Disjoint-set data structure&#xff0c;直译为不交集数据结构&#xff09;是一种数据结构&…

奇舞周刊第490期:WebAssembly 多语言/宿主环境中的使用

记得点击文章末尾的“ 阅读原文 ”查看哟~ 下面先一起看下本期周刊 摘要 吧~ 奇舞精选 ■ ■ ■ WebAssembly 多语言/宿主环境中的使用 WebAssembly (WASM) 的一个优势就是能够支持将不同语言编译成 WASM 代码&#xff0c;然后在不同的宿主环境中运行。这样就可以在不同的宿主环…

制造型企业为何需要MES管理系统,企业怎样选择合适的MES

MES管理系统是专门针对制造型企业而设计的&#xff0c;能实现对生产车间、工厂信息化管理&#xff0c;帮助制造型企业提高生产效率&#xff0c;加快数字化转型。目前针对制造型企业生产效率、企业竞争力和生产管理状况的需求&#xff0c;MES管理系统已经成为实现生产经营目标的…

商品页面翻页功能--购物车拓展

之前我们在mvc练习中曾经写过翻页功能&#xff0c;现在我们给购物车产品显示界面也加一个 1、把productlist中dao的sql语句做出修改&#xff0c;并传递需要用到的参数 再来一个返回product总数的方法 2、 对productlist的servlet拓展相关操作&#xff0c;准备好翻页的功能 3、…

二十三、高级网络技术及应用——BFD解析

文章目录 前言一、BFD 简介1、概述&#xff1a;2、作用&#xff1a; 二、静态路由调用 BFD1、配置静态 BFD2、配置动态 BFD 三、OSPF联动BFD四、BFD 单臂回声&#xff08;one arm echo&#xff09; 前言 BFD&#xff1a;Bidirectional Forwarding Detection&#xff0c;双向转…