1

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

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(...)

4

1 回答 1

0

NumPy 不支持任意符号表达式。它仅适用于多项式,将多项式表示为系数数组。多项式的绝对值不是多项式,所以不是 NumPy 有的概念。它是一个符号表达式,可以由 SymPy 等符号操作库处理。

使用导数的内置函数(找到它的零点等等)。

这有几个问题:

  1. 如前所述polyder,NumPy 的方法不适用于这种情况,因为 abs(polynomial) 不是多项式。
  2. 绝对函数的导数未定义为 0。
  3. 在不存在导数的情况下,可能会获得涉及绝对值的表达式的最小值或最大值,因此即使您可以找到导数并以某种方式找到它的根,您仍然无法解决问题。
  4. 在微积分练习之外,寻找导数的零点并不是最小化或最大化函数的好方法。图书馆喜欢scipy.optimize为这类问题实施许多有效的数值方法。
于 2017-10-01T15:37:25.360 回答