Metody Rungego-Kutty

układy równań różniczkowych

równania różniczkowe wyższego rzędu

Równanie różniczkowe zwyczajne rzędu pierwszego warunek początkowy

Szukamy funkcji . Rozwiązanie numeryczne: wartości funkcji w węzłach

Ogólna postać gdzie stałe

Metoda Eulera, pierwszego rzędu, błąd obcięcia

Metoda Heuna, midpoint, Ralstona, drugiego rzędu, błąd obcięcia

Metada Rungego-Kutty 4 rzędu, błąd obcięcia , najlepszy stosunek między dokładnością a liczbą obliczeń

Szukamy

spełniających

z warunkiem początkowym

Rozwiązanie układu równań różniczkowych za pomocą metod R-K

wyznaczamy dla wszystkich równań

wyznaczamy dla wszystkich równań

...

mając wszystkie wyznaczamy przybliżenie dla każdego z równań

Model SIR (S - susceptible, I - infected, R - recovered)

prawd. zarażenia przy spotkaniu dwóch osobników

średni czas zdrowienia

Załóżmy, że dni

Przyjmijmy warunki początkowe .

Użyjmy metody Heuna

do wyznaczenia oraz w czasie

#include <stdio.h> #include <math.h> double a = 0.0002; double T = 12; double f_s(double t, double s, double i) { return - a*s*i; } double f_i(double t, double s, double i) { return a*s*i - i/T; } int main() { double h=0.05, t0=0.0, tk=200, t; double n = 1000; /* populacja */ double i0 = 1; /* jeden zainfekowany */ double s0 = n - i0; /* liczba podatnych */ double i = i0, s = s0; double k_s1, k_s2, k_i1, k_i2; printf("# t S I R\n"); for (t=t0; t<= tk; t=t+h) { printf("%6.2f %6.1f %6.1f %6.1f\n", t, s, i, n-s-i); k_s1 = f_s(t, s, i); k_i1 = f_i(t, s, i); k_s2 = f_s(t+h, s + k_s1 * h, i + k_i1 * h); k_i2 = f_i(t+h, s + k_s1 * h, i + k_i1 * h); s = s + 0.5 * (k_s1 + k_s2 ) * h; i = i + 0.5 * (k_i1 + k_i2 ) * h; } return 0; }

Równanie różniczkowe rzędu

można zamienić na układ równań pierwszego rzędu podstawiając

otrzymujemy

Napisz program rozwiązujący równanie różniczkowe opisujące drgania tłumione sprężyny z warunkiem początkowym .
Zaimplementuj rozwiązanie z użyciem metody Rungego-Kutty czwartego rzędu z krokiem całkowania .
Przyjmij wartość współczynnika tłumienia , częstotliwość drgań własnych Hz.
Dla podanej przez użytkownika wartości czasu końcowego program wypisuje w kolejnych liniach wartości czasu , amplitudy oraz prędkości w kolejnych węzłach całkowania poczynając od kończąc na .

Ćw. 1