## 2018年5月31日木曜日

### Python - 数学 - SymPyで代数と式を計算する - 級数の和(sumation、sympify、symbols)

Pythonからはじめる数学入門 (Amit Saha (著)、黒川 利明 (翻訳)、オライリージャパン)の4章(SymPyで代数と式を計算する)、4.6(プログラミングチャレンジ)、問題4-3(級数の和)を取り組んでみる。

コード(Emacs)

Python 3

```#!/usr/bin/env python3

from sympy import pprint, symbols, sympify, SympifyError, summation

if __name__ == '__main__':
n = symbols('n')
while True:
term = input('Enter the nth term: ')
if term == 'q':
break
try:
term = sympify(term)
except SympifyError as err:
print(type(err), err)
else:
try:
nums = input('Enter the number of terms: ')
nums = int(nums)
except Exception as err:
print(type(err), err)
else:
s = summation(term, (n, 1, nums))
pprint(s)
```

```\$ ./sample3.py
Enter the nth term: a + (n - 1) * d
Enter the number of terms: 3
3⋅a + 3⋅d
Enter the nth term: a + (n - 1) * d
Enter the number of terms: 4
4⋅a + 6⋅d
Enter the nth term: 2a
<class 'sympy.core.sympify.SympifyError'> Sympify of expression 'could not parse '2a'' failed, because of exception being raised:
SyntaxError: invalid syntax (<string>, line 1)
Enter the nth term: a + (n - 1) * d
Enter the number of terms: c
<class 'ValueError'> invalid literal for int() with base 10: 'c'
Enter the nth term: x ** n / n
Enter the number of terms: 5
5    4    3    2
x    x    x    x
── + ── + ── + ── + x
5    4    3    2
Enter the nth term: x ** n / n
Enter the number of terms: 6
6    5    4    3    2
x    x    x    x    x
── + ── + ── + ── + ── + x
6    5    4    3    2
Enter the nth term: q
\$
```