private double Oblicz_wyjscie(Calka calka_pierwsza, Calka calka_druga, double wejscie, ref double stan_przejsciowy_x1) { double stan_przejsciowy_x2 = wejscie + (-1 / param_T) * stan_przejsciowy_x1; calka_pierwsza.probka_terazniejsza = stan_przejsciowy_x2; calka_pierwsza.wartosc += Calkowanie(calka_pierwsza.probka_poprzednia, calka_pierwsza.probka_terazniejsza); stan_przejsciowy_x1 = calka_pierwsza.wartosc; calka_druga.probka_terazniejsza = stan_przejsciowy_x1; calka_druga.wartosc += Calkowanie(calka_druga.probka_poprzednia, calka_druga.probka_terazniejsza); double stan_przejsciowy_x0 = calka_druga.wartosc; calka_pierwsza.probka_poprzednia = calka_pierwsza.probka_terazniejsza; calka_druga.probka_poprzednia = calka_druga.probka_terazniejsza; return(stan_przejsciowy_x0 * (1 / param_T)); }
private void Operacje() { double akt_uchyb = 0; double akt_wyjście = 0; double akt_wejscie = 0; double akt_sygnal_przejsciowy_u1 = 0; double stan_przejsciowy_x1 = 0; double akt_czas = 0; double czas_pracy_ukladu = 20 * (1 / Calka.krok); List <double> Uchyb = new List <double>(); List <double> Wyjscie = new List <double>(); List <double> Wejscie = new List <double>(); Calka calka_pierwsza = new Calka(); Calka calka_druga = new Calka(); for (akt_czas = 0; akt_czas <= czas_pracy_ukladu; akt_czas++) { akt_wejscie = Oblicz_wejscie(akt_czas, Wejscie); //deklarujemy wartość wejścia w danym momencie t akt_uchyb = akt_wejscie - akt_wyjście; //obliczamy uchyb akt_sygnal_przejsciowy_u1 = Nieliniowosc(akt_uchyb); //uchyb przepuszczamy przez człon nieliniowy akt_wyjście = Oblicz_wyjscie(calka_pierwsza, calka_druga, akt_sygnal_przejsciowy_u1, ref stan_przejsciowy_x1); Uchyb.Add(akt_uchyb); Wyjscie.Add(akt_wyjście); } Label[] wspolrzedne_y_wyjscie = { wsp_wyjscia_y11, wsp_wyjscia_y10, wsp_wyjscia_y9, wsp_wyjscia_y8, wsp_wyjscia_y7, wsp_wyjscia_y6, wsp_wyjscia_y5, wsp_wyjscia_y4, wsp_wyjscia_y3, wsp_wyjscia_y2, wsp_wyjscia_y1, wsp_wyjscia_y0, wsp_wyjscia_ym1, wsp_wyjscia_ym2, wsp_wyjscia_ym3, wsp_wyjscia_ym4, wsp_wyjscia_ym5, wsp_wyjscia_ym6, wsp_wyjscia_ym7, wsp_wyjscia_ym8, wsp_wyjscia_ym9, wsp_wyjscia_ym10, wsp_wyjscia_ym11 }; Label[] wspolrzedne_x_wyjscie = { wsp_wyjscia_x1, wsp_wyjscia_x2, wsp_wyjscia_x3, wsp_wyjscia_x4, wsp_wyjscia_x5, wsp_wyjscia_x6, wsp_wyjscia_x7, wsp_wyjscia_x8, wsp_wyjscia_x9, wsp_wyjscia_x10, wsp_wyjscia_x11, wsp_wyjscia_x12, wsp_wyjscia_x13, wsp_wyjscia_x14, wsp_wyjscia_x15, wsp_wyjscia_x16, wsp_wyjscia_x17, wsp_wyjscia_x18, wsp_wyjscia_x19, wsp_wyjscia_x20 }; Label[] wspolrzedne_y_uchyb = { wsp_uchybu_y11, wsp_uchybu_y10, wsp_uchybu_y9, wsp_uchybu_y8, wsp_uchybu_y7, wsp_uchybu_y6, wsp_uchybu_y5, wsp_uchybu_y4, wsp_uchybu_y3, wsp_uchybu_y2, wsp_uchybu_y1, wsp_uchybu_y0, wsp_uchybu_ym1, wsp_uchybu_ym2, wsp_uchybu_ym3, wsp_uchybu_ym4, wsp_uchybu_ym5, wsp_uchybu_ym6, wsp_uchybu_ym7, wsp_uchybu_ym8, wsp_uchybu_ym9, wsp_uchybu_ym10, wsp_uchybu_ym11 }; Label[] wspolrzedne_x_uchyb = { wsp_uchybu_x1, wsp_uchybu_x2, wsp_uchybu_x3, wsp_uchybu_x4, wsp_uchybu_x5, wsp_uchybu_x6, wsp_uchybu_x7, wsp_uchybu_x8, wsp_uchybu_x9, wsp_uchybu_x10, wsp_uchybu_x11, wsp_uchybu_x12, wsp_uchybu_x13, wsp_uchybu_x14, wsp_uchybu_x15, wsp_uchybu_x16, wsp_uchybu_x17, wsp_uchybu_x18, wsp_uchybu_x19, wsp_uchybu_x20 }; Rysuj_wykres(Wyjscie, Brushes.Red, Canvas_Y, wspolrzedne_x_wyjscie, wspolrzedne_y_wyjscie, czas_pracy_ukladu * Calka.krok); if (RB_uchyb.IsChecked == true) { Rysuj_wykres(Uchyb, Brushes.Blue, Canvas_E, wspolrzedne_x_uchyb, wspolrzedne_y_uchyb, czas_pracy_ukladu * Calka.krok); } else { Rysuj_wykres(Wejscie, Brushes.Blue, Canvas_E, wspolrzedne_x_uchyb, wspolrzedne_y_uchyb, czas_pracy_ukladu * Calka.krok); } }