--- title: "Numerické metody" description: "TODO" ---
📌 NOTE
Iterativní metody pro řešení nelineárních rovnic (Newtonova metoda a její modifikace). Přímé metody pro řešení systému lineárních rovnic (Gaussova eliminace, Jacobi, Gauss-Seidel, relaxační metody). Numerická diferenciace, diferenciační schémata. _MA018_
- **Numerická analýza / numerical analysis**\ Oblast matematiky / informatiky zabývající se tvorbou numerických metod a algoritmů, které řeší problémy matematické analýzy (např. derivace, integrály a podobný symbolický balast) pomocí numerické aproximace. [numerical-analysis](#numerical-analysis) Je výhodná v situacích, kdy problém nelze řešit analyticky nebo je to příliš složité a není to (výpočetní) čas. - **Notace chyb** - $x$ je přesná hodnota, - $\tilde{x}$ je aproximace $x$, - $x - \tilde{x}$ je absolutní chyba $\tilde{x}$, - $\lvert x - \tilde{x} \rvert \leq \alpha$ je odhad absolutní chyby, - $\frac{x - \tilde{x}}{x}$ je relativní chyba, - $\left\lvert \frac{x - \tilde{x}}{x} \right\rvert \leq \alpha$ je odhad relativní chyby. - **Numerická stabilita**\ Schopnost numerické metody zpracovat chyby vstupních dat a výpočetních operací. Desetinná čísla jsou v počítačích nevyhnutelně reprezentována nepřesně. Numericky stabilní metody jsou takové, které tyto nepřesnosti **nezhoršují**. [numerical-stability](#numerical-stability) - **Řád metody / order of accuracy / order of approximation**\ Hodnota reprezentující, jak rychle metoda konverguje k výsledku, resp. jak přesný je její odhad. Numerická metoda obvykle konverguje snižováním nějakého _kroku_ $h$. Pokud ho lze zvolit libovolně malý, a lze-li prohlásit, že pro chybu aproximace $E$ platí: [rate](#rate) [numericka-metoda](#numericka-metoda) [order-question](#order-question) ```math \begin{aligned} E(h) &\leq C \cdot h^p \\ E(h) &\in \mathcal{O}(h^p) \end{aligned} ``` kde $C$ je konstanta. Pak $p$ je řád metody. ## Iterativní metody pro řešení nelineárních rovnic - **Root-finding problem**\ Problém nalezení _kořenů_ (root) funkce $f$. T.j. takových parametrů $x, ...$, kde funkce vrací 0: [root-finding](#root-finding) ```math f(x, ...) = 0 ``` - **Iterative methods for root-finding problem**\ Metody pro řešení root-finding problemu, které využívají iterativního přístupu. Tedy opakují nějaký výpočet a zpřesňují svůj odhad, dokud nedosáhnou požadované přesnosti. [ma018](#ma018) [root-finding](#root-finding) - **Řád metody / rate of convergence**\ Hodnota reprezentující, jak rychle metoda konverguje k výsledku. [rate](#rate) - **Prostá iterační metoda / metoda pevného bodu / fixed-point iteration**\ Používá se pro rovnice typu $x = g(x)$. 1. Zvolíme počáteční odhad $x_0$. 2. Opakujeme $x_{n+1} = g(x_n)$ dokud $\lvert x_{n+1} - x_n \rvert \leq \alpha$ (kde $\alpha$ je požadovaná přesnost). ![width=400](img/szp02_fixed_point_method.png) - **Newtonova metoda / metoda tečen**\ Používá k odhadu kořene funkce $f$ její tečnu v bodě $x_n$. Iterační funkce je: ```math g(x_{k+1}) = x_k - \frac{f(x_k)}{f'(x_k)} ``` 1. Zvolíme počáteční odhad $x_0$. 2. Další odhad je $x_{n+1} = g(x_n)$, tedy průsečík tečny fukce $f$ v bodě $x_n$ s osou $x$. 3. Opakujeme 2. dokud nedosáhneme požadované přesnosti odhadu. ![width=400](./img/szp02_newton_method.png) - **Metoda sečen / secant method**\ Používá k odhadu kořene funkce $f$ sečny, resp. _finite difference_, které aproximují derivaci funkce $f$. Díky tomu není potřeba znát derivaci funkce $f$. Iterační funkce je: ```math g(x_{k+1}) = x_k - \frac{f(x_k)(x_k - x_{k-1})}{f(x_k) - f(x_{k-1})} ``` ![width=400](./img/szp02_secant_method.png) - **Metoda regula falsi**\ Je _bracketing_ metoda, tedy metoda, která využívá intervalu, ve kterém se nachází kořen. Nemusí se použít iterativně, ale v iterativní podobě tento interval postupně zmenšuje. [regula-falsi](#regula-falsi) ```math x_{k+1} = x_k - \frac{x_k - x_s}{f(x_k) - f(x_s)} f(x_k) ``` kde $s$ je největší index takový, že $f(x_k)f(x_s) < 0$. ## Přímé metody pro řešení systému lineárních rovnic ### Gaussova eliminace Systém rovnice je přepsán do matice. Gaussova eliminace je posloupnost operací, jejichž cílem je převést matici do horní trojúhelníkové matice (_row echelon form_). [gauss-elimination](#gauss-elimination) Povoleny jsou následující operace: - výměna dvou řádků, - vynásobení řádku nenulovou konstantou, - přičtení násobku jednoho řádku k jinému. ### Jacobiho iterační metoda Iterativní algoritmus pro řešení soustavy lineárních rovnic. Rozděluje vstupní matici lineárních rovnic na matici diagonál $D$, dolní trojúhelníkovou matici $L$ a horní trojúhelníkovou matici $U$. [jacobi-method](#jacobi-method) Nechť $A\mathbf{x} = \mathbf{b}$ je systém $n$ lineárních rovnic. Tedy: ```math A = \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{n1} & a_{n2} & \cdots & a_{nn} \end{bmatrix}, \qquad \mathbf{x} = \begin{bmatrix} x_{1} \\ x_2 \\ \vdots \\ x_n \end{bmatrix} , \qquad \mathbf{b} = \begin{bmatrix} b_{1} \\ b_2 \\ \vdots \\ b_n \end{bmatrix}. ``` Algoritmus vypadá takto: 1. Zvolíme počáteční odhad $\mathbf{x}^{(0)}$, nejčastěji $\vec{0}$. 2. Nový odhad získáme ze vztahu: ```math \mathbf{x}^{(k+1)} = D^{-1}(\mathbf{b} - (L + U)\mathbf{x}^{(k)}) ``` Jelikož $L + U = A - D$, dá to zapsat i jako: ```math \mathbf{x}^{(k+1)} = D^{-1}\mathbf{b} + (I - D^{-1} A) \mathbf{x}^{(k)} ``` - **Spektrální poloměr**\ Spektrální poloměr $\rho$ matice $A$ je největší absolutní hodnota vlastního čísla matice $A$. ```math \rho(A) = \max_{i=1,\ldots,n} |\lambda_i| ``` - **(Řádková) diagonální dominance**\ Matice $A$ je diagonálně dominantní, pokud platí: ```math |a_{ii}| > \sum_{j=1, j \neq i}^n |a_{ij}| ``` Tedy absolutní hodnota prvku na diagonále je větší než součet absolutních hodnot všech ostatních prvků v řádku. - _Striktní_: nerovnost je ostrá ($>$). - _Slabá_: nerovnost je neostá ($\ge$). Analogicky se definuje sloupcová diagonální dominance. - **Konvergence Jacobiho metody**\ Jacobiho metoda konveguje pokud všechny následující podmínky: 1. Nechť $T_j = I - D^{-1} A$ je matice iterace Jacobiho metody. Pak Jacobiho metoda konverguje, pokud: ```math \rho(T_j) < 1 ``` 2. Jacobiho metoda konverguje pro libovolný počáteční odhad $\mathbf{x}^{(0)}$, pokud $A$ je diagonálně dominantní (sloupcově nebo řádkově). ### Gaussova-Seidelova iterační metoda Iterativní metoda pro řešení soustavy lineárních rovnic. Dělí vstupní matici na spodní trojúhelníkovou matici $L_*$ (včetně diagonály, tedy $L_* = D + L$) a striktně horní trojúhelníkovou matici $U$ (diagonála je nulová). Algoritmus vypadá takto: [gauss-seidel](#gauss-seidel) 1. Zvolíme počáteční odhad $\mathbf{x}^{(0)}$. 2. Nový odhad získáme ze vztahu: ```math \mathbf{x}^{(k+1)} = L_*^{-1}(\mathbf{b} - U\mathbf{x}^{(k)}). ``` Alternativně: ```math \begin{aligned} T_{gs} &= (D + L)^{-1} U = L_*^{-1} U \\ \mathbf{x}^{(k+1)} &= T_{gs} \mathbf{x}^{(k)} + g,\quad g = L_*^{-1} \mathbf{b} \end{aligned} ``` - **Konvergence Gaussovy-Seidelovy metody**\ Analogicky jako u Jacobiho metody, ale místo matice $T_j$ se použije matice $T_{gs} = (D + L)^{-1} U$. ### Relaxační iterativní metody Modifikace Gauss-Seidelovy metody. Využívá parametr $\omega$, který určuje, jak moc se má nový odhad lišit od předchozího. Vztah pro další iteraci se mění na: [relaxation-method](#relaxation-method) ```math \begin{align*} \mathbf{x}^{(k+1)} &= (D - \omega L)^{-1} [(1-\omega)D + \omega U]\mathbf{x}^{(k)} + \omega(D - \omega L)^{-1}\mathbf{b} \\ T_\omega &= (D - \omega L)^{-1} [(1-\omega)D + \omega U] \end{align*} ``` - Pro $0 < \omega < 1$ se názývá metodou dolní relaxace. Je vhodná v případě, kdy Gauss-Seidel nekonverguje. - Pro $\omega = 1$ je totožná s Gauss-Seidelem. - Pro $\omega > 1$ se názývá metodou horní relaxace / SOR metodou. Zrychluje konvergenci Gauss-Seidela. ### Dekompozice matic Metody podobné Gaussově eliminaci, ale s vlastnostmi, které mohou být vyhodné. - **LU dekompozice**\ Rozdělení matice $A$ na horní dolní trojúhelníkovou matici $L$ a horní trojúhelníkovou matici $U$, tak že $A = LU$. Je to v podstatě Gaussova eliminace. Matice $P$ je permutační matice, která prohazuje řádky: ```math P \cdot A = L \cdot U ``` Platí, že: ```math \begin{aligned} A \cdot x &= b \\ A &= LU \\ LU \cdot x &= b \end{aligned} ``` Původní problém řešení soustavy linárních rovnic se tedy převede na dva problémy: ```math \begin{aligned} y &= U \cdot x \\ L \cdot y &= b \\ \end{aligned} ``` Řešíme tedy dva systémy rovnic s trojúhelníkovými maticemi. Oproti Gaussovi je výhodnější pro: - Opakované řešení soustav s maticí $A$ a různými pravými stranami $b$. - Inverzi matice $A$. - Výpočet determinantu matice $A$. - **QR dekompozice**\ Rozdělení matice $A$ na ortogonální matici $Q$ a horní trojúhelníkovou matici $R$ (už ne $U$), tak že $A = QR$. ```math \begin{aligned} A \cdot x &= b \\ A = QR \Rightarrow U \cdot x &= Q^T \cdot b \\ \end{aligned} ``` Protože je ortogonální a tedy $Q^{-1} = Q^T$. Má lepší numerickou stabilitu než LU dekompozice. ## Numerická diferenciace Algoritmy numerické diferenciace (derivace) počítají odhady derivace reálných funkcí -- aproximují $f'(x)$. Využívají při tom známé hodnoty této funkce a jiné znalosti a předpoklady. [differentiation](#differentiation) Numerická diferenciace se využívá pro aproximaci differenciálních rovnic (převodem na _diferenční rovnice_). - **Langrangeova interpolace**\ Pokud známe hodnoty $f$ můžeme mezi nimi interpolovat pomocí Lagrangeova polynomu a derivovat ten, protože derivovat polynomy je jednoduché. **❗ IMPORTANT**\ Lagrangeovu interpolaci řeší část otázky [Křivky a povrchy](../krivky-a-povrchy/). - **Finite difference method**\ Rodina metod numerické diferenciace, které využívají _konečné diference_. Tedy approximují limitu v definici derivace malými posuny ve vstupních hodnotách diferenciovaných funkcí. [finite-difference-method](#finite-difference-method) Jednotlivým "odstínům" -- konkrétním výpočetním vzorcům -- téhle metody se říká _diferenciační schémata_. **💡 TIP**\ Abych pravdu řekl, nepodařilo se mi najít zdroj pro konkrétní definici pojmu "diferenciační schéma". - **(Konečné) diference prvního řádu / first-order (finite) differences**\ Nejjednodušší schéma numerické diferenciace. Vychází z definice derivace. [finite-difference](#finite-difference) - _Dopředná diference / forward (finite) difference_ ```math \frac{\partial f}{\partial x} \approx \frac{f(x+h) - f(x)}{h} ``` - _Zpětná diference / backward (finite) difference_ ```math \frac{\partial f}{\partial x} \approx \frac{f(x) - f(x-h)}{h} ``` - _Centrální diference / central (finite) difference_ ```math \frac{\partial f}{\partial x} \approx \frac{f(x+h) - f(x-h)}{2h} ``` kde $h$ je kladné číslo napodobující nekonečně malou změnu (limitu) v definici derivace. Může to být konstanta, může ale být i zvoleno adaptivně. **💡 TIP**\ Tečna je tak napodobena sečnou. - **Richardson extrapolation**\ Způsob zlepšení rate of convergence iterativních metod. [richardson](#richardson) ## Zdroje - [[[ma018,1]]] [MA018 Numerical Methods (podzim 2019)](https://is.muni.cz/auth/el/fi/podzim2019/MA018/) - [[[numerical-analysis,2]]] [Wikipedia: Numerical analysis](https://en.wikipedia.org/wiki/Numerical_analysis) - [[[root-finding,3]]] [Wikipedia: Root-finding algorithms](https://en.wikipedia.org/wiki/Root-finding_algorithms) - [[[rate, 4]]] [Wikipedia: Rate of convergence](https://en.wikipedia.org/wiki/Rate_of_convergence) - [[[regula-falsi,5]]] [Wikipedia: Regula falsi](https://en.wikipedia.org/wiki/Regula_falsi) - [[[gauss-elimination,6]]] [Wikipedia: Gaussian elimination](https://en.wikipedia.org/wiki/Gaussian_elimination) - [[[jacobi-method,7]]] [Wikipedia: Jacobi method](https://en.wikipedia.org/wiki/Jacobi_method) - [[[gauss-seidel,8]]] [Wikipedia: Gauss-Seidel method](https://en.wikipedia.org/wiki/Gauss%E2%80%93Seidel_method) - [[[relaxation-method, 9]]] [Wikipedia: Relaxation (iterative method)]() - [[[differentiation, 10]]] [Wikipedia: Numerical differentiation](https://en.wikipedia.org/wiki/Numerical_differentiation) - [[[finite-difference, 11]]] [Wikipedia: Finite difference](https://en.wikipedia.org/wiki/Finite_difference) - [[[finite-difference-method, 12]]] [Wikipedia: Finite difference method](https://en.wikipedia.org/wiki/Finite_difference_method) - [[[richardson,13]]] [Wikipedia: Richardson extrapolation](https://en.wikipedia.org/wiki/Richardson_extrapolation) - [[[linear-eq, 14]]] [Wikipedia: System of linear equations](https://en.wikipedia.org/wiki/System_of_linear_equations) - [[[numerical-stability, 15]]] [Wikipedia: Numerical stability](https://en.wikipedia.org/wiki/Numerical_stability) - [[[numericka-metoda,16]]] [Wikipedia: Numerická metoda](https://cs.wikipedia.org/wiki/Numerick%C3%A1_metoda) - [[[order-question,17]]] [What is the intuitive meaning of order of accuracy and order of approximation?](https://math.stackexchange.com/questions/2873291/what-is-the-intuitive-meaning-of-order-of-accuracy-and-order-of-approximation)