//////////////////////////////////////////////////////////////////////////// // Model CTEST2.CPP SIMLIB/C++ // // filtr s přenosovou funkcí: // // F(p) = 1 / (p^3 + 3.25p^2 + 16.5p + 17.5) // // model odezvy na jednotkový skok // #include "simlib.h" #define OUTPUT_FILE "ctest.dat" const double a1 = 1.0, // koeficienty přenosu filtru a2 = 3.25, a3 = 16.5, a4 = 17.5; const double InpValue = 1.0; // vstup filtru -- jednotkový skok const double StepPrn = 0.05; // krok tisku výsledků class Filter : aContiBlock { Integrator y2, y1, y; // použité integrátory public: Filter(Input inp, double a1, double a2, double a3, double a4) : // popis propojení bloků: y2((inp-a2*y2-a3*y1-a4*y)/a1), // y''= int(y''') y1(y2), // y'= int(y'') y(y1) {} // y= int(y') double Value() { return y.Value(); } // výstup bloku }; Filter F(InpValue, a1, a2, a3, a4); void Sample() { Print("%6.2f %.4g \n", T.Value(), F.Value()); } Sampler S(Sample, StepPrn); int main() { // popis experimentu SetOutput(OUTPUT_FILE); _Print("# CTEST -- model odezvy přenosového filtru na jednotkový skok \n"); Print("# Time y\n"); Init(0,7); // inicializace experimentu SetAccuracy(1e-3); // požadovaná přesnost Run(); // simulace Print("# konec \n"); return 0; } // konec