# 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代替了高阶无穷小，


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://johannesliu.gitbook.io/learning-advanced-mathematics-with-python/4.0-calculus/4.5-series.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
