使用symPy.Sum对级数进行求解,十分简单。
Sum()函数的使用方法如下:
Sum(func, (variables, start, end))
其中第一个参数为待求级数通项,第二个元组形式的参数接受数变量以及级数的起始与终止数值。
另外需要说明的是,使用Sum求和,并不会会自动对极限、积分、求和以及乘积进行计算,它的作用仅仅是创建一个和式,可以使用Sum.doit()来完成这种操作(如果可以的话)。如果希望计算数值,可以使用Sum.evalf()
4.5.1 级数判敛
例:判断下列级数的敛散性。
$$\sum_{n=1}^{\infty} \frac{2n-1}{2^n}$$
[]:
(3)[]: f=Lambda(n, ((2\*n-1)/2\*\*n))
S=Sum(f(n), (n, 1, oo))
S
[]:
[]:f=Lambda(n, (((-1)\*\*n)/n))*
Sum(f(n), (n, 1, oo)).doit()*
[]:Sum(f(n), (n, 1, oo)).doit().evalf()*
[]:limit(1/(3\*\*(1/n)), n, oo)
[]:1
[]:f=Lambda(n, n\*\*2/2\*\*n)
limit(f(n), n, oo)
满足级数收敛的必要条件,接下来使用由正向级数的比值判别法对级数收敛性进行判断:
[]:limit(f(n+1)/f(n), n, oo)
由比值判别法可知级数收敛
4.5.2 幂级数求和
[]:f=Lambda(x, (n\*\*3/factorial(n+1))\*x\*\*n)
Sum(f(x), (n, 0, oo)).doit().simplify()
4.5.3 幂级数展开
使用series()函数可以将一个函数展开为幂级数。
series()函数的使用方法如下:
series(func, x, x0, n)
其中func为待展开函数, x为目标展开变量,如果不设置该参数,程序将自动判别,x0为站开点,n为展开阶数,默认n=6,即展开到为止。.
[]:y=Function('y')
f=Lambda(x,x/(9+x\*2))
series(f(x),x)
使用fourier_series()函数可以将一个函数展开为傅里叶级数。
fourier_series()函数的使用方法如下:
fourier_series(func, (var, start ,end))
其中func为待展开函数, var为目标展开变量,start为展开区间的左侧,end为展开区间的右侧。
[]:f=Lambda(x, x)
fourier_series(f(x), (x, -1, 1))
4.5.4 幂级数计算
例:使用麦克劳林展开式求前5, 10, 20项数值,近似计算
[]:f=Function('f')
f5=Lambda(x, series(exp(x), x, 0, 5)).subs(O(x\*\*5), 0)
f10=Lambda(x, series(exp(x), x,0, 10)).subs(O(x\*\*10), 0)
f20=Lambda(x, series(exp(x), x,0, 20)).subs(O(x\*\*20), 0)
float(f5(2)), float(f10(2)), float(f20(2))
[]:(7.0, 7.388712522045855, 7.389056098930174)
在上例中为了输出美观起见,使用0代替了高阶无穷小,