/* VIMGCC -lm */ /* Hladanie (nenameranych) parametrov, aby vzorec \ref{rov22} dal cele cislo * kalibracna krivka: y= A*B/(U0+x) - 3/4 * Namerane hodnoty: [x,y] = { [19,y+3] [33,y+2] [53,y+1] [84,y] } * */ #include #include #define MIN 1E7 #define MAX 5E8 #define STEP 5E6 #define DELTA 0.2 /* napatie na zdroji */ double U0 = 300; /* konstanta B = sqrt(2*U0)/pi/sqrt(e/m) */ double B = 1.859152873E-5; double x[4]; double y(int k, double A) { return ( A*B/(U0 + x[k]) - 3/4); } int in_range(double x) { if ((x - floor(x) < DELTA) || (ceil(x) - x < DELTA)) { // printf("%g\t%g\t%g\n", x, floor(x), ceil(x)); return 1; } return 0; } int main(int argc, char **argv) { double A; double y0, y1, y2, y3; x[0] = 84; // posledne maximum --> prislucha mu trieda kmitania n = y x[1] = 53; x[2] = 33; x[3] = 19; // prve maximum --> prislucha mu trieda kmitania n = y + 3 for (A=MIN; A