From 6d8f1281b8f65a1e20d7ac00ff17f4ba94956e4e Mon Sep 17 00:00:00 2001 From: Orestis <orestis.malaspinas@hesge.ch> Date: Thu, 10 Sep 2020 23:20:36 +0200 Subject: [PATCH] updated rc code --- practical_work/rc_circuit/main.c | 20 ++++++++++++++++++++ practical_work/rc_circuit/rc.c | 23 +++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 practical_work/rc_circuit/main.c create mode 100644 practical_work/rc_circuit/rc.c diff --git a/practical_work/rc_circuit/main.c b/practical_work/rc_circuit/main.c new file mode 100644 index 0000000..82b3938 --- /dev/null +++ b/practical_work/rc_circuit/main.c @@ -0,0 +1,20 @@ +#include "rc.h" +#include <stdio.h> +#include <stdlib.h> + +int main() { + rc_state rc = rc_state_create(1.0, 1.0, 1.0); + + double v, v_ini; + v = v_ini = 0.0; + + double dt = 0.001; + double max_t = 5.0; + for (double t = 0.0; t < max_t; t += dt) { + double ve = exact_solution(t, v_ini, &rc); + printf("t = %f, v = %f, v_e = %f, diff = %f\n", t, v, ve, ve - v); + v = rc_advance(v, dt, &rc); + } + + return EXIT_SUCCESS; +} \ No newline at end of file diff --git a/practical_work/rc_circuit/rc.c b/practical_work/rc_circuit/rc.c new file mode 100644 index 0000000..0c338c0 --- /dev/null +++ b/practical_work/rc_circuit/rc.c @@ -0,0 +1,23 @@ +#include <math.h> +#include "rc.h" +#include "ode_o1.h" + +rc_state rc_state_create(double r, double c, double eps) { + rc_state rc = {.r = r, .c = c, .eps = eps}; + return rc; +} + +double rc_g(double v, void *rc) { + rc_state *rcs = (rc_state*)rc; + return 1.0 / (rcs->r * rcs->c) * (rcs->eps - v); +} + +double rc_advance(double v0, double dt, rc_state *state) { + return advance(rc_g, v0, dt, state); +} + +double exact_solution(double t, double v_ini, rc_state *state) { + return v_ini * exp(-t/(state->c * state->r)) - state->eps * exp(-t/(state->c * state->r)) + state->eps; +} + + -- GitLab