精华内容
下载资源
问答
  • 多项式秦九韶算法

    千次阅读 2021-01-05 22:20:00
    1.多项式的秦九韶算法 设给定nnn次多项式p(x)=a0xn+a1xn−1+⋯+an−1x+an,a0≠0,p(x)=a_0x^n+a_1x^{n-1}+\cdots+a_{n-1}x+a_n,\quad a_0\neq 0,p(x)=a0​xn+a1​xn−1+⋯+an−1​x+an​,a0​​=0, 求x∗处的...

    1.多项式求值的秦九韶算法

    设给定 n n n次多项式 p ( x ) = a 0 x n + a 1 x n − 1 + ⋯ + a n − 1 x + a n , a 0 ≠ 0 , p(x)=a_0x^n+a_1x^{n-1}+\cdots+a_{n-1}x+a_n,\quad a_0\neq 0, p(x)=a0xn+a1xn1++an1x+an,a0=0,
    x ∗ 处 的 值 p ( x ∗ ) . 若 直 接 计 算 每 一 项 a i x n − i 再 相 加 , 共 需 要 x^*处的值p(x^*).若直接计算每一项a_ix^{n-i}再相加,共需要 xp(x).aixni,
    ∑ i = 0 n ( n − i ) = 1 + 2 + ⋯ + n = n ( n + 1 ) 2 = O ( n 2 ) \sum_{i = 0}^{n}(n-i)=1+2+\cdots+n=\frac{n(n+1)}{2}=O(n^2) i=0n(ni)=1+2++n=2n(n+1)=O(n2)次乘法, n n n次加法.若采用
    p ( x ) = ( ⋯ ( a 0 x + a 1 ) x + ⋯ + a n − 1 ) x + a n , p(x)=(\cdots(a_0x+a_1)x+\cdots+a_{n-1})x+a_n, p(x)=((a0x+a1)x++an1)x+an,它可表示为
    { b 0 = a 0 , b i = b i − 1 x ∗ + a i , i = 1 , 2 , … , n , \begin{cases} b_0=a_0,\\ b_i=b_{i-1}x^*+a_i,i=1,2,\ldots,n, \end{cases} {b0=a0,bi=bi1x+ai,i=1,2,,n,
    b n = p ( x ∗ ) 即 为 所 求 . b_n=p(x^*)即为所求. bn=p(x).此算法称为秦九韶算法,用它计算 n 次 多 项 式 p ( x ) n次多项式p(x) np(x)的值只用 n 次 乘 法 和 n 次 加 法 n次乘法和n次加法 nn
    乘 法 次 数 由 O ( n 2 ) 降 为 O ( n ) , 且 只 用 n + 2 个 存 储 单 元 , 国 外 称 此 算 法 为 H o r n e r 算 法 乘法次数由O(n^2)降为O(n),且只用n+2个存储单元,国外称此算法为Horner算法 O(n2)O(n),n+2Horner

    2.Python实现秦九韶算法

    import numpy as np
    from sympy.abc import x
    
    
    def polynomial(coefficient_array: np.ndarray, is_ascending_order: bool = False):
        """
        构造指定系数的多项式
        :param coefficient_array: 多项式系数数组
        :param is_ascending_order: 多项式排列顺序
        :return: 多项式
        """
        degree = coefficient_array.shape[0]
        if is_ascending_order:
            coefficient_array = coefficient_array[::-1]
        # default,descending order arrangement
        p_x = coefficient_array[-1]
        for i in range(degree - 1, 0, -1):
            p_x += coefficient_array[degree - i - 1] * pow(x, i)
        return p_x
    
    
    def qin_jiu_shao(coefficient_array: np.ndarray, value, is_ascending_order: bool = False):
        """
        多项式求值的秦九韶算法,即Horner算法
        :param coefficient_array: 多项式系数数组
        :param value: 自变量的值
        :param is_ascending_order: 多项式排列顺序
        :return: the value of polynomial
        example:
        2*x**4 - 3*x**2 + 3*x - 4=((((2x+0)x-3)x+3)x-4)
        3*x**5 - 2*x**3 + x + 7=(((((3x+0)x-2)x+0)x+1)x+7)
        """
        if is_ascending_order:
            coefficient_array = coefficient_array[::-1]
        degree = coefficient_array.shape[0]
        b = coefficient_array[0]
        for i in range(1, degree):
            b = b * value + coefficient_array[i]
        return b
    

    3.多项式求值测试

    if __name__ == '__main__':
        # 测试成功,来源详见李庆扬数值分析第5版P14,e.g.11
        # 降幂排列
        coefficient0 = np.array([2, 0, -3, 3, -4])
        print(polynomial(coefficient0))
        print(qin_jiu_shao(coefficient0, -2))
        # 升幂排列
        coefficient1 = np.array([-4, 3, -3, 0, 2])
        print(polynomial(coefficient1, is_ascending_order=True))
        print(qin_jiu_shao(coefficient1, -2, is_ascending_order=True))
        # 测试成功,来源详见李庆扬数值分析第5版P20,e.x.14
        # 降幂排列
        coefficient2 = np.array([3, 0, -2, 0, 1, 7])
        print(polynomial(coefficient2))
        print(qin_jiu_shao(coefficient2, 3))
        # 升幂排列
        coefficient3 = np.array([7, 1, 0, -2, 0, 3])
        print(polynomial(coefficient3, is_ascending_order=True))
        print(qin_jiu_shao(coefficient3, 3, is_ascending_order=True))
    

    4.求值运行结果

    在这里插入图片描述

    展开全文
  • 本章涉及知识:1、多项式乘法的时间复杂度2、多项式表示:系数3、多项式表示点值4、复数的表示5、单位复数根6、单位复数根的性质—消去引理7、单位复数根的性质—折半引理8、离散傅里叶变换:DFT和IDFT9、...

    本章涉及知识点:

    1、多项式乘法的时间复杂度

    2、多项式的表示:系数

    3、多项式的表示:点值

    4、复数的表示

    5、单位复数根

    6、单位复数根的性质—消去引理

    7、单位复数根的性质—折半引理

    8、离散傅里叶变换:DFT和IDFT

    9、快速傅里叶变换:FFT

    10、FFT求解多项式乘法的步骤

    11、python编程实战FFT大数乘法

    12、结果分析

    一、多项式乘法的时间复杂度

    数学中,我们可以将任意一个n位的数字写为一个n-1次多项式,如456可以写为

    f522b6ee93fd

    数字转为多项式

    即可抽象定义出以x为变量的多项式函数A(x)

    f522b6ee93fd

    多项式函数

    其中aj表示:长度为N-1位数字的第j为数字

    例如要计算456 * 123 = ?,则我们用多项式A(x)和B(x)来分别表示其各自的数字,C(x)表示两个多项式的乘积

    f522b6ee93fd

    两个数字的多项式

    由乘法的运算规则,两个数的每一位数字都要与另一个数的每一位相乘,最后相加同一位上所有的数字,得到乘积中该位的数字,即

    f522b6ee93fd

    多项式乘法

    将x=10为基带入结果,即可以得到456 * 123 = 4 * 10**4 + 13 * 10**3 + 28 * 10**2 + 27 * 10 + 18 = 56088

    我们可以归纳出乘积C(x)的每一位数字的计算关系为

    f522b6ee93fd

    乘积数位的计算

    其中cj表示:乘积数中的第j位的数字

    则乘积多项式C(x)可以写为

    f522b6ee93fd

    乘积多项式

    至此我们可以看到,由于受限于乘法运算自身的规则,计算两个多项式乘积(将数字转换为多项式)的时间复杂度为:

    math?formula=O(n%5E%7B2%7D),当n很大的时候复杂度将非常高

    那么需要研究的问题就是:有没有方法可以高效的提高多项式乘法复杂度呢?

    二、多项式的表示:系数

    为了降低多项式乘法的复杂度,我们首先需要了解几个数学知识

    从多项式函数的定义,我们将所有系数视为系数向量,而由全部系数组成的向量a叫做该多项式的系数表达

    f522b6ee93fd

    系数表达

    PS:乘积多项式C(x)的系数向量cj,也称输入向量a和b的卷积,记为

    f522b6ee93fd

    卷积运算

    从之前的分析可知,要计算出乘积C(x)的每一个系数向量cj,需要的时间复杂度为

    math?formula=O(n%5E%7B2%7D)

    三、多项式的表示:点值

    我们任意选取n个不同的自变量x带入多项式函数A(x)进行求值运算,将得到n个不同数值的y,即

    f522b6ee93fd

    求值运算

    则多项式的点值表达就是由这n个数值点组成的集合

    f522b6ee93fd

    点值表达

    因为可以选取任意n个不同点所构成的集合,所有一个多项式可以有很多不同的点值表达

    我们把任意n个点构成的集合叫做点值表达的基

    从点值表达的基入手,选取适当的xk来优化多项式乘法效率,为此,我们选取单位复数根作为多项式的基

    四、复数的表示

    复数的定义:设a,b为实数,则形如

    math?formula=z%20%3D%20a%20%2B%20bi的数称为复数,其中a称为实部,b称为虚部

    PS:当a=0时,复数为纯虚数;当b=0时,复数可视为实数

    将复数的实部与虚部的平方和的正平方根值称为该复数的模,即

    f522b6ee93fd

    复数的模

    五、单位复数根

    任意一个复数w,其n次幂的结果为1,就称复数w是n次单位复数根,即

    f522b6ee93fd

    n次单位复数根

    可以看到,n次单位复数根有n个,其几何意义为:n个单位复数根均匀的分布在以复平面原点为圆心的单位圆上

    f522b6ee93fd

    n次单位复数根的几何意义

    在几何意义的单位圆中,我们将圆周角

    math?formula=2%5Cpi均分成n份,则

    math?formula=%5Cfrac%7B2%5Cpi%7D%7Bn%7D叫做单位根的幅角

    由欧拉公式得

    f522b6ee93fd

    欧拉公式

    我们定义

    math?formula=w_%7Bn%7D表示一个n次单位根,则

    f522b6ee93fd

    主n次单位根

    math?formula=w_%7Bn%7D又被称为主n次单位根,而其余

    math?formula=w_%7Bn%7D%5E%7B1%7D

    math?formula=w_%7Bn%7D%5E%7B2%7D等叫做n次单位根的幂次,记为:

    math?formula=w_%7Bn%7D%5E%7Bk%7D,则

    f522b6ee93fd

    n次单位根的幂次

    可以很容易知道

    f522b6ee93fd

    n次单位根的性质

    下面我们证明n次单位根的两个性质

    六、单位复数根的性质—消去引理

    设d>0为任何一个整数,则

    f522b6ee93fd

    消去引理

    七、单位复数根的性质—折半引理

    f522b6ee93fd

    折半引理

    则可以得到

    f522b6ee93fd

    折半引理

    至此,可以看到通过消去和折半引理,我们将n的规模降低到了原来的一半

    八、离散傅里叶变换:DFT和IDFT

    回顾之前我们的多项式函数

    f522b6ee93fd

    多项式函数

    我们将n次单位根的幂次项:

    math?formula=w_%7Bn%7D%5E%7B0%7D%EF%BC%8Cw_%7Bn%7D%5E%7B1%7D%EF%BC%8Cw_%7Bn%7D%5E%7B2%7D%EF%BC%8C...%EF%BC%8Cw_%7Bn%7D%5E%7Bn-1%7D依次带入A(x),则得到

    f522b6ee93fd

    离散傅里叶正变换

    记向量

    math?formula=y%20%3D%20(y_%7B0%7D%2C%20y_%7B1%7D%2C...%2C%20y_%7Bn-1%7D)是系数向量

    math?formula=a%20%3D%20(a_%7B0%7D%2C%20a_%7B1%7D%2C...%2C%20a_%7Bn-1%7D)的离散傅里叶变换,也称离散傅里叶正变换(DFT)

    则对应的离散傅里叶逆变换(IDFT)为

    f522b6ee93fd

    离散傅里叶逆变换可以看到:

    (1)DFT对应着多项式求值

    (2)IDFT对应着插值,即求多项式的系数

    九、快速傅里叶变换:FFT

    由DFT定义可知,将

    math?formula=w_%7Bn%7D%5E%7B0%7D%EF%BC%8Cw_%7Bn%7D%5E%7B1%7D%EF%BC%8Cw_%7Bn%7D%5E%7B2%7D%EF%BC%8C...%EF%BC%8Cw_%7Bn%7D%5E%7Bn-1%7D全部依次带入A(x)计算出多项式的时间复杂度仍然是

    math?formula=O(n%5E%7B2%7D)

    此时我们就需要利用之前所讲的n次单位复数根的知识,将A(x)中的偶数下标和奇数下标的系数,分别用两个新的多项式A1(x)和A2(x)来表示,即

    f522b6ee93fd

    偶数下标的多项式

    f522b6ee93fd

    奇数下标的多项式

    注意:A(x)的次数界为n,A1(x)的次数界为n/2,A2(x)的次数界也为n/2

    则可以得到A(x)和A1(x)、A2(x)的关系为

    f522b6ee93fd

    多项式函数关系

    我们将

    math?formula=x%3Dw_%7Bn%7D%5E%7Bk%7D带入得,其中

    math?formula=k%3D0%2C1%2C2%2C...%2C%5Cfrac%7Bn%7D%7B2%7D%20-%201

    f522b6ee93fd

    快速傅里叶变换1

    至此,我们就得到了在

    math?formula=%5B0%2C%20%5Cfrac%7Bn%7D%7B2%7D%20-%201%5D之间

    math?formula=w_%7Bn%7D%5E%7Bk%7D的所有求值

    下面还需要计算

    math?formula=%5B%5Cfrac%7Bn%7D%7B2%7D%20%2C%20n-1%5D之间的

    math?formula=w_%7Bn%7D%5E%7Bk%7D的值,根据折半引理,我们将

    math?formula=x%20%3D%20%20w_%7Bn%7D%5E%7Bk%20%2B%20%5Cfrac%7Bn%7D%7B2%7D%7D带入得

    f522b6ee93fd

    快速傅里叶变换2

    至此,我们就得到了

    math?formula=%5B%5Cfrac%7Bn%7D%7B2%7D%20%2C%20n-1%5D之间

    math?formula=w_%7Bn%7D%5E%7Bk%7D的所有求值观察上面两个式子,不难发现:

    (1)

    math?formula=%0AA(w_%7Bn%7D%5E%7Bk%7D)%20

    math?formula=A(w_%7Bn%7D%5E%7Bk%20%2B%20%5Cfrac%7Bn%7D%7B2%7D%7D)%20的计算式子里只有一个常数项互为相反数

    (2)在

    math?formula=%5B0%2C%20%5Cfrac%7Bn%7D%7B2%7D%20-%201%5D之间枚举出

    math?formula=A(w_%7Bn%7D%5E%7Bk%7D)%20后,就可以在

    math?formula=O(1)的时间里得到

    math?formula=%5B%5Cfrac%7Bn%7D%7B2%7D%20%2C%20n-1%5D

    math?formula=A(w_%7Bn%7D%5E%7Bk%20%2B%20%5Cfrac%7Bn%7D%7B2%7D%7D)%20

    (3)原问题的规模缩小了一半(分治法的思想)

    至此,我们利用数学中n次单位复数根的性质,将DFT优化为FFT(快速傅里叶正变换),即

    f522b6ee93fd

    快速傅里叶正变换

    十、FFT求解多项式乘法的步骤

    通过以上的研究,我们可以总结出使用FFT计算多项式乘法的时间复杂度

    f522b6ee93fd

    FFT计算多项式乘法的时间复杂度

    FFT利用n次单位复数根和分治法的思想,将多项式乘法的时间复杂度由

    math?formula=O(n%5E%7B2%7D)降低到了

    math?formula=O(n%5Clg%20n)

    最后我们可以总结出求解多项式乘法的高效算法步骤为:(1)加倍次数界:由分治法的思想,将两个多项式的次数界补全为2的幂次

    (2)求值:通过FFT计算出两个多项式的点值表达,即2n次单位复数根的多项式函数取值

    (3)逐点相乘:将两个多项式的点值依次相乘,得到相乘结果的点值

    (4)插值:通过IDFT计算相乘结果的点值,得到相乘结果的每一个系数

    十一、python编程实战FFT大数乘法

    f522b6ee93fd

    计算离散傅里叶正变换

    f522b6ee93fd

    计算离散傅里叶逆变换

    f522b6ee93fd

    FFT

    f522b6ee93fd

    IFFT

    f522b6ee93fd

    使用矩阵乘法的DFT和FFT

    十二、结果分析

    我们随便用两个386位和422位的整数,进行下面实验比较计算乘法的时间消耗(1)不使用矩阵乘法的离散傅里叶变换DFT

    (2)使用矩阵乘法的离散傅里叶变换DFT

    (3)使用矩阵乘法的快速傅里叶变换FFT

    (4)直接使用numpy封装的FFT

    运行代码,实验结果如下

    f522b6ee93fd

    结果分析

    至此,我们可以总结出(1)FFT采用分治算法的思想,利用数学中n次单位复数根的性质,将时域转化为频域,再到频域转化为时域,非常高效的提高了多项式乘法效率!

    (2)我们根据数学理论一步步封装的FFT和numpy封装的FFT性能上非常接近

    展开全文
  • matlab多项式代入求

    2021-05-06 01:10:08
    Matlab多项式运算无论是在线性代数中,还是信号处理、自动控制等理论 中,多项式运算都有着十分重要的地位,因此,MATLAB 为多项式的操作提供了相应的函数库polyfun; Matlab 多项式运算与方程求根 ? Matlab的.........

    Matlab 多项式运算与方程求根 ? Matlab多项式运算无论是在线性代数中,还是信号处理、自动控制等理论 中,多项式运算都有着十分重要的地位,因此,MATLAB 为多项式的操作提供了相应的函数库polyfun; Matlab 多项式运算与方程求根 ? Matlab的......

    Matlab输入输出格式及多项式函数 Matlab输入及输出格式在运算式中常需要...

    (x):超越正弦函数 asinh(x):反超越正弦 cosh(x):超越余弦函数 acosh(x):反超越馀弦函 数 tanh(x):超越正切函数 函数 atanh(x):反超越正切函数 Matlab多项式函数 多项式常被用来模拟一个物理现象的解析函数,之所以采用多项式,是......

    matlab实验五多项式和符号运算_其它_工作范文_实用文档。matlab 实用标准文案实验五:Matlab 多项式和符号运算一、实验目的 1.掌握 Matlab 多项式的运算。 2.了解符号运算。二、实验内容 1.将多项式 P(x) ? (x ? 2)(x ? 3)(x ......

    Matlab多项式拟合_数学_自然科学_专业资料。MATLAB 学习--多项式拟...

    数学实验 多项式及相关运算 主要内容 多项式基本运算 多项式插值拟合 Matlab 多项式基本运算 多项式构造 Matlab 中多项式的表示方法 在 Matlab 中,n 次多项式是用一个长度为 n+1的向量来 表示,缺少的幂次项系数为 0。 p( x) an x......

    命令如下: P=[1]; Q=[1,0,5]; [p,q]=polyder(P,Q) 6.5.3 多项式的求值 MATLAB提供了两种求多项式值的函数:polyval与 polyvalm,它们的输入参数均为多项式系数向量P 和自变量x。两者的区别在于前者是代数多项式求 值,而后......

    第6 章 MATLAB 数 据分析与多项式计算_习题答案 精品资料第 6 章 MATLAB 数据分析与多项式计算 习题 6 一、选择题 1.设 A=[1,2,3,4,5;3,4,5,6,7],则 min(max(A))的值是( )。B A.1 B.3 C.5 D.7 2.已知 ......

    Matlab 的应用-多项式函数及多项式拟合所谓曲线拟合是指给定平面上的 n 个点(xi,yi),i=1,2,….,n,找出一条曲线 使之与这些点相当吻合, 这个过程称之为曲线拟合。最常见的曲线拟合是使用多 项式来作拟合曲线。曲线拟合最常用的......

    Matlab的应用-多项式函数及多项式拟合_理学_高等教育_教育专区。Matlab的应用-多项式函数及多项式拟合 Matlab 的应用 多项式函数及多项式拟合 的应用-多项式函数及多项式拟合本节将向大家简要介绍 matlab 在多项式处理方面的应用。 多项式函数......

    ? 多项式的乘法实际上是多项式系数向量之间的卷 积运算,可以通过 MATLAB 中的卷积函数 conv 来完成。 ? 多项式的除法为乘法的逆运算,可以通过反卷积 函数 deconv 来实现。 4. polyval: 可用命令polyval计算多项式的值。 4 3 2 y ......

    Matlab 多项式插值与曲线拟合一、 基本统计处理 1、查取最大值 MAX 函...

    matlab实验五多项式和符号运算_数学_初中教育_教育专区。实验五:Matlab 多项式和符号运算一、实验目的 1.掌握 Matlab 多项式的运算。 2.了解符号运算。二、实验内容 1.将多项式 P(x) (x 2)(x 3)(x 7)(x 1) ......

    第5章 MATLAB数据分析与多项式计算 本章要点 ? ? ? ? MATLAB数据统计处理 MATLAB数据插值与曲线拟合 MATLAB离散傅立叶变换 MATLAB多项式计算 5.1 数据统计处理 5.1.1 最大值和最小值 MATLAB提供的求数据序列的最大值和最小值的......

    (x):超越正弦函数 asinh(x):反超越正弦 cosh(x):超越余弦函数 acosh(x):反超越馀弦函 数 tanh(x):超越正切函数 函数 atanh(x):反超越正切函数 Matlab多项式函数 多项式常被用来模拟一个物理现象的解析函数,之所以采用多项式,是......

    MATLAB的数值计算—— matlab 具有出色的数值计 算能力,占据世界上数值计算软 件的主导地位 多项式运算 matlab语言把多项式表达成一个行量, 该向量中的元素是按多项式降幂排的。 f(x)=anxn+an-1xn-1+……+loa0 可用行向量 p=[......

    第3章 matlab数值运算基础 3.1 多项式 3.2 数据分析 3.3 数值插值与曲线拟合 3.4 傅立叶变换 3.5 线性代数 3.1.1多项式的创建 matlab提供创建多项式的命令函数为 poly2sym,他的调用格式: r = poly2sym(c) r = poly2sym(c......

    MATLAB多项式绘图的实例,function写法实例_数学_自然科学_专业资料 暂无评价|0人阅读|0次下载|举报文档 MATLAB多项式绘图的实例,function写法实例_数学_自然科学_专业资料。function parabola(a,b,c) %二次函数曲线 %a、b、c:二次项......

    matlab多项式拟合_数学_自然科学_专业资料。.. matlab_最小二乘法...

    matlab 多项式曲线拟合考虑如下 x-y 一组实验数据: x=[1, 2, ...

    展开全文
  • 1 f(x)=a_0+a_1x_1+a_2x_2+...+a_{n-1}x_{n-1} f(x)=a0​+a1​x1​+a2​x2​+...+an−1​xn−1​ 点表示法 任取n个不同的x的, ( x i , f ( x i ) ) (x_i,f(x_i)) (xi​,f(xi​))也能唯一表示一个n-1阶多项式 证明...

    卷积

    向量 a ⃗ \vec{a} a ={ a 0 , a 1 , . . . , a n − 1 a_0,a_1,...,a_{n-1} a0,a1,...,an1 };
    向量 b ⃗ \vec{b} b = { b 0 , b 1 , . . . , b n − 1 b_0,b_1,...,b_{n-1} b0,b1,...,bn1 };
    a ⃗ ∗ b ⃗ \vec{a}*\vec{b} a b = c ⃗ \vec{c} c
    ( a 0 b 0 a 1 b 0 . . . a n − 1 b 0 a 0 b 1 a 1 b 1 . . . a n − 1 b 1 a 0 b 2 a 1 b 2 . . . a n − 1 b 2 ⋮ ⋱ a 0 b n − 1 a 1 b n − 1 . . . a n − 1 b n − 1 ) \begin{pmatrix} a_0b_0&a_1b_0 &...&a_{n-1}b_0\\ a_0b_1&a_1b_1 &...&a_{n-1}b_1\\ a_0b_2&a_1b_2 &...&a_{n-1}b_2\\ \vdots & &\ddots\\ a_0b_{n-1}&a_1b_{n-1} &...&a_{n-1}b_{n-1}\\ \end{pmatrix} a0b0a0b1a0b2a0bn1a1b0a1b1a1b2a1bn1............an1b0an1b1an1b2an1bn1
    c ⃗ \vec{c} c 中的元素为 c k c_k ck ∑ i + j = k a i b j \sum_{i+j=k} a_ib_j i+j=kaibj

    多项式的两种表示方法

    系数表示法

    f ( x ) = a 0 + a 1 x 1 + a 2 x 2 + . . . + a n − 1 x n − 1 f(x)=a_0+a_1x_1+a_2x_2+...+a_{n-1}x_{n-1} f(x)=a0+a1x1+a2x2+...+an1xn1

    点表示法

    任取n个不同的x的值, ( x i , f ( x i ) ) (x_i,f(x_i)) (xi,f(xi))也能唯一表示一个n-1阶多项式
    证明

    ( 1 x 0 1 . . . x 0 n − 1 1 x 1 1 . . . x 1 n − 1 1 x 2 1 . . . x 2 n − 1 ⋮ ⋱ 1 x n − 1 1 . . . x n − 1 n − 1 ) ∗ ( c 0 c 1 c 2 ⋮ c n − 1 ) = ( f ( x 0 ) f ( x 1 ) f ( x 2 ) ⋮ f ( x n − 1 ) ) \begin{pmatrix} 1&x_0^1 &...&x_0^{n-1}\\ 1&x_1^1 &...&x_1^{n-1}\\ 1&x_2^1 &...&x_2^{n-1}\\ \vdots & &\ddots\\ 1&x_{n-1}^1 &...&x_{n-1}^{n-1}\\ \end{pmatrix}* \begin{pmatrix} c_0\\c_1\\c_2\\\vdots \\c_{n-1} \end{pmatrix}=\begin{pmatrix} f(x_0)\\f(x_1)\\f(x_2)\\\vdots \\f(x_{n-1}) \end{pmatrix} 1111x01x11x21xn11............x0n1x1n1x2n1xn1n1c0c1c2cn1=f(x0)f(x1)f(x2)f(xn1)

    从系数表示法到点表示法

    普通方法

    f ( x ) = a 0 + a 1 x 1 + a 2 x 2 + . . . + a n − 1 x n − 1 f(x)=a_0+a_1x^1+a_2x^2+...+a_{n-1}x^{n-1} f(x)=a0+a1x1+a2x2+...+an1xn1;
    t m p 1 = 0 ; t m p 2 = t m p 1 ∗ x i + a n − 1 t m p 3 = t m p 2 ∗ x i + a n − 2 ⋮ f ( x i ) = t m p n tmp1 = 0;\\ tmp2 = tmp1 *x_i+a_{n-1}\\ tmp3=tmp2*x_i+a_{n-2}\\ \vdots\\ f(x_i)=tmp\mathbf{n} tmp1=0;tmp2=tmp1xi+an1tmp3=tmp2xi+an2f(xi)=tmpn
    每求一个值的复杂度为 n n n;求n个值的复杂度就为 n 2 n^2 n2

    f f t fft fft变换

    其复杂度为 n log ⁡ n n\log{n} nlogn
    f ( x ) = a 0 + a 1 x 1 + a 2 x 2 + . . . + a n − 1 x n − 1 f(x)=a_0+a_1x^1+a_2x^2+...+a_{n-1}x^{n-1} f(x)=a0+a1x1+a2x2+...+an1xn1;
    将偶数项拿出来加上将奇数项拿出来并提出一个公因式可得下式
    f ( x ) = f e v e n ′ ( x 2 ) + x f o d d ′ ( x 2 ) f(x)=f^{'}_{even}(x^2)+xf^{'}_{odd}(x^2) f(x)=feven(x2)+xfodd(x2)
    采用分治算法递归划分下去
    T ( n ) = 2 T ( n / 2 ) + O ( 1 ) T(n)=2T(n/2)+O(1) T(n)=2T(n/2)+O(1)由主定理得其复杂度为 log ⁡ ( n ) \log(n) log(n)
    故其总复杂度为 n log ⁡ ( n ) n\log(n) nlog(n)

    fft如何选取n个值

    答:选择所有 1 1 1 n n n次方根,这里对 n n n的值有限制,原因,2次方根为 ± 1 \pm1 ±1,4次方根为 [ ± 1 , ± i ] [\pm1,\pm i] [±1,±i],而3次方根就无法写出3个解。

    从点表示法回到系数表示法

    n次方根的数学特性

    1. w n k = c o s ( k 2 π n ) + i s i n ( k 2 π n ) w_n^k=cos(k\frac{2\pi}{n})+isin(k\frac{2\pi}{n}) wnk=cos(kn2π)+isin(kn2π)
    2. w n k = − w n k + n 2 w_n^k=-w_n^{k+\frac{n}{2}} wnk=wnk+2n
    3. w 2 n 2 k = w n k w_{2n}^{2k}=w_{n}^{k} w2n2k=wnk

    f ( x ) = f e v e n ′ ( x 2 ) + x f o d d ′ ( x 2 ) f(x)=f^{'}_{even}(x^2)+xf^{'}_{odd}(x^2) f(x)=feven(x2)+xfodd(x2)

    第二点可以利用
    f ′ ( ( w n k ) 2 ) = f ′ ( ( w n k + n 2 ) 2 ) f'((w_n^k)^2)=f'((w_n^{k+\frac{n}{2}})^2)\\ f((wnk)2)=f((wnk+2n)2)
    第三点可以利用起来
    f ′ ( ( w n k ) 2 ) = f ′ ( w n 2 k ) f'((w_n^k)^2)=f'(w_{\frac{n}{2}}^k) f((wnk)2)=f(w2nk)
    故只用求 [ 0 , n 2 ] [0 ,\frac{n}{2}] [0,2n] f e v e n ′ 和 f o d d ′ f'_{even}和f'_{odd} fevenfodd,就可以求出另一半 [ n 2 , n − 1 ] [\frac{n}{2},n-1] [2n,n1]

    g ( x ) = c 0 + c 1 x 1 + c 2 x 2 + . . . + c n − 1 x n − 1 g(x)=c_0+c_1x^1+c_2x^2+...+c_{n-1}x^{n-1} g(x)=c0+c1x1+c2x2+...+cn1xn1;其中
    c i = f ( x i ) c_i=f(x_i) ci=f(xi)

    c k = ∑ i = 0 n − 1 y i ( w n − k ) i = ∑ i = 0 n − 1 ( ∑ j = 0 n − 1 a j ( w n i ) j ) w n − k i = ∑ i = 0 n − 1 ∑ j = 0 n − 1 a j w n ( j − k ) i = ∑ j = 0 n − 1 a j ∑ i = 0 n − 1 w n ( j − k ) i \begin{aligned} c_k & = \sum_{i=0}^{n-1}y_i(w_n^{-k})^i \\ & =\sum_{i=0}^{n-1}(\sum_{j=0}^{n-1}a_j(w_n^i)^j)w_n^{-ki}\\ & =\sum_{i=0}^{n-1}\sum_{j=0}^{n-1}a_jw_n^{(j-k)i} \\ & =\sum_{j=0}^{n-1}a_j\sum_{i=0}^{n-1}w_n^{(j-k)i} \\ \end{aligned} ck=i=0n1yi(wnk)i=i=0n1(j=0n1aj(wni)j)wnki=i=0n1j=0n1ajwn(jk)i=j=0n1aji=0n1wn(jk)i
    ∑ i = 0 n − 1 w n ( j − k ) i \sum_{i=0}^{n-1}w_n^{(j-k)i} i=0n1wn(jk)i中, ( j − k ) (j-k) (jk)是一个常数。
    S ( x ) = 1 + x + x 2 + . . . + x n − 1 S(x)=1+x+x^2+...+x^{n-1} S(x)=1+x+x2+...+xn1;
    算: S ( w n k ) S(w_n^k) S(wnk)
    k ≠ 0 k\not=0 k=0时,
    S ( w n k ) = 1 + ( w n k ) + ( w n k ) 2 + . . . + ( w n k ) n − 1 ( w n k ) S ( w n k ) = ( w n k ) + ( w n k ) 2 + ( w n k ) 3 + . . . + ( w n k ) n \begin{aligned} S(w_n^k)&=1+(w_n^k)+(w_n^k)^2+...+(w_n^k)^{n-1}\\ (w_n^k)S(w_n^k)&=(w_n^k)+(w_n^k)^2+(w_n^k)^3+...+(w_n^k)^n \end{aligned} S(wnk)(wnk)S(wnk)=1+(wnk)+(wnk)2+...+(wnk)n1=(wnk)+(wnk)2+(wnk)3+...+(wnk)n
    ( w n k ) n = 1 (w_n^k)^n=1 (wnk)n=1故有
    S ( w n k ) = ( w n k ) S ( w n k ) S ( w n k ) ( 1 − w n k ) = 0 因 为 ( 1 − w n k ) ≠ 0 , 所 以 S ( w n k ) = 0 S(w_n^k)=(w_n^k)S(w_n^k)\\ S(w_n^k)(1-w_n^k)=0\\ 因为(1-w_n^k)\not=0,所以S(w_n^k)=0 S(wnk)=(wnk)S(wnk)S(wnk)(1wnk)=0(1wnk)=0S(wnk)=0
    c k = ∑ i = 0 n − 1 y i ( w n − k ) i = ∑ i = 0 n − 1 ( ∑ j = 0 n − 1 a j ( w n i ) j ) w n − k i = ∑ i = 0 n − 1 ∑ j = 0 n − 1 a j w n ( j − k ) i = ∑ j = 0 n − 1 a j ∑ i = 0 n − 1 w n ( j − k ) i = a k n \begin{aligned} c_k & = \sum_{i=0}^{n-1}y_i(w_n^{-k})^i \\ & =\sum_{i=0}^{n-1}(\sum_{j=0}^{n-1}a_j(w_n^i)^j)w_n^{-ki}\\ & =\sum_{i=0}^{n-1}\sum_{j=0}^{n-1}a_jw_n^{(j-k)i} \\ & =\sum_{j=0}^{n-1}a_j\sum_{i=0}^{n-1}w_n^{(j-k)i} \\ & =a_kn \end{aligned} ck=i=0n1yi(wnk)i=i=0n1(j=0n1aj(wni)j)wnki=i=0n1j=0n1ajwn(jk)i=j=0n1aji=0n1wn(jk)i=akn
    所以 a k = c k n a_k=\frac{c_k}{n} ak=nck

    蝴蝶计算

    由于递归本身对资源消耗比较大,且容易爆栈,能改成迭代的话,自是改成迭代要好

    f ( w n k ) = f e v e n ′ ( w n 2 k ) + w n k f o d d ′ ( w n 2 k ) f(w_n^k)=f'_{even}(w_{\frac{n}{2}}^k)+w_n^k f'_{odd}(w_{\frac{n}{2}}^k) f(wnk)=feven(w2nk)+wnkfodd(w2nk)

    从系数表示到点表示示例
    f = a 0 + a 1 x + a 2 x 2 + a 3 x 3 f 1 = a 0 + a 2 x 2 f 2 = a 1 + a 3 x 2 f=a_0+a_1x+a_2x^2+a_3x^3\\ f1=a_0+a_2x^2\\ f2=a_1+a_3x^2\\ f=a0+a1x+a2x2+a3x3f1=a0+a2x2f2=a1+a3x2
    f ( w 4 0 ) f ( w 4 1 ) f ( w 4 2 ) f ( w 4 3 ) f(w_{4}^{0})\qquad f(w_{4}^{1})\qquad f(w_{4}^{2})\qquad f(w_{4}^{3}) \\ f(w40)f(w41)f(w42)f(w43)
    f 1 e v e n ( w 2 0 ) f 1 e v e n ( w 2 1 ) f 2 o d d ( w 2 0 ) f 2 o d d ( w 2 1 ) f1_{even}(w_{2}^{0})\quad f1_{even}(w_{2}^{1})\quad f2_{odd}(w_{2}^{0})\quad f2_{odd}(w_{2}^{1})\\ f1even(w20)f1even(w21)f2odd(w20)f2odd(w21) a 0 a 2 a 1 a 3 a_0 \qquad\qquad a_2 \qquad\qquad a_1\qquad\qquad a_3 a0a2a1a3
    在这里插入图片描述

    原始序数为
    a 0 a 1 a 2 a 3 a_0\quad a_1 \quad a_2 \quad a_3 a0a1a2a3
    二进制表示为
    00 01 10 11 00\quad 01\quad 10\quad 11 00011011
    最底层系数
    a 0 a 2 a 1 a 3 a_0\quad a_2 \quad a_1 \quad a_3 a0a2a1a3

    00 10 01 11 00\quad 10\quad 01\quad 11 00100111

    从右往左读的递增序

    展开全文
  • 下面是一个快速多项式算法的直接实现,在这些lecture notes中找到。在除是基于除数的倒数与被除数的快速/FFT相乘。我下面的实现严格遵循了被证明具有O(n*log(n))时间复杂度的算法(对于具有相同数量级的多项式)...
  • 多项式表示 数组 作为一种抽象数据类型 多项式抽象数据类型 有序表 多项式的表示 表示法1 表示法2 表示法3 多项式的加法 实现方法 函数分析 多项式乘法 代码总览 数组 作为一种抽象数据类型 抽象数据类型(ADT, ...
  • Find the quotient and remainder whenx^3 - x*y^2 + 1is divided byx + y. syms x y p = x^3 - x*y^2 + 1; d = x + y; [r,q] = polynomialReduce(p,d) r = 1 q = x^2 - y*x
  • 用C语言求多项式求sinx的近似。來源:互聯網2010-12-22 19:59:48評論分類: 電腦/網絡 >> 程序設計 >> 其他編程語言問題描述:3、利用下列台劳多项式求sinx的近似。Sin x ≈x/1 - x3/3! + x5/5!-x7/7!+...
  • CRC校验码计算:多项式-模2除

    千次阅读 2021-09-05 08:29:39
    循环冗余校验码(Cyclic Redundancy Check,CRC)是数据通信领域中最常用的一种差错校验码,该校验方法中,使用【多项式】,也就是【模2除】运算后的余数为校验字段。 如数据信息为n位,则将其左移k位后,被...
  • 多项式为: ...数组表示法会有以下困扰: 多项式内容变动时,对数组结构的影响相当大,算法处理不易。 由于数组时静态数据结构,所以事先必须查找一块连续的并且够大的内存空间,容易造成内存空间
  • 数值计算之 插值(1)多项式插值——拉格朗日插值前言什么是插值多项式插值法拉格朗日插值总结 前言 移动机器人有一个非常重要的任务,轨迹规划。轨迹规划需要满足运动学原理,即在路径规划给出路后,必须把...
  • 多项式

    2021-07-11 03:58:27
    [duō xiàng shì]多项式语音编辑锁定讨论上传视频在数学中,由若干个单项式相加组成的代数式叫做多项式(若有减法:减一个数等于加上它的相反数)。多项式中的每个单项式叫做多项式的项,这些单项式中的最高项次数,...
  • http://www.cublog.cn/u1/37798/showart_452797.html% matlab语言把多项式表达成一...% f(x)=an^n+an-1^n-1+……+a0% 可用行向量 p=[an an-1 …… a1a0]表示clear all ;clc;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%...
  • 2013-12-18什么是分式?分式、整式、分数有什么区别分式:...整式:单项式与多项式统称为整式。例题:、、是整式。不是整式。分数:定义把单位“1”平均分成若干份,表示这样的一份或几份的数叫做真分数或假分数。分...
  • 计算方法用Newton插值多项式求函数的近似计算方法课程设计题 目: 用Newton插值多项式 处理磁化曲线学 院: 理学院班 级: 学 生 姓 名: 学 生 学 号: 指 导 教 师: 2017年 06 月 19 日课程设计任务书姓名班级...
  • 多项式表示及运算 [问题描述] 设计一个算法,以实现一元稀疏多项式的加法运算。 [基本要求] (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,……,cn,en,其中n是多项式的项...
  • 一、实验名称:多项式相加 二、实验学时:4学时 三、实验目的 1.理解单链表的结构特性和基本操作算法; 2.掌握利用单链表实现两个多项式相加算法。 四、实验内容(步骤) 1.创建两个一元多项式; 2.输出一元...
  • 我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 —— 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一定按照题号排序,我会在每道题后面...
  • 2 数据结构描述一元多项式表示方式:如 f=6x^5-7x^4+3 表示为 f=6,5 -7,4 3,0每个多项式用单链表来存储:typedefstructPolyNode{floatcoef;// 系数intexpn;// 指数structPolyNode*next;// 指向下个结点的指针}Poly...
  • 在MATLAB用行向量表示多项式,则下面正确表示多项式 的向量是( )/ananas/latex/p/567025更多相关问题应用文同文学作品一样,可以进行艺术加工,可以虚构和夸张相同固结度时,单面排水的时间是双面排水时间的( )。...
  • 表示法

    2021-06-16 07:10:12
    表示法依据不同的角度可以分为不同的类型。从数的是否带符号,可分为带符号数和无符号数;从数的符号的表示方法,可分为真值和机器数;从数制角度,可分为二进制数、十进制数、八进制数和十六进制数等;从计算机...
  • matlab实验多项式运算数学实验 Matlab 多项式运算与代数方程求解器 Matlab 多项式运算 Matlab 中多项式表示方法 在 Matlab 中多项式是用它的系数向量来表示的。 例:2x3-x2+3 [2,-1,0,3] 特别注意:系数中的零是不...
  • 本题构造有序稀疏多项式的链式存储过程,输入的多项式有两项:系数和指数。 注意 :输入时按指数从大到小有序输入,输入0 0时表示输入结束。按表头插入构造链表,输出时按指数从小到大的顺序输出。 函数接口定义...
  • 数值计算之 插值(2)多项式插值——牛顿插值法拉格朗日插值...拉格朗日插值将一个多阶多项式拆分为多个多阶多项式的和,当出现新的节点时,需要重新计算各多项式,提升了计算量。牛顿插值解决了重新计算的
  • 概念最小二乘法多项式曲线拟合,根据给定的m个,并不要求这条曲线精确地经过这些,而是曲线y=f(x)的近似曲线y= φ(x)。原理给定数据pi(xi,yi),其中i=1,2,…,m。求近似曲线y= φ(x)。并且使得近似曲线与y=f(x)...
  • 常用正交多项式

    2021-04-23 17:45:53
    如果有一个"多项式"序列(每一项就表示一个k次多项式),如果这个多项式序列所有元素满足下面的规律:我们称为在区间上带权的"正交多项式序列";序列中的每一个元素,我们可以叫它"一个正交多项式"!常用的正交多项式...
  • 1、多项式表示 在MATLAB中创建多项式向量时,注意三点: (1)多项式系数向量的顺序是从高到低。 (2)多项式系数向量包含0次项系数,所以其长度为多项式最高次数加1。 (3)如果有的项没有,系数向量相应位置应用0补足...
  • 拉格朗日插值多项式(插值) 【问题描述】考虑[0.0,1.2]内的函数y=f(x)=cos(x)。利用多个(2,3,4等)节点构造拉格朗日插值多项式。 【输入形式】在屏幕上依次输入在区间[0.0,1.2]内的一个x*,构造插值多项式后求...
  • 课内资源

    2021-05-20 06:30:53
    vim,g++,git,Visual Stdio(用于生成exe文件)1.2 编码规范编码规范中所有没有涉及到的内容,参见googlestyle C++类名类名采用开头大写的方式命名变量局部变量采用小驼峰命名类私有和保护的成员变量末尾加下划线...
  • 版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖。如要转贴,必须注明原文网址...上章证明矩阵环是个单环,自然是没戏了,但我们还可以考虑多项式环。多项式多项式是我们大家...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,192
精华内容 12,876
关键字:

多项式的点值表示法