numpy.poly1d,寻根优化,在x轴上移动多项式

rrr*_*rak 5 python optimization numpy polygons scipy

构建一个n阶多项式并找到numpy的根通常是一件容易的事:

import numpy
f = numpy.poly1d([1,2,3])
print numpy.roots(f)
array([-1.+1.41421356j, -1.-1.41421356j])
Run Code Online (Sandbox Code Playgroud)

但是,假设您想要一个类型的多项式:

f(x) = a*(x-x0)**0 + b(x-x0)**1 + ... + n(x-x0)**n
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法来构造一个numpy.poly1d类型函数并找到根?我已经尝试过scipy.fsolve,但它非常不稳定,因为它在很大程度上取决于我在特定情况下选择起始值.

在此先感谢最好的问候rrrak

编辑:将"多边形"(错误)更改为"多项式"(正确)

Pas*_*ion 4

首先,你的意思肯定是多项式,而不是多边形?

在提供答案方面,您是否在所有术语中使用相同的“x0”值?如果是这样,则设 y = x - x0,求解 y 并使用 x = y + x0 得到 x。

如果需要,您甚至可以将其包装在 lambda 函数中。说,你想代表

f(x) = 1 + 3(x-1) + (x-1)**2
Run Code Online (Sandbox Code Playgroud)

然后,

>>> g = numpy.poly1d([1,3,1])
>>> f = lambda x:g(x-1)
>>> f(0.0)
-1.0
Run Code Online (Sandbox Code Playgroud)

f 的根由下式给出:

f.roots = numpy.roots(g) + 1
Run Code Online (Sandbox Code Playgroud)