$ R_1, R_2 $を時計回りに流れる電流 $I_1$と$R_3, R_4, R2$を時計周りに流れる電流$I_2$とすると、
これをSageで表すと以下のようになります。
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)
# solveの結果は配列でかえされるので、最初の解のみを使用する
sol = solve(eq, [I1, I2])[0]
show(sol)
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()
0.00377358490566038 0.000943396226415094
$V_2, V_3$の値は以下のように求まります。
# 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()
0.622641509433962 0.311320754716981
上記の解をテブナンの定理を使って解いたのが、トラ技の図4です。
点線で分割した左側にテブナンの定理を使って、$R_1, R_2$で分圧された電圧が$V'_1$となり、$R_1, R_2$の並列抵抗$R'$で表されます。
# 並列抵抗を計算する
def R_parallel(*Rs):
R = sum([ 1/r for r in Rs])
return 1/R
並列抵抗を$R_a$、分圧された電圧を$V_{1a}$とすると、以下のように求まります。
V1a = V1*R2/(R1+R2)
Ra = R_parallel(R1, R2)
print V1a
print Ra
R2*V1/(R1 + R2) 1/(1/R1 + 1/R2)
V2 = V1a*(R3+R4)/(Ra + R3 + R4)
print V2
V2.substitute(values).n()
R2*(R3 + R4)*V1/((R1 + R2)*(R3 + R4 + 1/(1/R1 + 1/R2)))
0.622641509433962