Algorithm 多项式最小不动点的有效计算

Algorithm 多项式最小不动点的有效计算,algorithm,numerical-methods,Algorithm,Numerical Methods,设p(x)表示所讨论的多项式。P的最小不动点(LFP)是x的最小值,因此x=P(x)。多项式具有实系数。一般来说,没有人保证LFP会存在,尽管如果学位是奇数,则可以保证存在LFP≥ 3.如果度为3,我知道一个有效的解决方案。x=P(x),因此0=P(x)-x。有一个封闭形式的立方公式,求解x有点琐碎,可以硬编码。2级和1级同样容易。我遇到的问题是更复杂的情况,因为我似乎无法想出一个好的任意程度的算法 编辑: 我只考虑实不动点,取其中最小的,不一定是绝对值最小的不动点。用你最喜欢的数值方法求解f(

设p(x)表示所讨论的多项式。P的最小不动点(LFP)是x的最小值,因此x=P(x)。多项式具有实系数。一般来说,没有人保证LFP会存在,尽管如果学位是奇数,则可以保证存在LFP≥ 3.如果度为3,我知道一个有效的解决方案。x=P(x),因此0=P(x)-x。有一个封闭形式的立方公式,求解x有点琐碎,可以硬编码。2级和1级同样容易。我遇到的问题是更复杂的情况,因为我似乎无法想出一个好的任意程度的算法

编辑:

我只考虑实不动点,取其中最小的,不一定是绝对值最小的不动点。

用你最喜欢的数值方法求解
f(x)=p(x)-x
。例如,您可以迭代

x_{n + 1} = x_n - P(x_n) / (P'(x_n) - 1).

一般来说,你找不到闭式公式,因为。因此,对于五次和更高阶,你必须使用某种数值方法。

这个问题试图找到多项式的“最小”(这里我不确定你指的是大小还是实际上最小,可能是最负的)根。对于高次多项式没有封闭形式的解,但是有无数的数值方法来求根

通常情况下,这是一个开始搜索的好地方


如果你想找到最小的根,那么你可以使用来确定它存在的区间,然后使用一些数值方法来找到该区间的根。

因为你想要最小的不动点,你不能不找到p(x)-x的所有实根并选择最小的

求多项式的所有根是一个棘手的问题。如果你有一个黑匣子例程,那么一定要使用它。否则,考虑以下技巧:

  • P(x)-x的形式M
  • 求M的所有特征值
但这要求您能够访问查找特征值的例程(这是另一个棘手的问题,但有很多好的库)

否则,您可以实现算法,这是一段非常重要的代码


我并不建议你去寻找一个零(比如牛顿法),直到你达到一级:如果做得不好,它是非常不稳定的,你会失去很多准确性(用它来处理多重根是非常困难的)。正确的方法实际上是上面提到的Jenkins-Traub算法。

你说的“最小”是指绝对值吗?我认为这属于理论计算机科学。你是否仅限于多项式?求任意函数的根不是一件小事,但我认为一般多项式有很好的解决方案。@Suraj Chandran:这不是理论上的计算机科学。@PengOne No。我只考虑实不动点并取其中的最小值。但这如何保证找到最小不动点呢?仅仅找到任意一个是不够的。你需要找到所有的零,然后选择最小的。这不是小事,因为你必须确定有多少个零是复杂的。@Greogry Nisbet:不是。但是一旦你找到了一个,比如说
p
,你就可以运行一些根查找方法,在
(-p,p)
中搜索根。最小并不意味着“最小绝对值”。@Gregory Nisbet:哦,那么你想要最小的实不动点吗?“我真的不建议找一个零(比如牛顿法)“我知道,如果多项式是一个黑匣子,就会出现这种情况,但如果你能轻松地检查多项式的定义,我不明白为什么求根过程+多项式除法是一个糟糕的主意(假设它存储为real列表).据我所知,牛顿的方法具有非常快的收敛速度等。我不怀疑你说的话,但我很难理解原因。@Gregory:通货紧缩是不稳定的,过程会失去准确性。即使是中次多项式,你也会失去足够的精度来找到错误/不存在的根。还有,找到多个根牛顿法的s肯定会失败:(x-a)^n在| x-a | ~epsilon时近似为epsilon^n,因此你只能得到机器精度的第n个根。用x-a压缩会得到一个不精确的系数列表。多项式根可能对系数非常敏感(即使它们是它们的连续函数).你也可以看一看有关这个问题(以及如何缓解通货紧缩问题)的一些指导方针的数字配方。