#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 // 時間刻み (秒)
#define T 0.002 // シミュレーション時間 (秒)
// 電流 I(t) を計算する関数
void simulate_rlc() {
double t = 0.0; // 時間 (初期値)
double i = 0.0; // 電流 (初期値)
double v_c = 0.0; // コンデンサの電圧 (初期値)
double di_dt, dv_c_dt; // 微分量
// 結果をCSVファイルに出力
FILE
*file
= fopen("rlc_simulation.csv", "w"); if (!file) {
return;
}
// ヘッダー行
fprintf(file
, "Time(s),Current(A)\n");
// シミュレーションループ
while (t <= T) {
// 微分方程式を解く
di_dt = (E - v_c - R * i) / L;
dv_c_dt = i / C;
// オイラー法による数値積分
i += di_dt * dt;
v_c += dv_c_dt * dt;
// 時間を進める
t += dt;
// 結果をCSVに書き込み
fprintf(file
, "%.6f,%.6f\n", t
, i
); }
printf("シミュレーションが完了しました。結果は 'rlc_simulation.csv' に保存されました。\n"); }
int main() {
simulate_rlc();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CgojZGVmaW5lIEUgNS4wICAgICAgICAgLy8g6Zu75rqQ6Zu75ZynIChWKQojZGVmaW5lIFIgMzAuMCAgICAgICAgLy8g5oq15oqXICjOqSkKI2RlZmluZSBMIDAuMDAzICAgICAgIC8vIOOCpOODs+ODgOOCr+OCv+ODs+OCuSAoSCkKI2RlZmluZSBDIDAuMDAwMDAwNCAgIC8vIOOCreODo+ODkeOCt+OCv+ODs+OCuSAoRikKI2RlZmluZSBkdCAwLjAwMDAyICAgIC8vIOaZgumWk+WIu+OBvyAo56eSKQojZGVmaW5lIFQgMC4wMDIgICAgICAgLy8g44K344Of44Ol44Os44O844K344On44Oz5pmC6ZaTICjnp5IpCgovLyDpm7vmtYEgSSh0KSDjgpLoqIjnrpfjgZnjgovplqLmlbAKdm9pZCBzaW11bGF0ZV9ybGMoKSB7CiAgICBkb3VibGUgdCA9IDAuMDsgICAgICAgICAvLyDmmYLplpMgKOWIneacn+WApCkKICAgIGRvdWJsZSBpID0gMC4wOyAgICAgICAgIC8vIOmbu+a1gSAo5Yid5pyf5YCkKQogICAgZG91YmxlIHZfYyA9IDAuMDsgICAgICAgLy8g44Kz44Oz44OH44Oz44K144Gu6Zu75ZynICjliJ3mnJ/lgKQpCiAgICBkb3VibGUgZGlfZHQsIGR2X2NfZHQ7ICAvLyDlvq7liIbph48KCiAgICAvLyDntZDmnpzjgpJDU1bjg5XjgqHjgqTjg6vjgavlh7rlipsKICAgIEZJTEUgKmZpbGUgPSBmb3BlbigicmxjX3NpbXVsYXRpb24uY3N2IiwgInciKTsKICAgIGlmICghZmlsZSkgewogICAgICAgIHByaW50Zigi44OV44Kh44Kk44Or44Gu5L2c5oiQ44Gr5aSx5pWX44GX44G+44GX44Gf44CCXG4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgLy8g44OY44OD44OA44O86KGMCiAgICBmcHJpbnRmKGZpbGUsICJUaW1lKHMpLEN1cnJlbnQoQSlcbiIpOwoKICAgIC8vIOOCt+ODn+ODpeODrOODvOOCt+ODp+ODs+ODq+ODvOODlwogICAgd2hpbGUgKHQgPD0gVCkgewogICAgICAgIC8vIOW+ruWIhuaWueeoi+W8j+OCkuino+OBjwogICAgICAgIGRpX2R0ID0gKEUgLSB2X2MgLSBSICogaSkgLyBMOwogICAgICAgIGR2X2NfZHQgPSBpIC8gQzsKCiAgICAgICAgLy8g44Kq44Kk44Op44O85rOV44Gr44KI44KL5pWw5YCk56mN5YiGCiAgICAgICAgaSArPSBkaV9kdCAqIGR0OwogICAgICAgIHZfYyArPSBkdl9jX2R0ICogZHQ7CgogICAgICAgIC8vIOaZgumWk+OCkumAsuOCgeOCiwogICAgICAgIHQgKz0gZHQ7CgogICAgICAgIC8vIOe1kOaenOOCkkNTVuOBq+abuOOBjei+vOOBvwogICAgICAgIGZwcmludGYoZmlsZSwgIiUuNmYsJS42ZlxuIiwgdCwgaSk7CiAgICB9CgogICAgZmNsb3NlKGZpbGUpOwogICAgcHJpbnRmKCLjgrfjg5/jg6Xjg6zjg7zjgrfjg6fjg7PjgYzlrozkuobjgZfjgb7jgZfjgZ/jgILntZDmnpzjga8gJ3JsY19zaW11bGF0aW9uLmNzdicg44Gr5L+d5a2Y44GV44KM44G+44GX44Gf44CCXG4iKTsKfQoKaW50IG1haW4oKSB7CiAgICBzaW11bGF0ZV9ybGMoKTsKICAgIHJldHVybiAwOwp9Cg==