4.5 级数

使用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
[]:S.doit()

例:求交错项级数n=1+(1)nn\sum_{n=1}^{+\infty} \frac{(-1)^n}{n}的和

[]:f=Lambda(n, (((-1)\*\*n)/n))*

Sum(f(n), (n, 1, oo)).doit()*
[]:Sum(f(n), (n, 1, oo)).doit().evalf()*

例:判断级数n=1+13\sum_{n=1}^{+\infty} \frac{1}{\sqrt{3}}n=1+n22n\sum_{n=1}^{+\infty} \frac{n^2}{2^n}的收敛性

[]:limit(1/(3\*\*(1/n)), n, oo)

[]:1

由级数收敛的必要条件可知n=1+n22n\sum_{n=1}^{+\infty} \frac{n^2}{2^n}发散。

[]:f=Lambda(n, n\*\*2/2\*\*n)

limit(f(n), n, oo)

满足级数收敛的必要条件,接下来使用由正向级数的比值判别法对级数收敛性进行判断:

[]:limit(f(n+1)/f(n), n, oo)

由比值判别法可知级数收敛

4.5.2 幂级数求和

例:求S(x)=n=1n3(n+1)xnS(x) = \sum_{n=1}^{\infty} \frac{n^3}{(n+1)}x^n的和函数。(答案不一样)

[]: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,即展开到为止。.

例:将函数f(x)=x9+x2f(x) = \frac{x}{9+x^2}展开成xx的幂级数。

[]: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为展开区间的右侧。

例:设的周期为1,它在[0,1]的表达式为f(t)=t(0t<1)f(t) = t (0\le t \lt 1),试将f(t)f(t)展开成傅立叶级数。

[]: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代替了高阶无穷小,

Last updated