
抵抗R、キャパシティC、リアクタンスLの回路に交流電流を 流すとどうなるかをシミュレーションしてみましょう。
交流の起電力が働くRLC直列回路の電流Iの微分方程式は次の通りです。
Iの1階微分量としてJを使い、1階連立微分方程式に書き改めると、 となります。プログラムは次の通りです。
//=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
// Program rlc
//=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
#include <stdio.h>
#include <math.h>
#include "nxgraph.h"
//---- physical setting
#define Vo (1.0) // amplitude of electric force [V]
#define F (10.0) // frequency [Hz]
#define R (100.0) // resistance [ohm]
#define L (1.0) // self inductance [H]
#define C (200e-6) // capacity [F]
#define dT (1.0/256) // must be much less than 1/F
//---- graphic setting
#define WIN_WIDTH (512)
#define WIN_HEIGHT (256)
//---- main function
int main(void)
{
XEvent ev;
NXOpenWindow("RLC circuit", WIN_WIDTH, WIN_HEIGHT );
double I=0.0, J=0.0;
double Ve, Vr, Vl, Vc;
double T;
for( int i=0 ; i<WIN_WIDTH ; i++ ){
T = i*dT;
J += ( - (1.0/(C*L))*I - (R/L)*J + (2*M_PI*F*Vo/L)*cos(2*M_PI*F*T) )*dT;
I += J*dT;
Ve = Vo*sin(2*M_PI*F*T);
Vr = I*R;
Vl = J*L;
Vc = Ve-Vr-Vl;
NXDrawPoint( i, 1*WIN_HEIGHT/8 - (int)(16*Ve) );
NXDrawPoint( i, 3*WIN_HEIGHT/8 - (int)(16*Vr) );
NXDrawPoint( i, 5*WIN_HEIGHT/8 - (int)(16*Vl) );
NXDrawPoint( i, 7*WIN_HEIGHT/8 - (int)(16*Vc) );
}
NXDrawString( 0, 1*WIN_HEIGHT/8-16, "Ve" );
NXDrawString( 0, 3*WIN_HEIGHT/8-16, "Vr" );
NXDrawString( 0, 5*WIN_HEIGHT/8-16, "Vl" );
NXDrawString( 0, 7*WIN_HEIGHT/8-16, "Vc" );
NXCheckEvent( NX_WAIT, ev );
NXCloseWindow();
return(0);
}
位相のずれがわかります。正弦波以外の起電力を働かせてみて どうなるか調べてみましょう。他の回路もいろいろ試してみましょう。