首页 > 其他分享 >【模板】拉格朗日插值

【模板】拉格朗日插值

时间:2024-12-24 21:52:33浏览次数:9  
标签:拉格朗 插值 int 点值 ans 求值 mint 模板 vec

我们没有必要一定要将点值表示转化为系数表示,因为点值表示也可以进行单点求值,而且若点值连续,则还可以线性求值,与转化为系数表示之后没有区别。只需要求值的场合,完全可以只存连续的点值,然后线性的加法、减法、乘法、单点求值,甚至前缀和(线性)、函数复合(平方)。反而更优前途了。

我们现在有三种方法表示多项式了:系数表达(下分普通幂多项式和下降幂多项式)、点值表达。都可以用,而且各有所长。

拉格朗日插值可以解决点值表达的单点求值。下分非连续点值的单点求值(平方)和连续点值的单点求值(线性),见下。然后加、减、乘的操作,由 valarray 解决。转系数表达,详见本博客其它页面的多项式全家桶(或者少项式科技集)。

mint lagrange(const vector<pair<mint, mint>>& vec, mint x) {
  int n = (int)vec.size();
  mint ans = 0;
  for (int i = 0; i < n; i++) {
    mint num = 1, den = vec[i].second;
    for (int j = 0; j < n; j++) if (i != j) {
      den *= x - vec[j].first;
      num *= vec[i].first - vec[j].first;
    }
    ans += den / num;
  }
  return ans;
}
mint fac[200010], ifac[200010];;
mint lagrange(const vector<mint> &v, mint x) {
  int n = (int)v.size();
  fac[0] = 1;
  for (int i = 1; i <= n; i++) fac[i] = fac[i - 1] * i;
  ifac[n] = 1 / fac[n];
  for (int i = n; i >= 1; i--) ifac[i - 1] = ifac[i] * i;
  mint ans = 0;
  vector<mint> tmp(n + 1);
  tmp[n] = 1;
  for (int i = n - 1; i >= 0; i--) tmp[i] = tmp[i + 1] * (i - x);
  mint pre = 1;
  for (int i = 0; i < n; i++) {
    mint num = ifac[i] * (i & 1 ? -1 : +1) * ifac[n - i - 1];
    mint den = v[i] * pre * tmp[i + 1];
    ans += den * num;
    pre *= i - x;
  }
  return ans;
}

标签:拉格朗,插值,int,点值,ans,求值,mint,模板,vec
From: https://www.cnblogs.com/caijianhong/p/18628774/template-lagrange

相关文章

  • 实验6 模板类、文件I/O和异常处理
    任务1:task1.cpp1Complex.hpp:2#pragmaonce34#include<iostream>5#include<stdexcept>67//声明8////////////////////////////////////////////////////9//复数模板类声明10template<typenameT>11classComplex{......
  • 实验6 模板类,文件I/O及异常处理
    一实验目的练习编写模板函数、模板类,从多态角度理解模板函数和模板类(类型作为参数)体验标准I/O流类、文件I/O流类、字符串I/O流类的用法,能正确使用针对问题场景,使用流类库对I/O数据进行格式化和读、写操作体验异常处理的基础用法,能解释异常处理的机制和流程训练综合应用类的......
  • 4-Gin HTML 模板渲染 --[Gin 框架入门精讲与实战案例]
    HTML模板渲染下面是使用Gin框架在Go语言中进行HTML模板渲染的四个示例。每个示例都包含了必要的注释来解释代码的作用。示例1:基本模板渲染packagemainimport( "github.com/gin-gonic/gin" "net/http")funcmain(){ r:=gin.Default() //加载HTML模......
  • 实验6 模板类、文件I/O和异常处理
    task4代码:Vector.hpp1#pragmaonce2#include<iostream>34usingnamespacestd;56template<typenameT>7classVector{8public:9Vector(intn);10Vector(intn,Tvalue);11Vector(constVector<T>&......
  • DooTask | 提升效率与协作:解锁Dootask任务模板与标签的强大功能
    文章目录前言一、什么是任务模板二、任务模板的优势三、任务标签的优势四、如何使用任务模板与标签五、快速选择并应用模板与标签六、确保任务的细节无误结束语......
  • 实验6 模板类、文件I/O和异常处理
    任务四:#ifndefVECTOR_HPP#defineVECTOR_HPP#include<iostream>#include<stdexcept>template<typenameT>classVector{private:T*elements;size_tnumElements;public:Vector(size_tn=0):numElements(n){if......
  • 模板Tarjan
    Tarjan模板因为每次写Tarjan都会写挂,所以整理了一些模板。主要的证明就跳过了,主要区分不同模板的差异。有向图和无向图有向图和无向图的实现有时候会有区别,因为建出DFS树之后,有向图可能有横叉边,但是无向图不会(显然),所以有些细节需要注意。而且无向图判重边会比较麻烦。无向图......
  • Java转C++之模板元编程
    模板元编程(TemplateMetaprogramming)入门指南:针对Java程序员的讲解作为一个从Java转到C++的程序员,理解模板元编程(TemplateMetaprogramming,简称TMP)可能会感到有些挑战,特别是其中的语法和概念有很多与Java非常不同的地方。模板元编程是一种强大的技术,它允许我们在编译时......
  • halcon单相机+工业机器人=模板匹配抓取过程原理及代码实现
    先来看看包含哪些流程1.1相机拍照到的工作台物体到机器人底座间的转换关系1,单相机自身的相机内参的标定得到相机的内参cameraparam2,进行手眼标定,用眼在手外,得到camerainbasepose相机相对于工业机器人底座的位姿3,由标定板确定工作台面与相机的位姿关系objincamerapo......
  • 【静态网页模板源码】000023 建筑工作室网站-响应式 (附源码)
    前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦......