#include "rc.h" #include <stdio.h> #include <stdlib.h> #include <math.h> #include <plplot.h> #define NSIZE 5000 int main(int argc, char *argv[]) { rc_state rc = rc_state_create(1.0, 1.0, 1.0); // ============================================================ // // RC with constant != 0 tension at input and 0 initial tension // // ============================================================ // double v, v_ini; v = v_ini = 0.0; double dt = 0.001; double max_t = 5.0; PLFLT x[NSIZE], y[NSIZE]; PLFLT xmin = 0., xmax = max_t, ymin = rc.eps-1, ymax = rc.eps+1; 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); } v = v_ini = 1.0; double omega_low = 1.0; double omega = 100.0; int i = 0; for (double t = 0.0; t < max_t; t += dt) { rc.eps = v_ini * (1.0 + cos(omega * t) + cos(omega_low * t)); double ve = exact_solution(t, v_ini, &rc); printf("t = %f, v = %f, v_e = %f, diff = %f\n", t, v, ve, ve - v); x[i] = t; y[i] = v; v = rc_advance(v, dt, &rc); i += 1; } // Parse and process command line arguments plparseopts( &argc, argv, PL_PARSE_FULL ); // Initialize plplot plinit(); // Create a labelled box to hold the plot. plenv( xmin, xmax, ymin, ymax, 0, 0 ); pllab( "t", "v", "Simple PLplot demo of of the charge of a capacitor" ); // Plot the data that was prepared above. plline( NSIZE, x, y ); // Close PLplot library plend(); return EXIT_SUCCESS; }