{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## キルヒホッフの法則\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 連立方程式をSageで解く\n", "\n", "$R_1, R_2$を時計回りに流れる電流 $I_1$と$R_3, R_4, R2$を時計周りに流れる電流$I_2$とすると、\n", "\n", "- $R_2$ を通過する電流 $I_{R2}$は、$I_1 - I_2$であるからキルヒホッフの電圧法則から最初の式が導かれる\n", "- $R_1, R_2, R_3$の交点の電圧$V_2$が等しいことから２番目の式が導かれれる\n", "\n", "$$\n", "\t\t\\left\\{ \n", " \\begin{eqnarray}\n", "\t\t\t(R_1 + R_2) I_1 - R_2 I_2& = & V_1 \\\\\n", "\t\t\t-R_2 I_1 + (R_2 + R_3 + R_4) I_2 & = & 0\n", "\t\t\\end{eqnarray} \n", " \\right.\n", "$$\n", "\n", "これをSageで表すと以下のようになります。" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "[I1*(R1 + R2) - I2*R2 == V1, I2*(R2 + R3 + R4) - I1*R2 == 0]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "I1, I2, V1, R1, R2, R3, R4 = var('I1 I2 V1 R1 R2 R3 R4')\n", "eq = [\n", " (R1 + R2)*I1 - R2*I2 == V1,\n", " -R2*I1 + (R2 + R3 + R4)*I2 == 0\n", "]\n", "\n", "show(eq)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "[I1 == (R2 + R3 + R4)*V1/((R1 + R3 + R4)*R2 + R1*(R3 + R4)),\n", " I2 == R2*V1/((R1 + R3 + R4)*R2 + R1*(R3 + R4))]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# solveの結果は配列でかえされるので、最初の解のみを使用する\n", "sol = solve(eq, [I1, I2])[0]\n", "show(sol)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.00377358490566038\n", "0.000943396226415094\n" ] } ], "source": [ "values = {V1:1, R1: 100, R2:220, R3:330, R4:330}\n", "# 　I1の式(sol[0])にvaluesを代入し、I1の値（右辺rhs）の値を数値で表示する\n", "print sol[0].substitute(values).rhs().n()\n", "#　同様にI2の値を求める\n", "print sol[1].substitute(values).rhs().n()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$V_2, V_3$の値は以下のように求まります。" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.622641509433962\n", "0.311320754716981\n" ] } ], "source": [ "# I1 は、１番目の解の右辺なので、sol[0].rhs()となります\n", "V2 = V1 - sol[0].rhs()*R1\n", "print V2.substitute(values).n()\n", "# 同様に\n", "V3 = V1 - sol[0].rhs()*R1 - sol[1].rhs()*R3\n", "print V3.substitute(values).n()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## テブナンの定理\n", "上記の解をテブナンの定理を使って解いたのが、トラ技の図４です。\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "点線で分割した左側にテブナンの定理を使って、$R_1, R_2$で分圧された電圧が$V'_1$となり、$R_1, R_2$の並列抵抗$R'$で表されます。" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# 並列抵抗を計算する\n", "def R_parallel(*Rs):\n", " R = sum([ 1/r for r in Rs])\n", " return 1/R\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "並列抵抗を$R_a$、分圧された電圧を$V_{1a}$とすると、以下のように求まります。" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "R2*V1/(R1 + R2)\n", "1/(1/R1 + 1/R2)\n" ] } ], "source": [ "V1a = V1*R2/(R1+R2)\n", "Ra = R_parallel(R1, R2)\n", "print V1a\n", "print Ra" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "R2*(R3 + R4)*V1/((R1 + R2)*(R3 + R4 + 1/(1/R1 + 1/R2)))\n" ] }, { "data": { "text/plain": [ "0.622641509433962" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "V2 = V1a*(R3+R4)/(Ra + R3 + R4)\n", "print V2\n", "V2.substitute(values).n()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "SageMath 7.5.1", "language": "", "name": "sagemath" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.13" } }, "nbformat": 4, "nbformat_minor": 0 }