C++ Bc. 4

Z GeoWikiCZ
Přejít na: navigace, hledání
Řešení soustavy lineárních rovnic

Napište funkci reseni(), která pro zadanou horní trojúhelníkovou matici \mathbf T a vektor \mathbf b vypočte řešení soustavy lineárních rovnic \mathbf {T x  = b}. Funkce reseni() přepisuje vstupní vektor (pravou stranu) vypočteným řešením x a testuje všechny možné chyby (nepřípustné dimenze a nulu na hlavní diagonále).

struct Chyba
{
   Chyba(std::string t) : text(t) {}

   std::string text;
};

void reseni(const GNU_gama::Mat<>& U, GNU_gama::Vec<>& x);

V horní trojúhelníkové matici \mathbf T jsou všechny prvky pod hlavní diagonalou nulové, všechny prvky na hlavní diagonále jsou nenulové.

\begin{pmatrix}
 t_{11} & t_{12} & t_{13} & \ldots  & t_{1n}   \\
  0     & t_{22} & t_{23} & \ldots  & t_{2n}   \\
  0     &  0     & t_{33} & \ldots  & t_{3n}   \\
        &        &        & \ldots  &          \\
  0     &  0     & \ldots & t_{n-1,n-1} & t_{n-1,n} \\
  0     &  0     & \ldots &     0     & t_{nn}    
\end{pmatrix}\mathbf x =
\begin{pmatrix}
b_1 \\ b_2 \\ \vdots \\ b_{n-1} \\ b_n
\end{pmatrix}


Řešení (zpětná substituce):

x_{ n } =  b_n/t_{nn}\,

x_{n-1} = (b_{n-1} - t_{n-1, n }x_{ n })/t_{n-1,n-1}\,

x_{n-2} = (b_{n-2} - t_{n-2,n-1}x_{n-1} - t_{n-2, n }x_{ n })/t_{n-2,n-2}\,

x_{n-k} = (b_{n-k} - \sum^n_{j=n-k+1} t_{n-k,j}x_{j})/t_{n-k,n-k}\,

Příklad:

\begin{pmatrix}
  3 & 0 & 3 & 4 & 1\\ 
  0 & 1 & 4 & 2 & 1\\
  0 & 0 & 1 & 0 & 2\\
  0 & 0 & 0 & 2 & 6\\
  0 & 0 & 0 & 0 & 3
\end{pmatrix}\mathbf x =
\begin{pmatrix}
33 \\ 27 \\ 13 \\ 38 \\ 15
\end{pmatrix},\qquad
\mathbf x = 
\begin{pmatrix}
1 \\ 2 \\ 3 \\ 4 \\ 5
\end{pmatrix}\qquad


[ Zpět | C++ | Další ]