błąd w metodach numerycznych dla równań różniczkowych II-go rzędu

0

Mam taki problem z długą symulacją numeryczną, np. 10000 lat z krokiem, powiedzmy dt = 10 minut.

Jaki będzie błąd w takiej symulacji?

W kolejnych krokach sumujemy ciągle, nieważne jaką metodę użyjemy - im wyższą tym gorzej, ponieważ tu stale wyliczamy sumy typu:

y(i+1) = y(i) + v(i)dt + a(i)dt^2/2 + ...

im lepsza metoda - wyższego rzędu, tym mniejszy krok czasu dt, ale wtedy sumujemy więcej składników z tego szeregu,
jawnie lub nie - nie ma to znaczenia...

Zatem wykonując np. miliard kroków: miliard * 10 minut = 19 tysięcy lat.

a wtedy sumuję chyba ze sto miliardów liczby przy metodzie rzędu 4, jak RK4.
Jaki to ma sens? Przecież błąd może być w zasadzie dowolny, biorąc tylko pod uwagę samą wadę tego sumowania:

http://en.wikipedia.org/wiki/Kahan_summation_algorithm

nietrudno wymyślić wariant, w którym błąd sumy będzie dowolnie wielki, np. dla obliczeń na double:
1.0 + 1e-16 + 1e-16 + ... trylion sztuk = 1.0, zamiast 101 !!!

0

to jest algorytm Eulera, który wprowadza błąd systematyczny.
Doczytaj o: algorytm Verlata, algorytm LeapFrog albo wspomniany przez ciebie (ale nie zastosowany) algorytm Rungego-Kutty.

0
MarekR22 napisał(a):

to jest algorytm Eulera, który wprowadza błąd systematyczny.
Doczytaj o: algorytm Verlata, algorytm LeapFrog albo wspomniany przez ciebie (ale nie zastosowany) algorytm Rungego-Kutty.

Błędy są takie same, a i nawet większe, niestety:

y(i+1) = y(i) + vt + at^2/2 + ...

w praktyce y(i) jest zawsze wielkie w porównaniu do pozostały składników,
bo zarówno v, a, .. jak i t - krok czasu są małe, więc arytmetyka na floatach zawsze spierdoli wynik - im krótszy krok tym bardziej!

0

Jaki będzie błąd w takiej symulacji?

Błąd symulacji będzie zależał od tego jak stabilny jest układ, który symulujesz. Układy stabilne nie kumulują błędów, układy niestabilne będą błędy wzmacniać. A błędy są dwojakiego rodzaju:

  • arytmetyczne (ograniczona precyzja reprezentacji)
  • obcięcia (skończone dt, skończona liczba wyrazów ciągu wielomianu, którym przybliżamy wartości analizowanej funkcji)

Bawiłem się kiedyś w pisanie symulatorów elektroniki i tam te drugie były znacznie gorsze.

0
Krolik napisał(a):

Jaki będzie błąd w takiej symulacji?

Błąd symulacji będzie zależał od tego jak stabilny jest układ, który symulujesz. Układy stabilne nie kumulują błędów, układy niestabilne będą błędy wzmacniać. A błędy są dwojakiego rodzaju:

  • arytmetyczne (ograniczona precyzja reprezentacji)
  • obcięcia (skończone dt, skończona liczba wyrazów ciągu wielomianu, którym przybliżamy wartości analizowanej funkcji)

Bawiłem się kiedyś w pisanie symulatorów elektroniki i tam te drugie były znacznie gorsze.

Dobra.
A co się dzieje gdy mamy funkcję wielu zmiennych, znaczy taki wektor... macierz, czy jak to tam zwać.

I teraz masz taki skecz:
jedna z tych funkcji ma strasznie długi okres np. 1000,
a pozostałe funkcje mają już drastycznie krótsze okresy, 0.1, 2, czy 5.

w ramach elektryki to chyba byłoby coś w stylu układu wielu kondensatorów/solenoidów,
z których tylko jeden jest strasznie wielki.. chyba pojemność ma z tysiąc razy większą od pozostałych.

Jak to wtedy numerycznie wyjdzie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1