> For the complete documentation index, see [llms.txt](https://johannesliu.gitbook.io/learning-advanced-mathematics-with-python/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://johannesliu.gitbook.io/learning-advanced-mathematics-with-python/4.0-calculus/4.5-series.md).

# 4.5 级数

使用symPy.Sum对级数进行求解，十分简单。

Sum()函数的使用方法如下：

```python
Sum(func, (variables, start, end))
```

其中第一个参数为待求级数通项，第二个元组形式的参数接受数变量以及级数的起始与终止数值。

另外需要说明的是，使用Sum求和，并不会会自动对极限、积分、求和以及乘积进行计算，它的作用仅仅是创建一个和式，可以使用Sum.doit()来完成这种操作（如果可以的话）。如果希望计算数值，可以使用Sum.evalf()

## 4.5.1 级数判敛

例：判断下列级数的敛散性。

```python
$$\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
```

\[]: ![](/files/qLU8kqP8I5gsI6mkQ3Ib)

```python
[]:S.doit()
```

\[]: ![](/files/vR2WAX7FcjqKT42EGCSE)

例：求交错项级数$$\sum\_{n=1}^{+\infty} \frac{(-1)^n}{n}$$的和

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

Sum(f(n), (n, 1, oo)).doit()*
```

\[]:![](/files/rtwq9HhuMxfDpILnFkW5)\*

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

\[]:![](/files/AKQ7HtIeqkMhEmA1QY2V)\*

例：判断级数$$\sum\_{n=1}^{+\infty} \frac{1}{\sqrt{3}}$$和$$\sum\_{n=1}^{+\infty} \frac{n^2}{2^n}$$的收敛性

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

[]:1
```

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

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

limit(f(n), n, oo)
```

\[]:![](/files/158sfuqongikhr8uprGb)

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

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

\[]:![](/files/pyfrNEzEyGmLlWZakr5x)

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

## 4.5.2 幂级数求和

例：求$$S(x) = \sum\_{n=1}^{\infty} \frac{n^3}{(n+1)}x^n$$的和函数。(答案不一样)

```python
[]:f=Lambda(x, (n\*\*3/factorial(n+1))\*x\*\*n)

Sum(f(x), (n, 0, oo)).doit().simplify()
```

\[]:![](/files/3ohz0xrQHa38Ns2d18bq)

## 4.5.3 幂级数展开

使用series()函数可以将一个函数展开为幂级数。

series()函数的使用方法如下：

```python
series(func, x, x0, n)
```

其中func为待展开函数， x为目标展开变量，如果不设置该参数，程序将自动判别，x0为站开点，n为展开阶数，默认n=6，即展开到为止。.

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

```python
[]:y=Function('y')

f=Lambda(x,x/(9+x\*2))

series(f(x),x)
```

\[]: ![](/files/uRYANxCZvdOEwOjeUWaD)

使用fourier\_series()函数可以将一个函数展开为傅里叶级数。

fourier\_series()函数的使用方法如下：

```python
fourier_series(func, (var, start ,end))
```

其中func为待展开函数， var为目标展开变量，start为展开区间的左侧，end为展开区间的右侧。

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

```python
[]:f=Lambda(x, x)

fourier_series(f(x), (x, -1, 1))
```

\[]:![](/files/3R95hDfU12nxR5SkzX0N)

## 4.5.4 幂级数计算

例：使用麦克劳林展开式求前5， 10， 20项数值，近似计算

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