NumPy 的 np.polyder 和 np.polyint 要求系数按降幂排列(如 [1, -3, 2] 表示 $x^2 - 3x + 2$),polyder 返回导数系数(高阶导超次得空数组),polyint 必须显式传 k 设积分常数,否则默认为 0。

NumPy 的 np.polyder 和 np.polyint 能直接对系数数组求导/积分,但必须注意:它们默认按降幂排列(最高次项在前),且不自动处理符号变量或表达式——你传进去的是数字系数,出来的也是数字系数。
多项式系数怎么传才不会反?
NumPy 把多项式当成系数向量,比如 [a, b, c] 表示 a*x² + b*x + c(不是 c*x² + b*x + a)。这个顺序和 MATLAB 一致,但和部分数学教材习惯相反,容易搞错导数结果。
- 写
x² - 3x + 2,得传[1, -3, 2],不是[2, -3, 1] - 用
np.poly1d([1, -3, 2])可以打印验证:它会输出1 x² - 3 x + 2 - 如果系数来自拟合(如
np.polyfit),它返回的就是降幂顺序,可直接喂给polyder/polyint
用 np.polyder 求导时的三个关键点
np.polyder 返回新系数数组,但次数下降、长度变短,容易因索引越界出错。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- 一阶导:
np.polyder([1, -3, 2])→[2, -3](对应2x - 3) - 高阶导:用
m参数,np.polyder([1, -3, 2], m=2)→[2];若m超过原多项式次数,结果是空数组[],不是 0 - 别直接对空数组调
np.poly1d,会报ValueError: coefficient array is empty - 导数在某点的值?先用
np.polyval(np.polyder(p), x0),别用np.poly1d(p).deriv()(x0)——后者是对象方法,和polyder独立
用 np.polyint 积分时必须设常数项
np.polyint 默认把常数项设为 0,但实际积分必带任意常数 C,这个 C 必须显式传入,否则后续代入计算会出错。
立即学习“Python免费学习笔记(深入)”;
-
np.polyint([2, -3])→[0.666..., -3, 0](即(2/3)x³ - 3x² + 0) - 要设
C = 5,得写np.polyint([2, -3], k=[5])→[0.666..., -3, 5] -
k是列表,长度必须等于积分次数:一次积分传一个数,二次积分要传两个,如k=[C1, C2] - 如果漏掉
k,又拿结果去算定积分(比如用np.polyval做上下限相减),常数项会被错误抵消——其实它本不该被抵消,除非你明确要“原函数差值”
最易被忽略的是:这两个函数只做纯代数运算,不校验输入是否真构成多项式(比如含 nan 或 inf 的系数数组也能跑,但结果无意义);另外,它们对浮点系数的高次多项式数值稳定性较差,超过 20 次建议换符号计算库(如 sympy)。

















