#!/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[ ]: