```python
import sympy as sp

print(f"SymPy Version: {sp.__version__}")

# 数式をキレイに表示する
sp.init_printing()
```

    SymPy Version: 1.8


### シンボルの生成

- 複数のシンボルを同時に作成する場合は、`sympy.symbols()`を使用する。
  + str型の引数として、シンボルをスペース区切りで指定する。
- 単一のシンボルを生成する場合は、`sympy.Symbol`クラスを使用出来る。


```python
x, y, z = sp.symbols('x y z')
x, y, z
```


```python
a = sp.Symbol('a')
a
```

### 数式を組み立てる

- 生成したシンボルのインスタンスを使用して、Pythonの演算子を使って式を定義するだけでよい
- 生成された式は、整形されたものになっているので、展開した数式が欲しい場合は`sympy.expand()`を使用する
- 逆に展開されたものを因数分解する場合は、`sympy.factor()`を使用する。
  + 式を整形する`sympy.simplify()`と合わせて使用されることが多い。


```python
f = (a * x + y) ** 2
print(f"式の型: {type(f)}")
f
```


```python
g = sp.expand(f)
print(f"式の型: {type(g)}")
g
```


```python
sp.factor(g)
```

### 数式を整形する

- あるシンボルについて整理する場合は、`sympy.collect()`を使用する


```python
exp = (x + y + z) ** 3
exp
```


```python
exp = sp.expand(exp)
exp
```


```python
# x について式を整理する
sp.collect(exp, x)
```

### 数式に値を代入する

- 生成した数式のインスタンスに対して、`数式.subs()`を呼び出す。
  + 引数は辞書型のインスタンスになる


```python
exp = (x + y + z) ** 3
exp = sp.expand(exp)
exp
```


```python
exp.subs({x: 2})
```


```python
exp.subs({x: 2, y: 1})
```


```python
exp.subs({x: 2, y: 1, z: 0.5})
```

### 数式から係数を抽出する

- 生成した数式のインスタンスに対して、`数式.coeff()`を呼び出す


```python
exp = (x + y + z) ** 3
exp = sp.expand(exp)
exp = sp.simplify(exp)
exp
```


```python
sp.collect(exp, x).coeff(x, 1)
```

### 分数を取り扱う

- 分数を代数的に扱う場合は、`sympy.Rational()`を使用する。
  + 引数は分子, 分母の順で指定する。


```python
sp.Rational(1, 3) + sp.Rational(1, 2)
```

### 数列を取り扱う

- 数列を定義する場合は、`sympy.sequence()`を使用する
  + 引数に、数列の式を与えるだけなので、等差数列や等比数列も扱うことができる。
- 作成した数列のインスタンスに対して、`数列.formula`を呼び出すと、定義された式を取り出せる
- 数列の和を計算する場合は、`sympy.summation()`を使用する。
- また、積和を計算する場合は、`sympy.product()`を使用する。


```python
n = sp.Symbol('n')
an = sp.sequence(3 * n + 1)
an
```


```python
an.formula
```


```python
sp.summation(an.formula, (n, 0, 5))
```


```python
sp.product(an.formula, (n, 0, 5))
```

### 連立方程式を取り扱う

- 方程式の定義には、`sympy.Eq`を使用する。
  + 引数には、左辺, 右辺の順で2つの式を与える
- 方程式を解く場合は、`sympy.solve()`を使う


```python
eq1 = sp.Eq(    x + y +     z, 4)
eq2 = sp.Eq(2 * x + y +     z, 6)
eq3 = sp.Eq(    x - y + 2 * z, 3)

equations = [eq1, eq2, eq3]
equations
```


```python
sp.solve(equations)
```


```python

```

134298c794b39bb3778cead1de9c6d9003994ace
ipynb
Jupyter Notebook
notebooks/01-BasicUsage.ipynb
codemajin/Introduction-to-SymPy
a403b50ba384260a8d5845be1fd1fbd0e5f6b807
MIT
notebooks/01-BasicUsage.ipynb
codemajin/Introduction-to-SymPy
a403b50ba384260a8d5845be1fd1fbd0e5f6b807
MIT
notebooks/01-BasicUsage.ipynb
codemajin/Introduction-to-SymPy
a403b50ba384260a8d5845be1fd1fbd0e5f6b807
MIT
Qwen/Qwen-72B
1. YES
2. YES