C++ Bc. 32

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

Napište funkci reseni(), která pro zadanou dolní 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 dolní trojúhelníkové matici \mathbf T jsou všechny prvky nad hlavní diagonalou nulové, všechny prvky na hlavní diagonále jsou nenulové.

\begin{pmatrix}
 t_{11}    &  0        &  0     & \ldots  &  0       \\
 t_{21}    & t_{22}    &  0     & \ldots  &  0   \\
 t_{31}    & t_{32}    & t_{33} & \ldots  &  0   \\
           &           &        & \ldots  &          \\
 t_{n-1,1} & t_{n-1,2} & \ldots & t_{n-1,n-1} &  0 \\
 t_{n1}    & t_{n2}    & \ldots & t_{n,n-1}     & t_{nn}    
\end{pmatrix}\mathbf x =
\begin{pmatrix}
b_1 \\ b_2 \\ \vdots \\ b_{n-1} \\ b_n
\end{pmatrix}

Řešení (přímá substituce):

x_{1} =  b_{1}/t_{11}\,

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

x_{3} = (b_{3} - t_{31}x_{1} - t_{32}x_{2})/t_{33}\,

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

Příklad:

\begin{pmatrix}
  3 & 0 & 0 & 0 & 0\\ 
  0 & 1 & 0 & 0 & 0\\
  3 & 4 & 1 & 0 & 0\\
  4 & 2 & 0 & 2 & 0\\
  1 & 1 & 2 & 6 & 3
\end{pmatrix}\mathbf x =
\begin{pmatrix}
3 \\ 2 \\ 14 \\ 16 \\ 48
\end{pmatrix},\qquad
\mathbf x = 
\begin{pmatrix}
1 \\ 2 \\ 3 \\ 4 \\ 5
\end{pmatrix}\qquad

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