• 牛顿迭代快速求解定义域为多项式的函数零点


    牛顿迭代求解定义域为多项式的函数零点

    (笔者习惯:(f(x))表示函数,(F(x),G(x))表示多项式)

    前言

    原来的牛顿迭代是通过在函数上不断作切线来快速求出一个多项式函数近似的零点

    在编程竞赛中,计数类问题我们经常遇到一个(可能是无穷的)数列(a_n),(a_n)可以由他自己通过一定的转移得到

    对于这类问题,把(a_n)视为一个多项式,相当于是用多项式之间的运算表示出它自己,如(F(x)=G(x)F(x)^2+A(x))

    这样的转移式子可以通过移项变成一个类似求函数零点的形式

    本文所谈的问题是对于一个定义在多项式域上的函数(函数本身不需要是多项式),求出它的零点

    当然零点也是一个多项式

    (x)可以是一个多项式(F(x)),并且函数的系数也可以是多项式(A(x))

    下面讲如何求出这个(f(F(x)))的零点

    用途

    对于一个定义域是多项式的函数(f(F(x))),求出它的零点

    零点很有可能是一个无穷次数的多项式,所以我们只需要求它前(n)项的值

    (f(F(x)))是一个关于(F(x))的函数

    (f(F(x))=F(x)^2-G(x)=0)

    这里我们必须分清楚的点是

    1.方程的元是(F(x))

    2.(G(x))是方程的常数项

    实际上,这个(f(F(x)))的意义类似于(g(x)=x^2+c ,xinR),其中(c)是常数

    [ ]

    前置知识1

    前置知识2(只需要会求逆就可以了)

    [ ]

    牛顿迭代

    由于求解的是前(n)项的值,所以考虑倍增

    边界条件视具体情况而定

    设已经求出了(G(x))满足(f(G(x))=0 pmod {x^frac{n}{2}})

    (下文中由于(F(x),G(x))太长,全部用(F,G)替换)

    (会多项式求逆的人都知道)((F-G)^2=0 pmod {x^n})

    带入(f(F))(G)上的泰勒展开

    [f(F)=sum_{i=0}^{infty}frac{f^{(i)}(G)}{i!}(F-G)^i ]

    其中(f^{(i)})表示(f(x))(i)阶导数

    (ecause (F-G)^2=0 pmod {x^n})

    ( herefore (F-G)^i=0 pmod {x^n},i>1)

    ( herefore f(F)=f(G)+f'(G)(F-G)=0)

    ( herefore F=G-frac{f(G)}{f'(G)}) (可以直接背这个式子)

    这个算法的复杂度取决于是否能快速求出(f(G),f'(G))

    应用:多项式exp

  • 相关阅读:
    php基础之简单运算
    选择平淡
    php基础之控制结构
    关于三元运算符的初步应用及理解
    VS2015 遇到异常。这可能是由某个扩展导致的
    C#中如何去除窗体默认的关闭按钮
    (转载)SQL基础--> 约束(CONSTRAINT)
    SQL Server安装后设置SQL Server验证登录
    附加数据库 对于 ""失败,无法打开物理文件 操作系统错误 5:拒绝访问 SQL Sever
    SQL Server数据库操作(二)
  • 原文地址:https://www.cnblogs.com/chasedeath/p/12859142.html
Copyright © 2020-2023  润新知