• 拉格朗日插值


    本文部分转载自:

    知乎

    中文维基

    有何用

    板子:给出平面上n+1个点,求一条穿过这n+1个点的n次多项式,或这个多项式在另一个点处的值。

    显然可以高斯消元求出每一项系数,然后输出/直接爆算。

    其实拉格朗日插值有两种:朴素的,和重心拉个朗日插值。一般情况下,朴素的和高斯消元在求解第1问时复杂度没有区别,但是后者无论第几问都可以用(O(n^2))的复杂度爆艹高斯消元(O(n^3))

    以下全都介绍求多项式的方法。

    直观理解

    这里的是朴素插值。

    比如说,已知下面这几个点,我想找到一根穿过它们的曲线:

    tu

    首先显然可以用一个n次多项式经过,不保证第n项系数是否为0。

    然后高斯消元告诉我们,这应该是一个二次曲线。

    (y=a_0+a_1x+a_2x^2)

    然后,显然可以解方程。

    [egin{cases} y_1=a_0+a_1x_1^1+a_2x_1^2 \ y_2=a_0+a_1x_2^1+a_2x_2^2 \ y_3=a_0+a_1x_3^1+a_2x_3^2 end{cases} ]

    然而,如果不解方程呢?

    拉格朗日发现,我们可以用三根二次函数相加得到我们要的函数。

    第一个函数(f_1(x)),在(x=x_1)处值为1,在(x=x_2,x_3)处都为0。

    tu

    第二个函数(f_2(x)),在(x=x_2)处值为1,其余两处值为0。

    tu

    第三个函数(f_3(x)),在(x=x_3)处值为1,其余两处值为0。

    现在我们考察 (y_1f_1(x)+y_2f_2(x)+y_3f_3(x)) 的性质。首先,它是一个二次函数。然后,它过这三个点。高斯消元告诉我们,这个函数就是唯一的二次函数 which(经过这三个点)。

    形式化的表述

    首先还是朴素插值。

    假如有 (n+1) 个点,每个点形如 ((x_0,y_0),(x_1,y_1),(x_2,y_2),...) ,假设任意两个x都不相同,那么最后得到的多项式肯定是:

    [L(x)=sum_{j=0}^n(y_iprod_{i=0,i eq j}^n frac{x-x_i}{x_j-x_i}) ]

    显然,这个式子计算连乘部分是n^2的(直接二项打开),总复杂度(O(n^3))

    而且,如果在原点集的基础上加一个点,它需要比较大的复杂度取更新。

    以上是傻逼做法。

    正常的做法应该是,发现每一个连乘的分子乘上一个二项式能变成一个统一的多项式,所以处理的时候直接用不需要的那个二项式去除那个多项式就行(下面的常数计算)。

    P.S.:以上四行为第一次更新所更新的内容。初读可以忽略。

    为了方便增加一个点的改进(正常做法)

    拉格朗日基本多项式

    [l_j(x)=prod_{i=0,i eq j}^n frac{x-x_i}{x_j-x_i} ]

    再令

    [l(x)=prod_{i=0}^n x-x_i ]

    可以得到

    [l_j(x)=frac{l(x)}{x-x_j} frac{1}{prod_{i=0,i eq j}^n(x_j-x_i)} ]

    令重心权(w_j)

    [w_j=prod_{i=0,i eq j}^n(x_j-x_i) ]

    就有

    [l_j(x)=l(x) frac{w_j}{x-x_j} ]

    于是最后的多项式就是

    [L(x)=l(x)sum_{j=0}^n frac{w_j}{x-x_j} y_j ]

    对于这个公式,我们可以每次插入一个点,插一个点On,又因为除的项只有两项,可以手动讨论,因此最后统计(n^2),显然求出答案是(O(n^2))的。

    只要求值

    前面说过,如果只是求值,那么朴素的拉格朗日插值也能做到(O(n^2))。就是直接把要求的x带入上面一堆式子中的x即可。

  • 相关阅读:
    python面向对象中的一些特殊__方法__
    mysql数据库的优化和查询效率的优化
    详解python的垃圾回收机制
    基于django的自定义简单session功能
    使用python制作验证码
    Netty 系列之 Netty 高性能之道
    Java提高篇(二七)-----TreeMap
    Oracle、MySql、SQLServer 数据分页查询
    深入理解数据库原理系列(1)---日志系统原理
    34个数据库常见面试题讲解
  • 原文地址:https://www.cnblogs.com/pupuvovovovo/p/11679399.html
Copyright © 2020-2023  润新知