/* B-1; version 1.0 */ /* (c) copyright Ian Hickson 2000, distributed under the GNU GPL */ #include "dynamic-2d-arrays.h" #include "lists.h" #include "runge-kutta.h" /* Circuit Constants */ #define C 4.7e-6 #define R 1e3 #define L1 20e-3 #define L2 10e-3 /* Details of range */ #define Start 0 #define End 20e-3 #define StepSize 1e-5 /* Differential Equation: d2V 1 dV 1 1 1 --- + -- -- + (--- + ---) V = --- e(t) dt2 RC dt L1C L2C L2C \b/ \____c____/ \__d__/ */ nlNumber e(nlNumber x) { return x < 5e-3 ? 1.0 : 0.0; } nlNumber b(nlNumber x) { return 1/(R*C); } nlNumber c(nlNumber x) { return 1/(L1*C) + 1/(L2*C); } nlNumber d(nlNumber x) { return 1/(L2*C) * e(x); } nlNumber f1(nlNumber x, numberList* LastValues) { return d(x)-b(x)*nlGet(LastValues, 1)-c(x)*nlGet(LastValues, 0); } nlNumber printResult(nlNumber x, numberList* LastValues) { printf("%f,%f\n", x, nlGet(LastValues, 0)); } main() { numberList* InitialValues; InitialValues = nlAllocList(2); nlSet(InitialValues, 0, 0); nlSet(InitialValues, 1, 0); rungekutta(Start, End, StepSize, InitialValues, &f1, &printResult); nlFreeList(InitialValues); }