12.2 電気回路網に関するキルヒホッフの法則による解法 2 多元連立 1 次方程式の工学的応用についての例を 2 つ示す.1 つはブリッジ T 型回路, もう 1 つはホーイストンブリッジ回路である. 示された回路図と与えられた回路定数からキルヒホッフの法則を使って多元連立 1 次方程式を導出する. その式のパラメータを前述のプログラムに反映させてシミュレーションを行う. 12.2.0 キルヒホッフの法則 電気回路網において, 回路のある点に流れる電流, 素子にかかる電圧や抵抗値 ( インピ ーダンス ) はキルヒホッフの法則を使って求めることができる. 法則は 2 つある. 第 1 法則 : 回路の分岐点において, 流入する電流は流出する電流に等しい I 1 I 3 I 1 + I 2 = I 3 + I 4 (1) I 2 I 4 第 2 法則 : 閉回路において, 起電力の和は電圧降下の和に等しい 閉回路 abca の起電力の和と電圧降下の和は次のとおり. R 1 E 1 R 3 - + 起電力の和 : E 1 + ( - E 2 ) a I 1 b I 3 c 電圧降下の和 :R 1I 1 + R 3I 3 + R 2( - I 2 ) + I 2 つまり R 2 E 2 E 1 + ( - E 2 ) = R 1I 1 + R 3I 3 + R 2( - I 2 ) (2) ただし電流の向きを破線の矢印方向としている.2 つの法則から得た式を連立して回路の解 析を行う.
12.2.1 ブリッジ T 型回路この回路は減衰器として使用される. 減衰器は強い強度を持つ電気信号 ( オーディオや無線の信号など ) を適切な大きさに弱める装置である. 例えば TV の電波が強い地域では正常に信号を受信できない. そのようなところでは信号の強度を減衰器で弱めて受信することになる. またこの回路はインピーダンスのマッチングにも使用される. 下の図において,RL は可変抵抗器である. これを調節することにより, 電流 I1,I2 を小さく ( 減衰 ) することができる.I1,I2 および I3 の向きを図の矢印の向きとする. また電圧 E=10V, 抵抗 R1=20Ω,R2=50Ω,R3=30Ω,R4=15Ω とする. 抵抗 RL を 5Ω 刻みで 0 から 100Ω 変化させたとき,I1,I2 および RL の端子電圧 VL がどのように変化するのか, それらを計算で求め, 減衰器の機能を確認する. Fig. 1. ブリッジ T 型回路. キルヒホッフの法則から, 次の連立方程式が得られる.( 式は上から順に I1,I2 および I3 の向きについての起電力の和となっている.) (R1 + R2)I1 R1 I2 R2 I3 = E { R1 I1 + (R1 + R3 + R4)I2 R3 I3 = 0 R2 I1 R3 I2 + (R2 + R3 + RL)I3 = 0 VL=I3 RL である.
/* Gauss elimination method */ /* 2012/10/05 */ //make procedure: gcc 12_2_1_GEM.c -o 12_2_1_GEM -lm #include <stdio.h> #include <math.h> #define NUMBER_OF_DATA 3 /* Number of undetermined coefficient:3 元連立方程式なので3*/ #define NUNBER_OF_CF 11 /* Number of coefficient term */ #define TURN 20 /* 繰り返しの回数 (0,5,,100Ω) */ #define R1 20 /*R1の抵抗値 (Ω)*/ #define R2 50 /* R2の抵抗値 (Ω)*/ #define R3 30 /* R3の抵抗値 (Ω)*/ #define R4 15 /* R4の抵抗値 (Ω)*/ #define E 10 /* 電池の起電力 (V) */ double RL=0; double data[nunber_of_cf][nunber_of_cf+1]; int GEM(); /* Definition of GEM */ void show_procedure(); /* Definition of show_procedure */ int n = (int)number_of_data; int turn=(int)turn; double epsilon=1e-18; /* Minimum value of pivot */ double x[nunber_of_cf]; /* Solutions will set: x1, x2,..., xn */ double RLandIandVL[TURN][NUMBER_OF_DATA+2]; /* RL, I1, I2, I3, VL are set */ void FileOut() // *** データをファイルへ出力する関数 *** { FILE *fp; // ファイルポインタの宣言 int count; // カウンタ char FILENAME[30]; // FILENAME; ファイル名が入る変数 strcpy(filename,"data.txt"); // ファイル名を決定する fp=fopen(filename,"w"); // ファイルを開く if(fp==null){ printf("error, A file can't open!\n"); // ファイルが生成できなければエラーの表示をする for(count=1; count<=turn; count++){ // データのファイルへの出力 fprintf(fp,"%d %f %f %f %f %f\n",count, RLandIandVL[count][0], RLandIandVL[count][1], RLandIandVL[count][2], RLandIandVL[count][3], RLandIandVL[count][4]); //RLandIandVL[][0]:RL, R L[][1]:I1, R L[][2]: I2, R L[][3]: I3, R L[][4]: VLがセットされる fclose(fp); // ファイルを閉じる int main() { int count, i; int n=(int)number_of_data; /* Number of undetermined coefficient */ int pivot; /* */ for(count=1; count<=turn; count++) {//data[][] には3 元連立 1 次方程式の成分,RとEがセットされる data[0][0] = R1+R2; data[0][1] = -R1; data[0][2] = -R2; data[0][3] = E; /* a11,..., a1n, b1 */ data[1][0] =-R1; data[1][1] = R1+R3+R4; data[1][2]= -R3; data[1][3] = 0; /* a21,..., a2n, b2 */ data[2][0] =-R2; data[2][1]=-r3; data[2][2] = R2+R3+RL; data[2][3] = 0; /* an1,..., ann, bn */ pivot = GEM(); if(pivot == 1) printf("tunr %d, RL=%f, I1=%f, I2=%f, I3=%f, VL=%f\n", count, RL, x[0], x[1], x[2], (x[2]*rl)); else { printf("this process was stopped, because a pivot is to small.\n"); RLandIandVL[count][0]=RL;RLandIandVL[count][1]=x[0]; RLandIandVL[count][2]=x[1]; RLandIandVL[count][3]=x[2]; RLandIandVL[count][4]=(x[2]*RL); RL += 5; FileOut(); i=getchar(); return 0;
I1, I2(A) ( 10) VL(V) GEM のコードについては項目 12.1 を参照のこと. 実行結果 プログラムを実行すると, ファイル data.txt が生成される. このデータファイルから Microsoft EXEL,Sma4 for Windows( フリー ) や GNU PLOT( フリー ) などを使って グラフが作成できる. 下はその例である. 1 I1 I2 VL 0.5 0 0 20 40 60 80 RL(Ω) Fig. 2. I1, I2 and VL vs. RL. RL が増加すると,I1 と I2 が減衰している. ブリッジ T 型回路は減衰器であることが確認 できる.
12.2.2 ホイートストンブリッジ回路この回路は未知の抵抗 ( あるいはインピーダンス ) を精密に測定するために使用される. 例えば歪ゲージの測定で使用されている.( この測定では材料の歪や応力が分かる.) また微小な電位差の検出や様々な電気量を測定するために多く使用されている. 下の回路において,I0 が流れないとき, ブリッジがバランスしているという. 今, 電流 I1 および I2 の向きを図の矢印の向きとし, 電圧 E = 10V, 抵抗 R1 = 5Ω,R3 = 4Ω,R4 = 6Ω,R0 = 0.5Ω とする. 抵抗 R2 を 0.5Ω 刻みで 0 から 10Ω 変化させたとき, 検流計 G に流れる電流 I0 がどのように変化するのか, それらを計算で求め, ホイートストンブリッジの機能を確認する. Fig. 3. ホーイストンブリッジ回路. キルヒホッフの法則から, 次の連立方程式が得られる.( 式は上から順に I1,I2,I3 の向き についての起電力の和となっている.) (R1 + R2 + R0)I1 R0 I2 R2 I3 = 0 { R0 I1 + (R3 + R4 + R0)I2 R4 I3 = 0 R2 I1 R4 I2 + (R2 + R4)I3 = E I0 は I0 = I1 - I2 である. これらの関係から未知の抵抗 R2 を求める.
/* Gauss elimination method */ /* 2012/10/05 */ // make procedure: gcc 12_2_2_GEM.c -o 12_2_2_GEM -lm #include <stdio.h> #include <math.h> #define NUMBER_OF_DATA 3 /* Number of undetermined coefficient */ #define NUNBER_OF_CF 11 /* Number of coefficient term */ #define TURN 20 /* Turn of iteration */ #define R0 0.5 /* resistance value */ #define R1 5 /* resistance value */ #define R3 4 /* resistance value */ #define R4 6 /* resistance value */ #define E 10 /* voltage value */ double R2=0; double data[nunber_of_cf][nunber_of_cf+1]; int GEM(); /* Definition of GEM */ void show_procedure(); /* Definition of show_procedure */ int n = (int)number_of_data; int turn=(int)turn; double epsilon=1e-18; /* Minimum value of pivot */ double x[nunber_of_cf]; /* Solutions will set: x1, x2,..., xn */ double RLandIandVL[TURN][NUMBER_OF_DATA+2]; /* RL, I1, I2, I3, VL are set */ void FileOut() // *** dataのファイル出力 *** { FILE *fp; // ファイルポインタの宣言 int count; // カウンタ char FILENAME[30]; // FILENAME; ファイル名が入る変数 strcpy(filename,"data.txt"); // ファイル名を決定する fp=fopen(filename,"w"); // ファイルを開く if(fp==null){ printf("error, A file can't open!\n"); // ファイルが生成できなければエラーの表示をする for(count=1; count<=turn; count++){ // 行に沿った ( 原子位置に対する ) 種々のデータの出力 fprintf(fp,"%d %f %f %f %f %f\n",count, RLandIandVL[count][0], RLandIandVL[count][1], RLandIandVL[count][2], RLandIandVL[count][3], RLandIandVL[count][4]); fclose(fp); // ファイルを閉じる int main() { int count, i; int n=(int)number_of_data; /* Number of undetermined coefficient */ int pivot; /* */ for(count=1; count<=turn+1; count++) { data[0][0] = R1+R2+R0; data[0][1] = -R0; data[0][2] = -R2; data[0][3] = 0; /* a11, a12,..., a1n, b1 */ data[1][0] = -R0; data[1][1] = R3+R4+R0; data[1][2] = -R4; data[1][3] = 0; /* a21, a22,..., a2n, b2 */ data[2][0] = -R2; data[2][1] = -R4; data[2][2] = R2+R4; data[2][3] = E; /* an1, an2,..., ann, bn */ pivot = GEM(); if(pivot == 1) printf("tunr %d, R2=%f, I1=%f, I2=%f, I3=%f, I0=%f\n", count, R2, x[0], x[1], x[2], (x[0]-x[1])); else { printf("this process was stopped, because a pivot is to small.\n"); RLandIandVL[count][0]= R2; RLandIandVL[count][1]= x[0]; RLandIandVL[count][2]=x[1]; RLandIandVL[count][3]=x[2]; RLandIandVL[count][4]=(x[0]-x[1]); R2 += 0.5; FileOut(); i=getchar(); return 0;
I0, I1, I2, I3(A) GEM のコードについては項目 12.1 を参照のこと. 実行結果 R2 が増加すると,I0 が次第に減衰し,turn16 のとき I0=0 になる. ブリッジ回路がバラン スする状況が確認できる. 6 4 2 I0 I1 I2 I3 0-2 0 2 4 6 8 R2(Ω) Fig. 4. I0, I1, I2, I3 vs. R2.
レポート 12 バネ 質量系におけるつり合いの位置 おもり下の図において, 錘 M1,M2 がバネ定数 k1,k2,k3 のバネにつながり, 力 P で引かれて いる状態で釣り合っている. バネは k2=1.7k1,k3=3.2k1 の関係があり, また,M1 に重力加 速度を掛けたものを W1,M2 に対するそれを W2 とすると,W2=1.5W1,P=2.7W1 の関係が ある.P を 0.5W1 刻みで 0 から 5W1 の範囲で変化させた時の M1 と M2 の変位 U1 と U2 を 求めよ. U1 P U2 Fig. 5. バネ 質量系のつり合い. M1 と M2 についての運動方程式は次のとおり. k 2 U 1 = k 3 (U 2 U 1 ) + W 1 2k 1 U 2 + k 3 (U 2 U 1 ) = W 2 + P これらから, 次の連立方程式が得られる. (k { 2 + k 3 )U 1 k 3 U 2 = W 1 k 3 U 1 + (2k 1 + k 3 )U 2 = P + W 2 この 2 元連立 1 次方程式を U1 および U2 について求めよ. 出力結果 ( となるべくグラフも ) 添付する. 文献 佐藤次男ほか,C による理工学問題の解法, 日刊工業新聞社,ISBN4-526-0363203.