Oscylator harmoniczny

Równania różniczkowe i całkowe. Równania różnicowe. Transformata Laplace'a i Fouriera oraz ich zastosowanie w równaniach różniczkowych.
pp2022
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 5 sty 2022, o 03:32
Płeć: Mężczyzna
wiek: 29

Oscylator harmoniczny

Post autor: pp2022 »

Dzień dobry,

Szukam tylko potwierdzenia, czy dobrze zrobiłem rozwiązanie numeryczne...

Mam do rozwiązania numerycznie niemal ten sam przykład co kolega wyżej - oscylator harmoniczny (sprężyna, masa i tłumienie), także metodą Rungego Kutty 4-go rzędu.

Dostałem układ równań, który muszę rozwiązać numerycznie:

\(\displaystyle{
\frac{dV}{dt} = - \frac{c\cdot V}{m} - \frac{k \cdot x}{m}
}\)


oraz:

\(\displaystyle{
\frac{dx}{dt} = V
}\)


Czyli układ równań pierwszego rzędu (w pierwszym mamy przyspieszenie w drugim prędkość)

Chciałem prosić o sprawdzenie, czy dobrze zrobiłem rozwiązanie numeryczne:

Kod: Zaznacz cały

   
   x[0] = init_x
   v[0] = init_V
    
    for i in range(0, liczba_krokow):
        rate(1000)
        k1x = h*v[i]
        k1v = h * przysp(x[i], v[i])
        k2x = h*(v[i]+0.5 * k1v)
        k2v = h * przysp(x[i] + 0.5 * k1x, v[i])
        k3x = h*(v[i]+0.5 * k2v)
        k3v = h * przysp(x[i] + 0.5 * k2x, v[i])
        k4x = h*(v[i]+k3v)
        k4v = h * przysp(x[i] + k3x, v[i])
        x[i + 1] = x[i] + (k1x + 2 * k2x + 2 * k3x + k4x) / 6.0
        v[i + 1] = v[i] + (k1v + 2 * k2v + 2 * k3v + k4v) / 6.0
        xt = x[i]
        Vt = v[i]
a funkcja przyspieszenia to:

Kod: Zaznacz cały

def przysp(x, v):
    return (-c*v-k*x)/m
Kod w Pythonie, ale jest czytelny chyba dla każdego.

Czy wszystko jest dobrze?


Z góry dziękuję za pomoc!
Ostatnio zmieniony 19 sty 2022, o 12:45 przez Jan Kraszewski, łącznie zmieniany 1 raz.
Powód: Nie podpinaj się pod cudze tematy. Symbol mnożenia to \cdot.
janusz47
Użytkownik
Użytkownik
Posty: 7910
Rejestracja: 18 mar 2009, o 16:24
Płeć: Mężczyzna
Podziękował: 30 razy
Pomógł: 1670 razy

Re: Oscylator harmoniczny

Post autor: janusz47 »

Proszę przetestować program, przyjmując niezbędne wartości liczbowe do jego uruchomienia. Wtedy będziemy mogli powiedzieć czy program jest numerycznie poprawny.
ODPOWIEDZ