具有python numpy的多项式的绝对值之和

时间:2014-10-27 06:16:46

标签: python numpy polynomials

这是我写的:这是一个关于插值的经典练习,我已经完成并发送了。我想知道是否还有另一种(更长的)方式...

q是一个浮点列表(插值点)

i是拉格朗日多项式的索引

x是评估的重点:

def l(q,i,x):
    poly=1.0
    for j,p in enumerate(q):
        if j==i:
            continue
        poly *=(x-p)/(q[i]-p)
    return poly

然后有我正在工作的功能:

def Lambda(q,x):
    value=0.0
    for j in range(0,len(q)):
        value+=abs(l(q,j,x))
    return value

现在我可以使用python的一些例程在区间[0,1]中找到它的最大值,我做了。 在python中有一个多项式模块,我可以很容易地重新定义l:

import numpy.polynomial.polynomial as P

def l_poly(q,i):
    poly = []
    for j,p in enumerate(q):
        if j==i:
            continue
        poly.append(p/(q[i]-p))
    return P.polyfromroots(poly)

我想对Lambda做同样的事情,这样我就可以使用派生的内置函数找到它的最大值(找到它的零等等)。问题是它是abs(polynomials)的总和。有没有办法做到这一点?或者混合多项式导数和abs(...)

的导数

1 个答案:

答案 0 :(得分:0)

NumPy不支持任意符号表达式。它仅适用于多项式,将多项式表示为系数数组。多项式的绝对值不是多项式,因此它不是NumPy的概念。它是一个符号表达式,可以通过像SymPy这样的符号操作库来处理。

  

使用派生的内置函数(找到它的零等等)。

这有几个问题:

  1. 如前所述,NumPy的polyder方法不适用于这种情况,因为abs(多项式)不是多项式。
  2. 绝对函数的导数在0处未定义。
  3. 在不存在衍生物的情况下,可以获得涉及绝对值的表达式的最小值或最大值,因此即使你能找到衍生物,并以某种方式找到它的根源,你仍然无法解决问题。
  4. 在微积分练习之外寻找微分导数并不是最小化或最大化函数的好方法。像scipy.optimize这样的库为这类问题实现了许多有效的数值方法。