有没有一种方法可以在不定义 n 值的情况下计算泰勒级数展开式的第 n 项?对于正弦,它是
(-1)**n*x**(2*n+1)/(2*n+1)!
。在 Maxima 中,它是一个(某种程度上)与 powerseries(sin(x), x, 0)
相关的形式。
使用数学表达式:f^(n)(x) / n! x^n:
diff(f(x), *[x for _ in xrange(n)]) / factorial(n) * x**n
*
的魔力只是解压列表:
diff(f(x), *[x, x, x])
相当于:
diff(f(x), x, x, x)
问题提出近十年后,Sympy 得到改进并实施了Formal Power Series。唯一的问题是文档中没有涵盖部分 API(特别是类属性,因此请参阅 sympy/series/formal.py 源代码来深入研究)。
因此,这是一个获取正弦函数幂级数第 nth 项的示例,如最初所问:
from sympy import simplify, fps, sin
from sympy.abc import x, n
FormalPowerSeries
使用关键函数 fps
: 计算
sin_fps = fps(sin(x))
结果并不像问题中所述的那样紧凑,因为对所有整数进行级数求和,而只有奇数项是非零。
从该系列中,可以使用
.ak
属性访问每个系数的公式,该属性返回一个 SeqFormula
序列,该序列本身具有 .formula
属性:
ak = sin_fps.ak.formula
现在,在正弦和余弦的特殊情况下,系数公式是一个Piecewise定义的函数对象)。从中,我可以通过深入研究分段表达式的
.args
来仅提取奇数系数:
ak_odd = ak.args[0][0]
最后,这个表达式可以通过用 2*n+1 替换 k 来简化。然而,这需要获取对构建公式时实际使用的Dummy变量 k 的引用。查看
FormalPowerSeries
的源代码给了我这个:
k = sin_fps.ak.variables[0]
ak_odd.subs(k, 2*n+1)
这与正弦级数系数的经典公式相匹配,请记住 Γ(2n+2) = (2n+1)!(参见 Gamma 函数)。
这是一系列数字:
4、10、16、22、28
序列的第 n 项始终写成“?n + ?”的形式。
“n”前面的数字始终是从一项到下一项的差值。由于差值为 6,因此我们规则的第一部分将是“6n”。规则遵循六次乘法表:6、12、18、24...等。
序列中的数字总是比 6 乘法表小 2,因此我们通过减去 2 来“调整”我们的规则。现在将其放在一起得出: 第 n 项 = 6n - 2。
欢迎您的光临,很乐意为您提供帮助:-)