# SymPyにおける並列回路演算子"//"のオーバーロード
© 2020 @RR_Inyo

電気回路において，2つのインピーダンス$Z_{1}$，$Z_{2}$の並列回路のインピーダンス$Z_{p}$は
$$
Z_{p} = \frac{Z_{1} Z_{2}}{Z_{1} + Z_{2}}
$$
と書ける。このような「『和』分の『積』」の形は煩雑であるため，電気工学の分野ではこれを簡略化して，
$$
Z_{p} = Z_{1} \: // \: Z_{2}
$$
と略記する。この演算子"//"をSymPyでも使えるようにオーバーロードしてみよう。
Pythonの特殊メソッド \_\_floordiv()\_\_ をSymbolのアトリビュートに追加すれば可能である。


```python
# 準備
import sympy as sp
```


```python
# 2つのインピーダンスのシンボルを定義
Z1, Z2 = sp.symbols('Z_{1} Z_{2}')

# オーバーロード前の挙動
print('Z1 // Z2 =')
display(Z1 // Z2)
print('切り捨て除算(floor division)となっている。')
print('ぶっちゃけ，切り捨て除算はあまり使うことはないと思われる。')
```

    Z1 // Z2 =



$\displaystyle \left\lfloor{\frac{Z_{1}}{Z_{2}}}\right\rfloor$


    切り捨て除算(floor division)となっている。
    ぶっちゃけ，切り捨て除算はあまり使うことはないと思われる。



```python
# 演算子のオーバーロード
## オーバーロードするための関数を準備する
def __floordiv__(self, other):
    return self * other / (self + other)

## Symbolのアトリビュートに追加
sp.Symbol.__floordiv__ = __floordiv__

# オーバーロード後の挙動
print('Z1 // Z2 =')
display(Z1 // Z2)
print('並列回路の「『和』分の『積』」となっている！')
```

    Z1 // Z2 =



$\displaystyle \frac{Z_{1} Z_{2}}{Z_{1} + Z_{2}}$


    並列回路の「『和』分の『積』」となっている！



```python

```

8e088405d99afbb4d85556c7d8bc5468da7e0997
ipynb
Jupyter Notebook
parallel-operator.ipynb
RR-Inyo/parallel-operator
966645fcec76914fea2a7c6ad5a3fab2a62e826a
MIT
parallel-operator.ipynb
RR-Inyo/parallel-operator
966645fcec76914fea2a7c6ad5a3fab2a62e826a
MIT
parallel-operator.ipynb
RR-Inyo/parallel-operator
966645fcec76914fea2a7c6ad5a3fab2a62e826a
MIT
Qwen/Qwen-72B
1. YES
2. YES