精华内容
下载资源
问答
  • 拉格朗日松弛算法

    2018-10-10 15:57:37
    实现拉格朗日松弛算法,可以较快完成算法迭代,基于Matlab软件实现
  • 在若干个不同的地方得到相应的观测值,拉格朗日插值法可以找到一个多项式,其恰好在各个观测的取到观测到的值。这样的多项式称为拉格朗日(插值)多项式。数学上来说,拉格朗日插值法可以给出一个恰好穿过二维平面...
  • python拉格朗日插值(详细)

    万次阅读 2017-12-08 15:41:53
    在若干个不同的地方得到相应的观测值,拉格朗日插值法可以找到一个简单函数,其恰好在各个现测的取到观测到的值。本文基于Python实现一个简单的拉格朗日插值。

    拉格朗日插值简单介绍

    拉格朗日插值法是以法国十八世纪数学家约瑟夫·拉格朗日命名的一种多项式插值方法。

    许多实际问题中都用函数来表示某种内在联系或规律,而不少函数都只能通过实验和观测来了解。在若干个不同的地方得到相应的观测值,拉格朗日插值法可以找到一个简单函数,其恰好在各个现测的点取到观测到的值,这个函数可以是代数多项式,三角多项式等。

    本文基于Python实现一个简单的拉格朗日插值。

    # -*- coding: utf-8 -*-
    
    # 拉格朗日插值实现
    # time:2017.11.01
    

    读取数据

    import pandas as pd
    inputfile = "E:\\Python\\model1\\train_test2.csv"
    train_data = pd.read_csv(inputfile, encoding = 'utf-8') 
    

    部分数据展现
    这里写图片描述

    查看数据集大小

    print('数据量:',train_data.shape)  
    

    数据量: (300, 8)

    查看缺失值情况

    def na_count(data):
        data_count = data.count()              
        na_count = len(data) - data_count            
        na_rate = na_count/len(data)                 
        result = pd.concat([data_count,na_count,na_rate],axis = 1)   
        return result;
    na_count(train_data)
    

    这里写图片描述

    拉格朗日插值

    import pandas as pd 
    from scipy.interpolate import lagrange   
    def ployinterp_column(s,n,k=5):
        y = s[list(range(n-k,n)) + list(range(n+1,n+1+k))] 
        y = y[y.notnull()] 
        return lagrange(y.index,list(y))(n) 
    

    逐个元素判断是否需要插值

    for i in train_data.columns:
        for j in range(len(train_data)):
            if (train_data[i].isnull())[j]:  
                train_data[i][j] = ployinterp_column(train_data[i],j)
    

    输出结果

    outputfile = "E:\\Python\\model1\\train_test_out.xls"
    train_data.to_excel(outputfile)  
    

    查看数据

    这里写图片描述

    展开全文
  • 使用拉格朗日多项式插值法近似定义函数
  • 计算方法作业-拉格朗日插值方法,使用c语言实现。剩下的看代码就行。
  • matlab 拉格朗日

    2013-09-02 19:37:04
    matlab 拉格朗日法 源代码 函数中,x和y为拟合所用的数据,也是用来插值的原始数据,yy为返回的拟合多项式。
  • 曾广拉格朗日算法的matlab代码,里面有一些说明
  • matlab开发-拉格朗日插值与导数。此函数执行函数及其导数的拉格朗日插值。
  • 拉格朗日乘子法

    2021-07-27 14:09:06
    一、拉格朗日乘子法简介 拉格朗日乘子法的应用十分广泛,它是SVM的理论基础,是凸优化的重要研究部分。它用于求解约束条件下的极值问题,过程简单巧妙,也是各类考试的常考题型。然而,拉格朗日乘子法的原理我却...

    一、拉格朗日乘子法简介

    拉格朗日乘子法的应用十分广泛,它是SVM的理论基础,是凸优化的重要研究部分。它用于求解约束条件下的极值问题,过程简单巧妙,也是各类考试的常考题型。然而,拉格朗日乘子法的原理我却一直模模糊糊,每次看的时候才知道,一段时间不看就又忘了,所以特地写这篇博客来供自己时刻学习。

    先从一个简单的例子开始:

    假如我们需要求一个函数的最小值,即约束条件为。我们用拉格朗日乘子法来求解:

     首先用描述约束条件,即

    而后引入拉格朗日乘子λ,并构造一个新的函数:

    因为,于是,因此当取得极小值时有:

          (1)

    于是得到: =>

    即当==1时,取得最小值,最小值为2。这就是拉格朗日乘子法求解过程。

    拉格朗日乘子法非常巧妙,但其中的原理却难以琢磨,从几何角度观察,我们可以更加直观地理解拉格朗日乘子法的原理以及这个乘子λ的几何含义。

    首先我们观察约束条件,在平面上是一条直线如下图中的蓝色直线所示。

     再看,令这表示的某一条等高线,随着r的改变我们得到了多条等高线,在上图中以绿色圆圈表示。

    在图中,如果某一条等高线与直线相交,则表示在的约束条件下,可以取到r的值。为了求得的最小值,在保证绿色圆圈与蓝色直线有交点的前提下,逐渐将r缩小,直到绿色等高线圆小到与蓝色直线相切,此时r0最小,我们认为获得了最小值

     

     

    下面我们来计算,在图中我们看到等高线圆与约束直线相切。此时在切点处,等高线圆与约束直线具有相同的切线方向与法线方向。

    又因为等高线f的切线方向与在该点的梯度方向相互正交,于是的法线方向即是的梯度方向,而该梯度方向为

    同理直线的法线方向也就是的梯度方向

    在切点处GfGg的方向相同,即相切。那么f ( x ) g ( x ) 在这一点的梯度一定是成比例的(具体理解起来就是法向量一定成比例)。

    因此我们引入乘子λ,并且有

      =>    2

    上式与式(1)相同。这个方程组总共包含n + 1个方程(梯度是一个向量,梯度等于0必须每一维都为0),恰好可以解出所有的λ ​    

    到此我们也已经获得了与拉格朗日乘子法相一致的结论。于是我们从几何角度解释了拉格朗日乘子引入的过程,也验证了拉格朗日乘子法的结论。

    二、拉格朗日乘子法求解带等式约束的最优化问题

    拉格朗日求得的并不一定是最优解,只有在凸优化的情况下,才能保证得到的是最优解,所以我们说拉格朗日乘子法得到的为可行解,其实就是局部极小值。

    1、构造拉格朗日函数

    之所以这样构造的原理我们可以继续看上面式(2,我们把式子的右边移到左边,并把常数移进微分算子,得到:

    把这个式子重新解释一下,这个就是函数无约束条件下极值点的充分条件。

    2、构造完之后就可以分别对参数求偏导,并令其等于0,就能解出无约束极值和极值所对应的点。

    三、引入KKT条件求带不等式约束条件的最优化问题

    所谓的KKT条件,是指对一类符合条件的所有拉格朗日乘子法问题进行公式化求解的过程。在机器学习中,我们解决的问题一般最后都化为目标函数最优化问题,即转化为在给定约束条件下最大或最小化目标函数。

    约束条件会有一般包括以下三类:

    1)仅含等式约束

    2)仅含不等式约束

    3)等式和不等式约束混合型

    当然还有一类没有任何约束条件的最优化问题。仅含等式约束的目标函数不再赘述。

    对于不等式约束g(x)<=0,和等式约束h(x)=0不一样,h(x)=0可以在平面上画出一条等高线,而g(x)<=0是一个区域,很多个等高线堆叠而成的一块区域,我们把这块区域称为可行域。

    不等式约束分两种情况来讨论,第一种是原有函数的(不考虑可行域限制时的)极值点落在可行域内(不包含边界),第二种是原有函数的(不考虑可行域限制时的)极值点落在可行域外(包含边界)。

    下面举两个例子来解释这两种情况,然后总结两种情况给出转换求解。

    (一)带不等式约束条件的最优化

    在有不等式g(x)<=0的约束下,可行解 x 只能在 g(x)<0 或者 g(x)=0 的区域里取得:

    当可行解 x 落在 g(x)<0 的区域内,此时直接极小化 f(x) 即可;

    当可行解 x 落在 g(x)=0 即边界上,此时等价于等式约束优化问题.

    case1:当约束区域包含目标函数原有的的可行解时,此时加上约束可行解仍落在约束区域内部,对应 g(x)<0 的情况,这时约束条件不起作用;

    现在我们假设问题是:,其中

     我们很容易知道f(x)的最小值在(00),等高线如下图:

    接下来我们画上g(x1,x2)限制的可行域(以(00)为圆心,半径为1的圆型区域,包括边界):

    很明显这个约束并不起作用,函数f(x1,x2)的极值点不变,这种情况约束不起作用,考虑极小值点x*,这个时候,g(x*) < 0f(x*)的梯度等于0

    case2:当约束区域不包含目标函数原有的可行解时,此时加上约束后可行解落在边界 g(x)=0 上。下面我们考虑另外一个不等式约束下的问题:,其中

    我们可以看一下这个问题的等高线情况:

    以上两种情况就是说,要么可行解落在约束边界上即得 g(x)=0,要么可行解落在约束区域内部,此时约束不起作用,令 λ=0 消去约束即可,所以无论哪种情况都会得到λ(也就是KKT条件的其中之一)。

    还有一个问题是 λ 的取值,在等式约束优化中,约束函数与目标函数的梯度只要满足平行即可,而在不等式约束中则不然,若 λ≠0,这便说明 可行解 x 是落在约束区域的边界上的,这时可行解应尽量靠近无约束时的解,所以在约束边界上,目标函数的负梯度方向应该远离约束区域朝向无约束时的解,此时正好可得约束函数的梯度方向与目标函数的负梯度方向应相同:

    上式需要满足的要求是拉格朗日乘子 λ>0

    (二)满足KKT条件

    可见对于不等式约束,只要满足一定的条件,依然可以使用拉格朗日乘子法解决,这里的条件便是 KKT 条件。

    对于如下:

    我们定义的拉格朗日函数:

    这时,KKT条件如下:

    满足 KKT 条件后极小化 Lagrangian 即可得到在不等式约束条件下的可行解。 KKT 条件看起来很多,其实很好理解:

    1) 拉格朗日取得可行解的必要条件;

    2) 这就是以上分析的一个比较有意思的约束,称作松弛互补条件;

    34) 初始的约束条件;

    5) 不等式约束的 Lagrange Multiplier 需满足的条件

    (三)原最优化问题转对偶问题

    每个线性规划问题都有一个与之对应的对偶问题,对偶问题有非常良好的性质,以下列举几个:

    1)对偶问题的对偶是原问题;

    2)无论原始问题是否是凸的,对偶问题都是凸优化问题;

    3)对偶问题可以给出原始问题一个下界;

    4)当满足一定条件时,原始问题与对偶问题的解是完全等价的;

    任何满足强对偶性的优化问题,只要其目标函数与约束函数可微,任一对原始问题与对偶问题的解都是满足 KKT 条件的。即满足强对偶性的优化问题中,若x*为原始问题的最优解,α* ,β* 为对偶问题的最优解,则可得 x*,α*,β* 满足 KKT 条件。

    当原始问题是凸优化问题,且存在x*,α*,β*满足 KKT 条件,那么它们分别是原始问题和对偶问题的极值点并且强对偶性成立。

    当满足KKT条件时, f(x)是等价的。

     

    因此我们的目标函数可以写为:

    如果用对偶表达式: 由于我们的优化是满足强对偶的(满足KKT条件),强对偶就是说对偶式子的最优值是等于原问题的最优值的,所以在取得最优值 x 的条件下,它满足:

    我们来看看中间两个式子发生了什么事情:

    可以看到上式本质上是说 x 取得了最小值,对于函数 f(x)+ag(x)+bh(x),求取导数要等于零,即

    这就是KKT条件中第一个条件:

    所有上述说明,满足强对偶条件的优化问题的最优值都必须满足KKT条件,也就是说当满足KKT条件时原始问题与其对偶问题具有相同的最优解。

    参考网址:

    https://www.cnblogs.com/jason-wyf/p/6727524.html

    https://blog.csdn.net/Laurel1115/article/details/88238944

    https://blog.csdn.net/weixin_44273380/article/details/109016774

    展开全文
  • 拉格朗日中值定理

    2021-07-25 17:44:32
    拉格朗日中值定理又称拉氏定理,是微分学中的基本定理之一,它反映了可导函数在闭区间上的整体的平均变化率与区间内某的局部变化率的关系。拉格朗日中值定理是罗尔中值定理的推广,同时也是柯西中值定理的特殊情形...

    目录

    一、定理描述

    二、拉格朗日中值定理及几何意义

    1.拉格朗日中值定理:

    2.几何意义:

    3.需要注意的地方(逆命题不成立)

    三、应用举例


    拉格朗日中值定理又称拉氏定理,是微分学中的基本定理之一,它反映了可导函数在闭区间上的整体的平均变化率与区间内某点的局部变化率的关系。拉格朗日中值定理是罗尔中值定理的推广,同时也是柯西中值定理的特殊情形,是泰勒公式的弱形式(一阶展开),在机器学习支持向量机等算法模型中有使用此定理。

    一、定理描述

    如果函数x满足:

    (1)在闭区间[a,b]上连续;

    (2)在开区间(a,b)上可导;

    在开区间(a,b)内至少有一点\varepsilon(a<\varepsilon<b)使等式f(b)-f(a)=f'(\varepsilon )(b-a)成立。

    其他形式

    \varepsilon=a+\theta (b-a)(0<\theta <1),令a=xb=x+\Delta x,则有\varepsilon =a+\theta (x+\Delta x-x)=x+\theta \Delta xf'(\varepsilon )\Delta x=\Delta y

    \Delta y=f(x+\Delta x)-f(x)=f'(x+\theta \Delta x)\cdot \Delta x(0<\theta <1),此式为有限增量公式。

    我们知道函数的微分dy=f'(x)\Delta x是函数的增量\Delta y的近似表达式,一般情况下只有当\left | \Delta x \right |很小的时候,dy\Delta y之间的近似度才会提高;而有限增量公式却给出了当自变量x取得有限增量\Delta x\left | \Delta x \right |不一定很小)时,函数增量\Delta y的准确表达式,这就是改公式的价值所在。

    二、拉格朗日中值定理及几何意义

    1.拉格朗日中值定理:

    若函数f(x)在(a,b)可导,则在(a,b)至少存在一点c,使f'(x)=\frac{f(b)-f(a)}{b-a}

    2.几何意义:

    函数y=f(x)在[a,b]上的图形是连续光滑曲线,弧AB上至少有一点P,曲线P点的切线平行于弦AB,如图

    证明:令g(x)=f(x)-f(a)-\frac{f(b)-f(a)}{b-a}(x-a)\Rightarrow g'(x)=f'(x)-\frac{f(b)-f(a)}{b-a}g(x)在[a,b]连续,在(a,b)可导,且g(a)=g(b)=0,根据罗尔定理在(a,b)内至少存在一点c,使

    g'(c)=0\Rightarrow f'(c)-\frac{f(a)-f(b)}{b-a}=0

    3.需要注意的地方(逆命题不成立)

    拉格朗日中值定理没有逆定理,即对曲线的任一切线,并不一定存在割线,使割线斜率等于切线斜率,如f(x)=x^{3}x=0处的斜线斜率为0,但f(x)不存在割线使割线斜率等于0。

    注:割线、切线、切割线三者都是针对圆而言的:
    1、割线:就是圆外一点引出一条直线与圆有两个交点的线,叫割线;
    2、切线:就是圆外一点引出一条直线与圆有一个交点的线,叫切线;
    3、切割线:是从同一点出发,引出一条割线和一条切线。

    三、应用举例

    已知函数f(x)=aln(x+1)-x^{2}在(1,2)内任意取两个实数p,q,且p\neq q,不等式\frac{f(p+1)-f(q+1)}{p-q}< 1恒成立,则实数a的取值范围为?

    解法一:常规解法

    x_1=p+1,x_2=q+1

    因为p,q\in (1,2),所以x_1,x_2\in (2,3) 

    \frac{f(p+1)-f(q+1)}{p-q}=\frac{f(x_1)-f(x_2)}{x_1-x_2}< 1

    不妨设x_1>x_2

    f(x_1)-f(x_2)< x_1-x_2

    f(x_1)-x_1< f(x_2)-x_2

    g(x)=f(x)-x 

    则有g(x_1)<g(x_2) 

    因为x_1>x_2

    所以g(x)(2,3)内单调递减

    g(x)=aln(x+1)-x^{2}-x 

    g(x)'=\frac{a}{x+1}-2x-1(x>-1) 

    需证明当x\in (2,3)时,\frac{a}{x+1}-2x-1\leq 0恒成立

    解法二:拉格朗日中值定理

    \frac{f(p+1)-f(q+1)}{p-q}=\frac{f(x_1)-f(x_2)}{x_1-x_2}< 1

    \frac{f(x_1)-f(x_2)}{x_1-x_2}=f'(x_0)

    f'(x_0)\leq 1 

    只需证明当x\in (2,3)时,\frac{a}{x+1}-2x\leq 1恒成立 

    展开全文
  • 拉格朗日插值详解

    千次阅读 2021-04-29 21:05:50
    1 ≤ n ≤ 3000 1 \le n \le 3000 1≤n≤3000 Solution Part 1 拉格朗日插值,是解决一类给定点值求多项式问题的经典算法,由拉格朗日在 18 18 18 世纪提出。 简要来说,拉插通过一些较为巧妙的手段,将多个独立的...

    Part 1: Introduction

    Description

    存在一个 n n n 次多项式 F ( x ) F(x) F(x)。给定 n + 1 n+1 n+1 对满足 F ( a i ) = b i F(a_i)=b_i F(ai)=bi ( a i , b i ) (a_i,b_i) (ai,bi) 与一个数 k k k,你需要求出 F ( k ) F(k) F(k) 的值。

    1 ≤ n ≤ 3000 1 \le n \le 3000 1n3000

    Solution

    Part 1

    拉格朗日插值,是解决一类给定点值求多项式问题的经典算法,由拉格朗日在 18 18 18 世纪提出。

    简要来说,拉插通过一些较为巧妙的手段,将多个独立的多项式拼接在一起,从而凑出了所要求的多项式。

    具体地说,我们令 n = 2 n=2 n=2,三对点值分别为 ( 1 , 4 ) ( 2 , 9 ) ( 3 , 16 ) (1,4)(2,9)(3,16) (1,4)(2,9)(3,16)。拉格朗日插值的步骤如下:
    ①求出过 ( 1 , 4 ) ( 2 , 0 ) ( 3 , 0 ) (1,4)(2,0)(3,0) (1,4)(2,0)(3,0) 的多项式 G 1 ( x ) G_1(x) G1(x)
    ②求出过 ( 1 , 0 ) ( 2 , 9 ) ( 3 , 0 ) (1,0)(2,9)(3,0) (1,0)(2,9)(3,0) 的多项式 G 2 ( x ) G_2(x) G2(x)
    ③求出过 ( 1 , 0 ) ( 2 , 0 ) ( 3 , 16 ) (1,0)(2,0)(3,16) (1,0)(2,0)(3,16) 的多项式 G 3 ( x ) G_3(x) G3(x)

    不难发现, G 1 ( x ) + G 2 ( x ) + G 3 ( x ) = F ( x ) G_1(x)+G_2(x)+G_3(x)=F(x) G1(x)+G2(x)+G3(x)=F(x)

    现在考虑如何求出 G 1 ( x ) , G 2 ( x ) , G 3 ( x ) G_1(x),G_2(x),G_3(x) G1(x),G2(x),G3(x)。以 G 1 ( x ) G_1(x) G1(x) 为例。

    我们令 G 1 ′ ( x ) G'_1(x) G1(x) 为过 ( 1 , 1 ) ( 2 , 0 ) ( 3 , 0 ) (1,1)(2,0)(3,0) (1,1)(2,0)(3,0) 的多项式,先考虑如何构造出 G 1 ′ ( x ) G'_1(x) G1(x)。为了让 x = 2 , 3 x=2,3 x=2,3 对应的 y = F ( x ) y=F(x) y=F(x) 均为 0 0 0,我们令 ( x − 2 ) ( x − 3 ) (x-2)(x-3) (x2)(x3) G 1 ′ ( x ) G'_1(x) G1(x)因式;同时, x = 1 x=1 x=1 时为 1 1 1,我们可以让 ( x − 2 ) ( x − 3 ) (x-2)(x-3) (x2)(x3) 再除去 ( 1 − 2 ) × ( 1 − 3 ) (1-2) \times (1-3) (12)×(13),从而保证了 F ( 1 ) = 1 F(1)=1 F(1)=1

    综上所述, G 1 ′ ( x ) = ( x − 2 ) ( x − 3 ) ( 1 − 2 ) × ( 1 − 3 ) = ( x − 2 ) ( x − 3 ) 2 G'_1(x)=\frac {(x-2)(x-3)} {(1-2) \times (1-3)}=\frac {(x-2)(x-3)} {2} G1(x)=(12)×(13)(x2)(x3)=2(x2)(x3)

    同时,我们有 G 1 ( x ) = a 1 G 1 ′ ( x ) = ( x − 2 ) ( x − 3 ) 2 G_1(x)=a_1G'_1(x)=\frac {(x-2)(x-3)} {2} G1(x)=a1G1(x)=2(x2)(x3)。同理,不难得到 G 2 ( x ) , G 3 ( x ) G_2(x),G_3(x) G2(x),G3(x)

    如果你将 G 1 ( x ) , G 2 ( x ) , G 3 ( x ) G_1(x),G_2(x),G_3(x) G1(x),G2(x),G3(x) 加起来,你会恰好发现,它们的和为答案 F ( x ) = x 2 + 2 x + 1 F(x)=x^2+2x+1 F(x)=x2+2x+1

    Part 2

    Part 1 中,我们举了一个例子,下面我们需要得出一般的,形式化的公式。

    依照 Part 1,不难得出

    G i ′ ( x ) = ∏ j = 1 n [ j ≠ i ] ( x − a j ) × ∏ j = 1 n [ j ≠ i ] ( a i − a j ) G'_i(x)=\prod_{j=1}^n [j \neq i] (x-a_j) \times \prod_{j=1}^n [j \neq i] (a_i-a_j) Gi(x)=j=1n[j=i](xaj)×j=1n[j=i](aiaj) G i ( x ) = b i G ( x ) ,   F ( x ) = ∑ i = 1 n G i ( x ) G_i(x)=b_iG(x), \ F(x)=\sum_{i=1}^n G_i(x) Gi(x)=biG(x), F(x)=i=1nGi(x)

    从而,我们得到
    F ( x ) = ∑ i = 1 n b i   ∏ j = 1 n [ i ≠ j ] ( x − a j ) ∏ j = 1 n [ i ≠ j ] ( a i − a j ) F(x)=\sum_{i=1}^n b_i \ \frac {\prod_{j=1}^n [i \neq j] (x-a_j)} {\prod_{j=1}^n [i \neq j](a_i-a_j)} F(x)=i=1nbi j=1n[i=j](aiaj)j=1n[i=j](xaj)

    k k k 带入即可,时间复杂度 O ( n 2 ) O(n^2) O(n2)

    同时,若题目并不给定 k k k,而是让你求出 F ( x ) F(x) F(x) 的各项系数,也可以在 O ( n 2 ) O(n^2) O(n2) 的复杂度内轻松求出,由于较为简单,这里不再赘述。

    值得一提的是,存在一个快速插值做法,可以以 O ( n log ⁡ 2 n ) O(n \log^2 n) O(nlog2n) 的复杂度解决上述两个问题,但是它涉及到多点求值等较难内容,留给读者自行学习。其实就是我不会

    Part 2: Problems

    CF622F

    Description

    给定 n , k n,k n,k,求

    ( ∑ i = 1 n i k ) mod  ( 1 0 9 + 7 ) \left(\sum_{i=1}^n i^k \right) \text{mod}\ (10^9+7) (i=1nik)mod (109+7)

    1 ≤ n ≤ 1 0 9 , 1 ≤ k ≤ 1 0 6 1 \le n \le 10^9,1 \le k \le 10^6 1n109,1k106

    Solution

    算法一

    首先,我们思考几个较为简单的情况。

    k = 1 k=1 k=1 时,答案为 n ( n + 1 ) 2 = 1 2 n 2 + 1 2 n \frac {n(n+1)} {2}=\frac 1 2 n^2+\frac 1 2 n 2n(n+1)=21n2+21n
    k = 2 k=2 k=2 时,答案为 n ( n + 1 ) ( 2 n + 1 ) 6 = 1 3 n 3 + 1 2 n 2 + 1 6 n \frac {n(n+1)(2n+1)} {6}=\frac 1 3 n^3+\frac 1 2 n^2+\frac 1 6 n 6n(n+1)(2n+1)=31n3+21n2+61n
    k = 3 k=3 k=3 时,答案为 ( n ( n + 1 ) 2 ) 2 = 1 4 n 4 + 1 2 n 3 + 1 4 n 2 (\frac {n(n+1)} {2})^2=\frac 1 4 n^4+\frac 1 2 n^3 + \frac 1 4 n^2 (2n(n+1))2=41n4+21n3+41n2

    ⋯ ⋯ \cdots \cdots

    我们果断猜想,答案是一个关于 n n n k + 1 k+1 k+1 次多项式。

    于是,我们将 n = 1 , n = 2 , ⋯   , n = k + 2 n=1,n=2,\cdots,n=k+2 n=1,n=2,,n=k+2 带入,通过递推求出答案;最后,大力插值即可得到答案。

    时间复杂度 O ( k 2 ) O(k^2) O(k2)

    算法二

    观察插值的套路式

    F ( x ) = ∑ i = 1 n b i   ( ∏ j = 1 n [ i ≠ j ] ( x − a j ) ∏ j = 1 n [ i ≠ j ] ( a i − a j ) ) F(x)=\sum_{i=1}^n b_i \ \left(\frac {\prod_{j=1}^n [i \neq j] (x-a_j)} {\prod_{j=1}^n [i \neq j](a_i-a_j)}\right) F(x)=i=1nbi (j=1n[i=j](aiaj)j=1n[i=j](xaj))

    注意到,我们带入的点值是连续的,从 1 1 1 一直到 k + 2 k+2 k+2;从而,通过预处理,括号内的内容可以 O ( 1 ) O(1) O(1) 算出。

    时间复杂度 O ( k ) O(k) O(k) O ( k log ⁡ k ) O(k \log k) O(klogk) O ( k log ⁡ mod ) O(k \log \text{mod}) O(klogmod)

    Summary

    本题关键在于猜到答案是关于 n n n k + 2 k+2 k+2多项式

    这种思想非常重要,是拉格朗日使用的前提,并在下面被广泛使用。请读者挖掘自己敏锐的观察力

    CF995F

    Description

    给定 n n n 个点的树,点 1 1 1 为根。你需要给每个点安排一个 [ 1 , n ] [1,n] [1,n] 之前的权值 a i a_i ai,使得对于每个点 u u u,其任意孩子 v v v 均满足 a u ≥ a v a_u \ge a_v auav

    Solution

    算法一

    考虑 dp \text{dp} dp

    f i , j f_{i,j} fi,j 表示,目前看了以 i i i 为根的子树,且 a i = j a_i=j ai=j 时的方案数。
    g i , j g_{i,j} gi,j 表示,目前看了以 i i i 为根的子树,且 a i ≤ j a_i \le j aij 时的方案数。

    状态转移:

    f u , i = ∑ v g v , i g u , i = g u , i − 1 + f u , i f_{u,i}=\sum_{v} g_{v,i} \\ g_{u,i}=g_{u,i-1}+f_{u,i} fu,i=vgv,igu,i=gu,i1+fu,i

    时间复杂度 O ( n D ) O(nD) O(nD)

    算法二

    观察到,答案是一个关于 D D D n n n 次多项式。

    于是, f f f 的第二维只需要枚举到 n + 1 n+1 n+1。在 dp \text{dp} dp 结束后,拉插即可得到答案。

    时间复杂度 O ( n 2 ) O(n^2) O(n2)

    Summary

    你也许觉得题目太简单了。

    没事,下面的这题会让你满意的。

    P5469

    Description

    传送门

    Solution

    算法一

    考虑区间 dp \text{dp} dp

    f i , j , k f_{i,j,k} fi,j,k 表示, [ i , j ] [i,j] [i,j] 中的最大值 k k k 时的方案数。

    转移的时候,我们枚举一个属于 [ i , j ] [i,j] [i,j] 中的点 p p p,若满足 [ i , p ] [i,p] [i,p] [ p + 1 , j ] [p+1,j] [p+1,j] 两个非空区间的长度之差不超过 2 2 2,则进行转移。

    形式化地说,

    f i , j , k = ∑ p ,   ∣ ( j − p ) − ( p − i + 1 ) ∣ ≤ 2 ( ∑ x = 1 k f i , p , x ) ( ∑ x = 1 k − 1 f p + 1 , j , x ) f_{i,j,k}=\sum_{p,\ |(j-p)-(p-i+1)| \le 2} \left(\sum_{x=1}^k f_{i,p,x}\right) \left(\sum_{x=1}^{k-1} f_{p+1,j,x}\right) fi,j,k=p, (jp)(pi+1)2(x=1kfi,p,x)(x=1k1fp+1,j,x)

    前缀和优化e 。

    时间复杂度 O ( n 2 m ) O(n^2m) O(n2m),期望得分 35 35 35 分。

    算法二

    若我们采用记忆化搜索,可以发现:当 n = 300 n=300 n=300 时,搜索到的区间只有 2300 2300 2300 多个。从而,合法区间并不多,时间复杂度仅为 O ( 2300 × m ) O(2300 \times m) O(2300×m)

    期望得分 50 50 50 分。我就想到这里了

    算法三

    考虑当 ∀ i ∈ [ 1 , n ] \forall i \in [1,n] i[1,n] A i = 1 , B i = 1 0 9 A_i=1,B_i=10^9 Ai=1,Bi=109 时怎么做。

    这里有一个至关重要的观察—— f i , j , k f_{i,j,k} fi,j,k 是一个关于 k k k n + 1 n+1 n+1 次多项式。

    于是只需要将 k k k 枚举到 n + 1 n+1 n+1,所有转移结束后,拉插即可。

    时间复杂度 O ( n 3 ) O(n^3) O(n3),期望得分 60 60 60 分。

    算法四

    算法三的做法能不能扩展到一般情况呢?

    很可惜并不行。例如,当 A i = 3 , B i = 5 A_i=3,B_i=5 Ai=3,Bi=5 时, f i , i , k f_{i,i,k} fi,i,k 就不是一个关于 k k k 的多项式,因为 k = 1 / 2 k=1/2 k=1/2 f i , i , k = 0 f_{i,i,k}=0 fi,i,k=0

    于是果断猜测,这是一个分段多项式函数。段数与每段的多项式次数均为 O ( n ) O(n) O(n) 级别。

    令所有 [ A i , B i ] [A_i,B_i] [Ai,Bi] 均可以由 [ l 1 , r 1 ) [ l 2 , r 2 ) , ⋯   , [ l 2 n , r 2 n ) [l_1,r_1)[l_2,r_2),\cdots,[l_{2n},r_{2n}) [l1,r1)[l2,r2),,[l2n,r2n) 中的某些区间组成。我们从前往后对于每一个 [ l , r ] [l,r] [l,r],我们将 k k k 设置在范围 [ l , l + n ] [l,l+n] [l,l+n] 内并进行转移。

    注意到,这些区间并不是独立的,因为在 f i , j , k f_{i,j,k} fi,j,k 的转移过程中,需要 f i , p f_{i,p} fi,p f p + 1 , j f_{p+1,j} fp+1,j 的某处前缀和。于是,我们可以在第 x x x 轮的 dp \text{dp} dp 结束后,对于每个合法区间求出该处的前缀和,并拉插求出 r x r_x rx 处的前缀和。转移的时候,就可以 O ( 1 ) O(1) O(1) 调用了。

    总而言之,算法分为以下几个步骤:

    • 通过离散化求出 [ l 1 , r 1 ) [ l 2 , r 2 ) , ⋯   , [ l 2 n , r 2 n ) [l_1,r_1)[l_2,r_2),\cdots,[l_{2n},r_{2n}) [l1,r1)[l2,r2),,[l2n,r2n)。注意, ∀ i ∈ [ 1 , 2 n − 1 ] , r i + 1 = l i + 1 \forall i \in [1,2n-1],r_i+1=l_{i+1} i[1,2n1],ri+1=li+1

    • 枚举一个区间 [ l x , r x ] [l_x,r_x] [lx,rx],我们在 [ l x , l x + n ] [l_x,l_x+n] [lx,lx+n] 范围内做 dp \text{dp} dp

      • x ≠ 2 n x \neq 2n x=2n,枚举一个合法区间 [ L , R ] [L,R] [L,R],再枚举 k ∈ [ l x , r x ] k \in [l_x,r_x] k[lx,rx],求出 k , k + 1 , ⋯   , k + n k,k+1,\cdots,k+n k,k+1,,k+n 处的前缀和,并拉插求出 r x r_x rx 处的前缀和。

      • 若这是最后一个区间,我们直接在合法区间 [ 1 , n ] [1,n] [1,n] 处通过拉插求出答案。

    注意,枚举的区间共有 O ( n ) O(n) O(n) 个,并对于所有 O ( m ) O(m) O(m) 个合法区间,执行了 O ( n 2 ) O(n^2) O(n2) 的拉插与 O ( n ) O(n) O(n) 的转移。

    从而,复杂度为 O ( n 3 m ) O(n^3m) O(n3m),期望得分 75 75 75 分。

    算法五

    注意到,拉插时点值的横坐标连续,我们可以将拉插优化为 O ( n ) O(n) O(n)

    从而,复杂度为 O ( n 2 m ) O(n^2m) O(n2m),期望得分 [ 80 , 100 ] [80,100] [80,100] 分。

    Summary

    这是一道神仙题。

    首先,我们需要套路地想出朴素区间 dp \text{dp} dp,然后根据部分分的变化一步一步前进。在这个过程中,最关键的在于算法三,它需要关于多项式次数的敏锐观察。

    实际上,本题除了考察上述推导,也重点考察了你的卡常能力。作为一名良心出题人(洛谷主题库里面有我的题所以我是出题人),我虽然非常欣赏本题的推导,但是我依然要大声地喊出一句话,作为本篇文章的结尾:

    毒 瘤 ! \huge{毒瘤!}

    展开全文
  • 拉格朗日插值法

    2021-11-06 19:14:45
    (1)线性插值:对于两个插值: 满足以下条件: 直线的两式表示:
  • 浅谈拉格朗日插值

    千次阅读 2020-12-22 14:20:46
    拉格朗日插值法可以找到一个多项式,其恰好在各个观测的取到观测到的值。这样的多项式称为拉格朗日(插值)多项式。——百度百科通俗地说,拉格朗日插值法可以找出一个恰好经过直角坐标系内\(n\)个给定点的函数众所....
  • 《MATLAB实现拉格朗日插值》由会员分享,可在线阅读,更多相关《MATLAB实现拉格朗日插值(14页珍藏版)》请在人人文库网上搜索。1、实用标准文档文案大全数值分析上机报告题目:插值法学号:201014924姓名:靳会有一、...
  • %拉格朗日插值多项式 利用矩阵求解x=1:0.2:3;%已知数据x坐标向量:xy=sin(x);%已知数据x坐标向量:yx1=1.1:0.2:3.1;%插值的x坐标:x1L=zeros(11,11);%另L矩阵为0for i=1:11A=ones(10,1);%另A矩阵为10行1列的...
  • 【算法讲14:拉格朗日...但是需要 FFTFFTFFT 等知识,博主比较菜就只能搞搞入门的了 (哭) 基础的高斯消元法可以 O(n3)O(n^3)O(n3) 求解 nnn 阶多项式,但是貌似不够用呀 这时就出现了 O(n2)O(n^2)O(n2) 的拉格朗日
  • matlab 拉格朗日插值问题function f=Language(x,y,x0)%求已知数据拉格朗日差值多项式%已知数据的x坐标向量:x%已知数据的y坐标向量:y%插值的x坐标:x0%求得的拉格朗日插值多项式:f%x0处的插2016-08-08matlab...
  • 拉格朗日插值法是一个根据对求回原函数的算法,原理挺好懂的。原理和优化方法上面的大佬都讲得很好。其实主要就是这个式子:然后暴力算这个式子的话是每求一项f(k)的时间复杂度都是n^2。这个时间很不优秀,于是...
  • 插值-拉格朗日插值法

    2021-02-12 21:17:15
    朗格朗日插值法的定义原理一般地,若已知[]在互不相同 n+1 个[]处的函数值[]( 即该函数过[] 这n+1个),则可以考虑构造一个过这n+1 个的、次数不超过n的多项式[] ,使其满足: [] 要估计任一点ξ,ξ≠xi,i=0,1...
  • 《用MATLAB实现拉格朗日插值》由会员分享,可在线阅读,更多相关《用MATLAB实现拉格朗日插值(3页珍藏版)》请在人人文库网上搜索。1、用MATLAB实现拉格朗日插值1、作业内容:用MATLAB实现拉格朗日插值2、作业目的:1)...
  • 拉格朗日乘数法

    万次阅读 多人点赞 2017-12-26 16:48:50
    阅读目录 1. 拉格朗日乘数法的基本思想 2.... 3. 拉格朗日乘数法的基本形态 ... 拉格朗日乘数法(Lagrange Multiplier Method)之前听数学老师授课的时候就是一知半解,现在越发感觉拉格朗日乘数法应用的广泛性,...
  • 拉格朗日插值法(图文详解)

    千次阅读 2020-12-22 14:21:40
    假设任意两个不同的xj都互不相同,那么应用拉格朗日插值公式所得到的拉格朗日插值多项式为:其中每个为拉格朗日基本多项式(或称插值基函数),其表达式为:拉格朗日基本多项式的特点是在上取值为1,在其它的上取值...
  • 拉格朗日对偶问题

    2021-04-08 01:33:33
    在前文了解过拉格朗日乘数法后,进一步介绍拉格朗日对偶。 背景信息 在约束最优化问题中,常常利用拉格朗日对偶性(Lagrange duality)将原始问题转换为对偶问题,通过解对偶问题而得到原始问题的解。 拉格朗日...
  • matlab-拉格朗日插值法

    2021-04-25 14:45:03
    1、matlab 拉格朗日插值法 function f = Language(x,y,x0)%求已知数据拉格朗日插值多项式%已知数据的x坐标向量: x%已知数据的y坐标向量: y%插值的x坐标: x0%求得的拉格朗日插值多项式或在x0处的插值: ...
  • /**作者:KDF5000*功能:利用拉格朗日插值法求解近似值*时间:2013.4.15*/#include #include #include //存放插值节点struct Data{double x;double y;struct Data *next;};/***************************************...
  • 拉格朗日乘数法(Lagrange Multiplier Method)基本思想 作为一种优化算法,拉格朗日乘子法主要用于解决约束优化问题,它的基本思想就是通过引入拉格朗日乘子来将含有n个变量和k个约束条件的约束优化问题转化为含有...
  • 有:\[F(x) = \sum_{i=1}^{k+1}y_i\prod_{i\not ={j}}\dfrac{x-x_j}{x_i-x_j}\]正确性详见 拉格朗日插值。正确性将 \(k + 1\) 个值代入即可检验。当 \(x=x_k\) 时,对 \(i\) 进行讨论:当 \(i\not =...
  • 拉格朗日求解条件极值

    千次阅读 2021-04-01 21:19:47
    拉格朗日求解条件极值目录一、问题描述二、手工解三、Python求解四、总结与参考资料1、总结2、参考资料 目录 一、问题描述 用拉格朗日方法求解,手工求解和编程求解 二、手工解 拉格朗日函数: F(x,λ)=f(x)+∑j=0...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,541
精华内容 13,016
关键字:

拉格朗日点