如何计算numpy切比雪夫多项式的导数?相关使用困惑咨询
解决numpy切比雪夫多项式导数的困惑
我当初刚用numpy的切比雪夫多项式工具链时,也完全摸不着头脑——尤其是chebval只负责求值,完全没提供求导功能,文档的微积分部分又写得有点绕。下面我把我踩坑后总结的两种正确方法分享给你:
方法一:用np.polynomial.Chebyshev类(推荐,更直观)
这个类是numpy封装的切比雪夫多项式对象,直接传入系数就能创建,后续求导、求值都很方便:
创建多项式对象:
系数数组的顺序是从低次到高次(对应T₀, T₁, T₂...),和chebval要求的系数顺序完全一致。比如我们定义多项式:1*T₀ + 2*T₁ + 3*T₂,代码如下:import numpy as np # 系数数组:[T0系数, T1系数, T2系数] coeffs = [1, 2, 3] # 创建切比雪夫多项式对象 cheb_poly = np.polynomial.Chebyshev(coeffs)求导数:
调用deriv()方法即可得到导数的多项式对象,还可以指定求导阶数(默认是1阶):# 求一阶导数 cheb_der = cheb_poly.deriv() # 查看导数的系数 print(cheb_der.coef) # 输出: [2, 12],对应2*T0 +12*T1导数求值:
直接调用导数对象就能计算任意x处的导数值,或者也可以用chebval配合导数系数:x = 0.5 # 方式1:直接调用导数对象 print(cheb_der(x)) # 输出: 2 + 12*0.5 = 8 # 方式2:用chebval + 导数系数 print(np.polynomial.chebyshev.chebval(x, cheb_der.coef)) # 同样输出8
方法二:用函数式工具(chebder + chebval)
如果你习惯用函数式的方式,numpy也提供了chebder函数直接处理系数数组,得到导数的系数,再用chebval求值:
import numpy as np coeffs = [1, 2, 3] # 计算导数的系数数组 der_coeffs = np.polynomial.chebyshev.chebder(coeffs) # 用chebval求导数值 x = 0.5 print(np.polynomial.chebyshev.chebval(x, der_coeffs)) # 输出8
澄清几个容易混淆的点
chebval本身只是求值工具,它的作用是根据给定的系数和x计算多项式的值,求导属于多项式的“变换”操作,所以需要用专门的chebder函数或Chebyshev类的deriv方法。np.polynomial.Chebyshev的系数传入方式和chebval完全一致,都是低次到高次的顺序,你只需要把系数数组直接传给类的构造函数就行,不需要额外转换。
内容的提问来源于stack exchange,提问作者kilojoules
相关产品推荐
相关产品推荐

