这是我写的:这是一个关于插值的经典练习,我已经完成并发送了。我想知道是否还有另一种(更长的)方式...
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(...)
?
答案 0 :(得分:0)
NumPy不支持任意符号表达式。它仅适用于多项式,将多项式表示为系数数组。多项式的绝对值不是多项式,因此它不是NumPy的概念。它是一个符号表达式,可以通过像SymPy这样的符号操作库来处理。
使用派生的内置函数(找到它的零等等)。
这有几个问题:
polyder
方法不适用于这种情况,因为abs(多项式)不是多项式。scipy.optimize
这样的库为这类问题实现了许多有效的数值方法。