Euler法とは
Euler法とは、常微分方程式の数値解析に使用される方法の1つです。 微分方程式では、ある関数の次の値を求めることが難しいので、様々な数値解を求める方法があります。今回は、そのEuler法をC言語で記述し、データをgunuplotで表記します。また、対象とする常微分方程式は、RC回路のコンデンサ電圧における回路方程式とします。この回路では、直流電源を用いるとします。まず、Cのソースコードを示します。
#include<stdio.h> #include<math.h> float func(float t, float Vc) { return 100000 - 1000 * Vc; }//オイラー法用 int main(void) { float Vc, t, step, R, C, end; int error; FILE *fp; R = 10; C = 0.0001; step = ((R*C) / 100.0)*50; Vc = 0.0; end = 0.01; if ((error = fopen_s(&fp,"Euler_data_50.txt", "w")) != 0) { printf("\nThis file can't opened \n\n"); return 0; } for (t = 0.0; t <= end; t = t + step) { fprintf(fp, "%f %f\n", t, Vc); Vc = Vc + step * func(t, Vc); } //Euler法用 fclose(fp); return 0; }
上記のソースコードを実行すると、時間領域におけるRC回路のコンデンサ電圧の値がtextファイルとして出てきます。 この出てきたファイルをgunuplotで実行させるとRC回路のコンデンサ電圧におけるEuler法を用いた数値解をプロットする事が出来ます。
以下に、簡単なGunuplotのソースコードを示します。
se grid se xrange [0:0.01] se yrange [0:110] se xlabel "s[sec]" se ylabel "Vc[V]" plot "Euler_data.txt" using 1:2 with lines