#include <stdio.h>
#include <math.h> // 数学関数を使用するために必要
// 定数の設定
#define E 5.0 // 電圧 (V)
#define R 30.0 // 抵抗 (Ω)
#define L 0.003 // インダクタンス (H)
#define C 0.0000004 // キャパシタンス (F)
#define DT 0.00002 // 時間増分 (s)
#define T_MAX 0.002 // シミュレーション時間 (s)
// 微分方程式の計算(電流の時間変化)
double dI(double q, double i) {
return (E - R * i - q / C) / L;
}
int main() {
double t = 0.0; // 時間 (s)
double q = 0.0; // 電荷 (C)
double i = 0.0; // 電流 (A)
// ヘッダの出力
// シミュレーションループ
while (t <= T_MAX) {
// オイラー法による更新
double di = dI(q, i);
q += i * DT;
i += di * DT;
// 時間の更新
t += DT;
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+IC8vIOaVsOWtpumWouaVsOOCkuS9v+eUqOOBmeOCi+OBn+OCgeOBq+W/heimgQoKLy8g5a6a5pWw44Gu6Kit5a6aCiNkZWZpbmUgRSA1LjAgICAgICAvLyDpm7vlnKcgKFYpCiNkZWZpbmUgUiAzMC4wICAgICAvLyDmirXmipcgKM6pKQojZGVmaW5lIEwgMC4wMDMgICAgLy8g44Kk44Oz44OA44Kv44K/44Oz44K5IChIKQojZGVmaW5lIEMgMC4wMDAwMDA0IC8vIOOCreODo+ODkeOCt+OCv+ODs+OCuSAoRikKI2RlZmluZSBEVCAwLjAwMDAyIC8vIOaZgumWk+Wil+WIhiAocykKI2RlZmluZSBUX01BWCAwLjAwMiAvLyDjgrfjg5/jg6Xjg6zjg7zjgrfjg6fjg7PmmYLplpMgKHMpCgovLyDlvq7liIbmlrnnqIvlvI/jga7oqIjnrpfvvIjpm7vmtYHjga7mmYLplpPlpInljJbvvIkKZG91YmxlIGRJKGRvdWJsZSBxLCBkb3VibGUgaSkgewogICAgcmV0dXJuIChFIC0gUiAqIGkgLSBxIC8gQykgLyBMOwp9CgppbnQgbWFpbigpIHsKICAgIGRvdWJsZSB0ID0gMC4wOyAvLyDmmYLplpMgKHMpCiAgICBkb3VibGUgcSA9IDAuMDsgLy8g6Zu76I23IChDKQogICAgZG91YmxlIGkgPSAwLjA7IC8vIOmbu+a1gSAoQSkKCiAgICAvLyDjg5jjg4Pjg4Djga7lh7rlipsKICAgIHByaW50Zigi5pmC6ZaTKHMpXHTpm7vmtYEoQSlcbiIpOwoKICAgIC8vIOOCt+ODn+ODpeODrOODvOOCt+ODp+ODs+ODq+ODvOODlwogICAgd2hpbGUgKHQgPD0gVF9NQVgpIHsKICAgICAgICBwcmludGYoIiUuNmZcdCUuNmZcbiIsIHQsIGkpOwoKICAgICAgICAvLyDjgqrjgqTjg6njg7zms5Xjgavjgojjgovmm7TmlrAKICAgICAgICBkb3VibGUgZGkgPSBkSShxLCBpKTsKICAgICAgICBxICs9IGkgKiBEVDsKICAgICAgICBpICs9IGRpICogRFQ7CgogICAgICAgIC8vIOaZgumWk+OBruabtOaWsAogICAgICAgIHQgKz0gRFQ7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0K