~~NOCACHE~~ ~~REVEAL theme=simple&size=1024x800~~ ====== Lab. 13 Równania różniczkowe - zagadnienie początkowe ====== ===== Równania różniczkowe ==== Przykład: $$\frac{dy}{dx} = 3 xy $$ $$x^2 y'' + axy' + y = 0$$ Równanie różniczkowe zwyczajne - jedna zmienna niezależna\\ Rząd równania - rząd najwyższej pochodnej \\ Szukamy funkcji $y(x)$ \\ Rozwiązanie numeryczne: wartość funkcji $y(x_i)$ w węzłach $x_i$ ===== Zagadnienie początkowe ===== Równanie różniczkowe zwyczajne rzędu pierwszego $$ \frac{dy}{dx} = f(x, y)$$ warunek początkowy $$ y(x_0) = y_0 $$ ===== Metoda Eulera ===== Wartości funkcji $y(x_i)$ w kolejnych punktach $x_i$ ze stałym krokiem $h = x_{i+1} -x_{i}$ $$ y_{i+1} = y_{i} + h \cdot f(x_i, y_i) $$ {{ zajecia:mn1_2021_2:euler2.png?500 | }} ===== Błędy ===== **Błąd lokalny** (pojedynczego kroku) - proporcjonalny do $h^2$ $$ E_a = \frac{f'(x_i,y_i)\cdot h^2}{2!}$$ **Błąd globalny** - akumuluje błędy z wszystkich kroków, można pokazać, że jest proporcjonalny do $h$ \\ Im mniejszy krok tym lepsza dokładność metody ale dla bardzo małych $h$ zaczynają dominować błędy zaokrągleń ===== Przykład ===== Rozwiążmy problem początkowy $$\frac{dy}{dt} = y, \qquad y(0)=1 $$ Rozwiązanie analityczne jest postaci $y = e^t$ ===== ===== #include #include double f(double t, double y) { return y; } int main() { double h=0.1, y, t; int i; t=0.0; y = 1.0; printf("t Euler Exact\n"); for (i=0; i<= 10; i++) { printf("%lf %lf %lf\n", t, y, exp(t)); y=y+h*f(t, y); t=t+h; } return 0; } ===== Zmodyfikowane metody Eulera ===== Metoda **midpoint** $$ y_{i+1} = y_i + h\cdot f\left(x_i + \frac{1}{2}h, \, y_i + \frac{1}{2} h f(x_i, y_i)\right)$$ Metoda **Heuna** $$ y_{i+1} = y_i + h\cdot \left( \frac{1}{2} f(x_i, y_i) + \frac{1}{2} f\left(x_i + h, y_i + h f(x_i, y_i)\right) \right)$$ Metoda **Ralstona** $$ y_{i+1} = y_i + h\cdot \left( \frac{1}{3} f(x_i, y_i) + \frac{2}{3} f\left(x_i + \frac{3}{4} h, y_i + \frac{3}{4}h f(x_i, y_i)\right) \right)$$ ===== Zadanie ===== Napisz program, który rozwiąże równanie różniczkowe $$\frac{dy}{dx} = y - \frac{2x}{y}$$ z warunkiem początkowym $y(0) = 1$. \\ Zaimplementuj rozwiązanie z użyciem 3 metod: Heuna , midpoint i Ralstona. \\ Dla podanej przez użytkownika liczby zastosowanych przedziałów program wypisuje wartości funkcji $y(x)$ wyznaczonych w równoodległych węzłach na odcinku $ x \in [0, 2]$. Dla każdego węzła wyznacz i wypisz błąd bezwzględny oraz błąd względny metody, wiedząc że dokładne rozwiązanie jest postaci $$y_d = \sqrt{2x+1}$$. ===== Dodatkowe ćwiczenia ===== **Ćw. 1**