~~NOCACHE~~ ~~REVEAL theme=simple&size=1024x800~~ ====== Lab. 3 Różniczkowanie numeryczne ====== ===== Definicja pochodnej ===== $$f^{\prime}(x)=\lim _{h \rightarrow 0} \frac{f(x+h)-f(x)}{h}$$ Z szeregu Tylora $$f(x+h)=f(x)+h f^{\prime}(x)+\frac{h^{2}}{2 !} f^{\prime \prime}(x)+\frac{h^{3}}{3 !} f^{\prime \prime \prime}\left(\xi_{1}\right)$$ Stąd przybliżenie $$f^{\prime}(x)=\frac{f(x+h)-f(x)}{h} + O(h)$$ ===== ===== {{ https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/Derivative.svg/460px-Derivative.svg.png?500 }} ===== Dwupunktowe różnice ===== * dwupunktowe różnice zwykłe (progresywne) $$f^{\prime}\left(x_{i}\right)=\frac{f\left(x_{i+1}\right)-f\left(x_{i}\right)}{h} + O(h)$$ * dwupunktowe różnice wsteczne $$f^{\prime}\left(x_{i}\right)=\frac{f\left(x_{i}\right)-f\left(x_{i-1}\right)}{h} + O(h)$$ * dwupunktowe różnice centralne $$f^{\prime}\left(x_{i}\right)=\frac{f\left(x_{i+1}\right)-f\left(x_{i-1}\right)}{2 h} + O(h^2)$$ ===== Trzypunktowe różnice ===== * trzypunktowe różnice zwykłe (prograsywne) $$f^{\prime}\left(x_{i}\right)=\frac{-3 f\left(x_{i}\right)+4 f\left(x_{i+1}\right)-f\left(x_{i+2}\right)}{2 h} + O(h^2)$$ * trzypunktowe różnice wsteczne $$f^{\prime}\left(x_{i}\right)=\frac{f\left(x_{i-2}\right)-4 f\left(x_{i-1}\right)+ 3 f\left(x_{i}\right)}{2 h} + O(h^2) $$ ===== Przykład ===== Pochodna funkcji $f(x) = e^x$ Wartość dokładna $f'(x) = e^x$ #include #include float exp_diff_for(float x, float h) { return (exp(x+h) - exp(x))/h ; } int main() { int n; float x = 1.0, h, fx, err, ex; ex = exp(x); printf("# exact = %f\n", ex); printf("# h diff error\n"); for(h = 1e-1; h > 1e-6; h = h / 2.0) { fx = exp_diff_for(x, h); err = fabs((ex - fx) / ex); printf("%10.7lf %15.10lf %15.10lf\n", h, fx, err); } return 0; } ===== Ćwiczenie ===== Dodaj do programu wyznaczającego wartość pochodnej funkcji $e^x$ za pomoca różnic zwykłych dokładniejszą metodę (np. dwupunktową różnice centralną, trzypunktową różnicę, ...) i porównaj błąd względny obu metod dla różnych wartości kroku $h$. ===== Błąd zaokrąglenia i obcięcia ===== {{ https://upload.wikimedia.org/wikipedia/commons/4/41/AbsoluteErrorNumericalDifferentiationExample.png?600 }} ===== Druga pochodna ===== * różnice trzypunktowe zwykłe (progresywne) $$f^{\prime \prime}\left(x_{i}\right)=\frac{f\left(x_{i}\right)-2 f\left(x_{i+1}\right)+f\left(x_{i+2}\right)}{h^{2}} + O(h)$$ * różnice trzypunktowe wsteczne $$f^{\prime \prime}\left(x_{i}\right)=\frac{f\left(x_{i-2}\right)-2 f\left(x_{i-1}\right)+f\left(x_{i}\right)}{h^{2}} + O(h)$$ * różnice trzypunktowe centralne $$f^{\prime \prime}\left(x_{i}\right)=\frac{f\left(x_{i-1}\right)-2 f\left(x_{i}\right)+ f\left(x_{i+1}\right)}{h^{2}} + O(h^2)$$ ===== Róźnice wyższego stopnia ==== Zobacz: [[wp>Finite_difference_coefficient]] - współczynniki dla siatki o równoodległych węzłów ===== Zadanie 3 ===== Treść zadania znajduje się w Moodle pod adresem [[https://moodle.umk.pl/WFAIIS/mod/assign/view.php?id=4572|Zadanie 3]] ===== Dodatkowe ćwiczenia ===== **Ćw. 1** Policzyć pochodną funkcji $f(X) = x \sin{x} $ ⁡w punkcie $x= \pi$ korzystając z metody dwupunktowej „w przód” i „w tył” oraz różnicy centralnej. Zbadaj jak zmienia się błąd względny i bezwzględny wyznaczenia pochodnej dla różnych wartości $h = 1, 0.1, 0.01, 0.001, 0.0001, 0.00001$. **Ćw. 2** Policzyć drugą pochodną funkcji $f(X) = x \sin{x} $ ⁡w punkcie $x= \pi$ korzystając z metody trzypunktowej centralnej. Zbadaj jak zmienia się błąd względny i bezwzględny wyznaczenia pochodnej dla różnych wartości $h = 1, 0.1, 0.01, 0.001, 0.0001, 0.00001$. **Ćw. 3** Plik {{https://www.fizyka.umk.pl/~grochu/mn1/files/heart_rate.csv}} zawiera przykład elektrokardiogramu. Sygnał jest rejestrowany z częstotliwością 100Hz. Napisz program, który będzie wykrywał uderzenia serca na podstawie pochodnej napięcia mierzonego na elektrodzie a następnie wyznaczy średnią wartość uderzeń na minutę.