////////////////////////////////////////////////////////////////////////////
// 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
syntax highlighted by Code2HTML, v. 0.9.1