---
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.
> <br>
> _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]

  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]

- **Řá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] [^numericka-metoda] [^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]

  ```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] [^root-finding]
- **Řád metody / rate of convergence**\
  Hodnota reprezentující, jak rychle metoda konverguje k výsledku. [^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]

  ```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] 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]

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]

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]

```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]

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](../szp05_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]

  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]

  - _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]


[^ma018]: [MA018 Numerical Methods (podzim 2019)](https://is.muni.cz/auth/el/fi/podzim2019/MA018/)
[^numerical-analysis]: [Wikipedia: Numerical analysis](https://en.wikipedia.org/wiki/Numerical_analysis)
[^root-finding]: [Wikipedia: Root-finding algorithms](https://en.wikipedia.org/wiki/Root-finding_algorithms)
[^rate]: [Wikipedia: Rate of convergence](https://en.wikipedia.org/wiki/Rate_of_convergence)
[^regula-falsi]: [Wikipedia: Regula falsi](https://en.wikipedia.org/wiki/Regula_falsi)
[^gauss-elimination]: [Wikipedia: Gaussian elimination](https://en.wikipedia.org/wiki/Gaussian_elimination)
[^jacobi-method]: [Wikipedia: Jacobi method](https://en.wikipedia.org/wiki/Jacobi_method)
[^gauss-seidel]: [Wikipedia: Gauss-Seidel method](https://en.wikipedia.org/wiki/Gauss%E2%80%93Seidel_method)
[^relaxation-method]: [Wikipedia: Relaxation (iterative method)](<https://en.wikipedia.org/wiki/Relaxation_(iterative_method)>)
[^differentiation]: [Wikipedia: Numerical differentiation](https://en.wikipedia.org/wiki/Numerical_differentiation)
[^finite-difference]: [Wikipedia: Finite difference](https://en.wikipedia.org/wiki/Finite_difference)
[^finite-difference-method]: [Wikipedia: Finite difference method](https://en.wikipedia.org/wiki/Finite_difference_method)
[^richardson]: [Wikipedia: Richardson extrapolation](https://en.wikipedia.org/wiki/Richardson_extrapolation)
[^linear-eq]: [Wikipedia: System of linear equations](https://en.wikipedia.org/wiki/System_of_linear_equations)
[^numerical-stability]: [Wikipedia: Numerical stability](https://en.wikipedia.org/wiki/Numerical_stability)
[^numericka-metoda]: [Wikipedia: Numerická metoda](https://cs.wikipedia.org/wiki/Numerick%C3%A1_metoda)
[^order-question]: [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)
