fork download
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. #define E 5.0 // 電源電圧 (V)
  5. #define R 30.0 // 抵抗 (Ω)
  6. #define L 0.003 // インダクタンス (H)
  7. #define C 0.0000004 // キャパシタンス (F)
  8. #define dt 0.00002 // 時間刻み (秒)
  9. #define T 0.002 // シミュレーション時間 (秒)
  10.  
  11. // 電流 I(t) を計算する関数
  12. void simulate_rlc() {
  13. double t = 0.0; // 時間 (初期値)
  14. double i = 0.0; // 電流 (初期値)
  15. double v_c = 0.0; // コンデンサの電圧 (初期値)
  16. double di_dt, dv_c_dt; // 微分量
  17.  
  18. // 結果をCSVファイルに出力
  19. FILE *file = fopen("rlc_simulation.csv", "w");
  20. if (!file) {
  21. printf("ファイルの作成に失敗しました。\n");
  22. return;
  23. }
  24.  
  25. // ヘッダー行
  26. fprintf(file, "Time(s),Current(A)\n");
  27.  
  28. // シミュレーションループ
  29. while (t <= T) {
  30. // 微分方程式を解く
  31. di_dt = (E - v_c - R * i) / L;
  32. dv_c_dt = i / C;
  33.  
  34. // オイラー法による数値積分
  35. i += di_dt * dt;
  36. v_c += dv_c_dt * dt;
  37.  
  38. // 時間を進める
  39. t += dt;
  40.  
  41. // 結果をCSVに書き込み
  42. fprintf(file, "%.6f,%.6f\n", t, i);
  43. }
  44.  
  45. fclose(file);
  46. printf("シミュレーションが完了しました。結果は 'rlc_simulation.csv' に保存されました。\n");
  47. }
  48.  
  49. int main() {
  50. simulate_rlc();
  51. return 0;
  52. }
  53.  
Success #stdin #stdout 0s 5280KB
stdin
Standard input is empty
stdout
ファイルの作成に失敗しました。