Pythonは何でも簡単にできそうなので、色々つまみ食い的に試している。 連立方程式が簡単に解けそうだったので、試してみた。
まず、久々にQucsを使って正解を確認しておく。
電源2つと抵抗が3本の回路で、キルヒホッフの法則を使えば簡単に電流が計算できる。
sympyで使えるように左辺が0になるような式を作る。
0 = i1 + i2 + i3
0 = 500 * i1 – 800 * i2 -1
0 = 1000 * i3 – 800 * i2 -3
SymPyモジュールをインストールして
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import sympy as sp i1 = sp.Symbol('i1') i2 = sp.Symbol('i2') i3 = sp.Symbol('i3') eq1 = i1 + i3 +i2 eq2 = 500 * i1 - 800 * i2 -1 eq3 = 1000 * i3 - 800 * i2 -3 ans = sp.solve([eq1, eq2, eq3]) ans1 = float(ans[i1]) ans2 = float(ans[i2]) ans3 = float(ans[i3]) print(f"i1 = {ans1} \ni2 = {ans2} \ni3 = {ans3}") |
答えが辞書型でしかも有理数(分数)で返ってきた。 floatで直接出力する方法もありそうだけど、直ぐには解らなかったので一つづつ変換。 誤差が出ないようにわざわざ有理数を使っているのかな?
答えはQucsでのシミュレーション結果と一致している。
連立方程式だけじゃなく、微分や積分も簡単にできそう。 以前C#で作りかけて挫折した電磁界のシミュレーターも案外簡単にできるかもしれないな..。