#!/usr/bin/env python
# coding: utf-8
# ## キルヒホッフの法則
#
#
# ### 連立方程式をSageで解く
#
# $ R_1, R_2 $を時計回りに流れる電流 $I_1$と$R_3, R_4, R2$を時計周りに流れる電流$I_2$とすると、
#
# - $R_2$ を通過する電流 $I_{R2}$は、$I_1 - I_2$であるからキルヒホッフの電圧法則から最初の式が導かれる
# - $ R_1, R_2, R_3$の交点の電圧$ V_2 $が等しいことから2番目の式が導かれれる
#
# $$
# \left\{
# \begin{eqnarray}
# (R_1 + R_2) I_1 - R_2 I_2& = & V_1 \\
# -R_2 I_1 + (R_2 + R_3 + R_4) I_2 & = & 0
# \end{eqnarray}
# \right.
# $$
#
# これをSageで表すと以下のようになります。
# In[1]:
I1, I2, V1, R1, R2, R3, R4 = var('I1 I2 V1 R1 R2 R3 R4')
eq = [
(R1 + R2)*I1 - R2*I2 == V1,
-R2*I1 + (R2 + R3 + R4)*I2 == 0
]
show(eq)
# In[2]:
# solveの結果は配列でかえされるので、最初の解のみを使用する
sol = solve(eq, [I1, I2])[0]
show(sol)
# In[3]:
values = {V1:1, R1: 100, R2:220, R3:330, R4:330}
# I1の式(sol[0])にvaluesを代入し、I1の値(右辺rhs)の値を数値で表示する
print sol[0].substitute(values).rhs().n()
# 同様にI2の値を求める
print sol[1].substitute(values).rhs().n()
# $V_2, V_3$の値は以下のように求まります。
# In[4]:
# I1 は、1番目の解の右辺なので、sol[0].rhs()となります
V2 = V1 - sol[0].rhs()*R1
print V2.substitute(values).n()
# 同様に
V3 = V1 - sol[0].rhs()*R1 - sol[1].rhs()*R3
print V3.substitute(values).n()
#
# ## テブナンの定理
# 上記の解をテブナンの定理を使って解いたのが、トラ技の図4です。
#
#
# 点線で分割した左側にテブナンの定理を使って、$R_1, R_2$で分圧された電圧が$V'_1$となり、$R_1, R_2$の並列抵抗$R'$で表されます。
# In[5]:
# 並列抵抗を計算する
def R_parallel(*Rs):
R = sum([ 1/r for r in Rs])
return 1/R
# 並列抵抗を$R_a$、分圧された電圧を$V_{1a}$とすると、以下のように求まります。
# In[6]:
V1a = V1*R2/(R1+R2)
Ra = R_parallel(R1, R2)
print V1a
print Ra
# In[7]:
V2 = V1a*(R3+R4)/(Ra + R3 + R4)
print V2
V2.substitute(values).n()
# In[ ]: