当前位置: 首页 > news >正文

插值相关

通常的,我们被给到一个函数在一些点上的值,我们可以用高斯消元在 \(O(n^3)\) 的时间复杂度内求出对应的多项式

当我们只被要求求出其中的的一个点时,我们可以使用插值这个工具在 \(O(n^2)\) 的时间复杂度之内求解。

一、拉格朗日插值

1. 算法原理

我们现在的目标是构造一个多项式,使得带入每一个给定的点都能够保证得到的答案一一对应

于是乎,我们有一个初始的想法:

\[ f(x) = \sum_{i=1}^n [x == x_i] y_i\]

好想法!但是我们怎么把 \([x == x_i]\) 转化为多项式呢?

我们想要让只有 \(x == x_i\) 的时候,这个多项式的结果为 \(1\)\(x == x_j (j\neq i)\) 的时候,这个多项式的结果为 \(0\),其他数的结果任意,并且多项式的理论次数为 \(0\)

我们经过千辛万苦,构造出如下式子:

\[ \prod_{j\neq i} \frac{x-x_j}{x_i-x_j}\]

如何千辛万苦

我们需要构造函数 \(f_1(x),f_2(x),\dots,f_n(x)\) 使得对于函数 \(f_i(x)\) 过点 (x_i,1) 和所有的 \((x_j,0)\)

我们设 \(f_i(x) = A \prod_{j\neq i} (x-x_j)\),带入 \((x_i,1)\) 可以得到 \(A = \frac 1 {\prod_{j\neq i} (x_i-x_j)}\)

所以 \(f_i(x) = \prod_{j\neq i} \frac {x-x_j} {\prod_{j\neq i} (x_i-x_j)}\)

我们发现,当 \(x = x_i\) 的时候,这个式子的结果是 \(1\),而当 \(x = x_j\) 的时候,\(x_j-x_j = 0\),使得结果是 \(0\)

这样我们就得出了拉差式子:

\[ f(x) = \sum_{i=1}^n y_i \prod_{j\neq i} \frac{x-x_j}{x_i-x_j}\]

2. 下标连续的线性复杂度拉差

http://www.hskmm.com/?act=detail&tid=11757

相关文章:

  • 密码学学习记录(三)
  • 详解scheduleAtFixedRate 与 scheduleWithFixedDelay 的区别
  • [题解]P11095 [ROI 2021] 旅行 (Day 2)
  • DDR5内存时序参数对照表
  • Linux CentOS 第三方扩展模块编译并安装
  • Java ArrayList中的常见删除操作及方法
  • ADC和GPIO的关系
  • 使用Docker Compose工具进行容器编排的教程
  • 模拟输入的过程
  • 基于Redisson和自定义注解的分布式锁实现策略
  • CCPC2025网络赛 游记
  • 知行合一
  • Manim实现水波纹特效
  • 深入解析:解锁AI智能体:上下文工程如何成为架构落地的“魔法钥匙”
  • JS之使用for...of赋值失败的原因分析
  • String
  • Linux /lib/modules/$(uname -r)/ 目录功能作用详解
  • 《建筑的永恒之道》第 27 章:道之核心
  • 软件工程第二次作业_个人项目
  • Linux命令大全(档案管理)
  • 小狼毫雾凇拼音安装部署
  • Chapter 3 Resize and Cropping
  • 详细介绍:java中常见的几种排序算法
  • 使用FFmpeg转换m4a
  • 提升多屏监控体验/新增辅屏预览功能/轻松实现跨屏实时监控/支持高达500路多个屏幕同时显示
  • [Java SE/文件系统/IO] 核心源码精讲:java.io.File
  • Linux 内核整体架构详解
  • atoi() - 字符串( ASCLL )转换为整数( int )
  • 02.Python:Flash初步使用
  • 解决Kubernetes集群中master节点无法与node节点通信的策略