#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)

// 電流I(t)を計算する関数
double calculate_current(double t) {
    double alpha = R / (2.0 * L); // 減衰係数
    double omega_0 = 1.0 / sqrt(L * C); // 共振角周波数
    double omega_d = sqrt(pow(omega_0, 2) - pow(alpha, 2)); // 減衰振動の角周波数

    // I(t) = (E / L) * exp(-alpha * t) * sin(omega_d * t) / omega_d
    return (E / L) * exp(-alpha * t) * sin(omega_d * t) / omega_d;
}

int main() {
    double t = 0.0; // 時間を初期化

    // データのヘッダーを出力
    printf("time(s),current(A)\n");

    // 時間ごとに電流を計算して出力
    while (t <= T_MAX) {
        double current = calculate_current(t); // 電流の計算
        printf("%.6f,%.6f\n", t, current);     // 時間と電流を出力
        t += DT; // 時間を増加
    }

    return 0;
}
