% Kvadratické kritérium ve tvaru % \begin{equation}\label{eq:J} % J = \sum_{t=0}^h x(t)^T Q x(t) + u(t)^T R u(t) \;, % \end{equation} % kde $Q$ a $R$ jsou diagonální pozitivně definitní matice vah, % rozepíšeme pomocí vztahu \ref{eq:prechod_mat_po_subs} % a budeme minimalizovat pro jednotlivá $t$ podle $u(t)$. % Proměnná $u(h)$ se v kritériu vyskytuje pouze ve členu % \begin{equation} % u(h)^T Ru(h) % \end{equation} % a tedy musí být $u(h) = 0$. $u(h - 1)$ se vyskytuje ve členech % \begin{equation} % u(h - 1)^T Ru(h - 1) + (x(h - 1)^T A^T +u(h - 1)^T B^T ) Q ( A x(h - 1) + B u(h - 1) + I_0) \;, % \end{equation} % což lze pomocí složených vektorů a matic přepsat do tvaru % \begin{equation} \label{eq:J_sloz} % (u(h-1)^T, x(h - 1)^T ) % \left( \begin{array}{cc} % B^T \sqrt{Q}^T & \sqrt{R}^T \\ % A^T \sqrt{Q}^T & 0 % \end{array} % \right) % \left( \begin{array}{cc} % \sqrt{Q} B & \sqrt{Q} A \\ % \sqrt{R} & 0 % \end{array} % \right) % \left( \begin{array}{c} % u(h-1) \\ % x(h - 1) % \end{array} % \right) \;, % \end{equation} % kde symbolem $\sqrt{Q}$ myslíme matici, pro níž platí $\sqrt{Q}^T \sqrt{Q} = Q$. % Matice $Q$ a $R$ jsou pozitivně definitní diagonální matice, takže $\sqrt{Q}$ bude také % pozitivně definitní diagonální a její diagonální prvky budou rovny odmocnině % příslušných prvků původní matice $Q$. % Složenou matici % \begin{equation} % M_0 = \left( \begin{array}{cc} % \sqrt{Q} B & \sqrt{Q} A \\ % \sqrt{R} & 0 % \end{array} % \right) % \end{equation} % můžeme pomocí QR dekompozice rozložit na součin % % \begin{equation} % M_0 = M_R M_Q , % \end{equation} % kde $M_Q$ je horní trojůhelníková matice a $M_R$ je matice ortonormální. % Pro ortonormální matici $M_R$ platí % \begin{equation} % M_R^T M_R = I \;, % \end{equation} % neboť její zloupce jsou vzájemně ortogonální a normované na jednotku. % Z toho plyne, že součin matic $M_0^T M_0$ vyskytující se v členu \ref{eq:J_sloz} % můžeme pomocí QR rozlkladu převést na tvar % \begin{equation} % M_0^T M_0 = ( M_R M_Q )^T M_R M_Q = M_Q^T M_R^T M_R M_Q = M_Q^T M_Q \;, % \end{equation} % kde % \begin{equation} % M_Q = \left( \begin{array}{cc} % L_u & L \\ % 0 & L_q % \end{array} % \right) \;, % \end{equation} % je horní trojůhelníková matice. % Člen \ref{eq:J_sloz} poté přejde na tvar % \begin{equation} % (\Delta C(h-1)^T, x(h - 1)^T ) % \left( \begin{array}{cc} % L_q^T & 0 \\ % L^T & L_u^T % \end{array} % \right) % \left( \begin{array}{cc} % L_u & L \\ % 0 & L_q % \end{array} % \right) % \left( \begin{array}{c} % u(h-1) \\ % x(h - 1) % \end{array} % \right) \;, % \end{equation} % který můžeme dále upravit na % \begin{equation} % ( L_u u(h-1) + L_q x(h-1) )^T ( L_uu(h-1) + L_q x(h-1) ) + x(h-1)^T L_q^T L_q x(h-1) % \end{equation}. Pokud tento člen chceme minimalizovat v proměnné $x(h-1)$, musí nutně platit % \begin{equation} % u(h-1) = - L_u^{-1} L x(h-1) % \end{equation}. Zbývající nenulová část $x(h-1)^T L_q^T L_q x(h-1) $ lze přepsat pomocí rovnice \ref{eq:prechod} do tvaru % \begin{equation} % x(h-1)^T L_q^T L_q x(h-1) = ( A x(h-2) + B u(h-2) )^T L_q^T L_q ( A x(h-2) + B u(h-2) ) \;, % \end{equation} % kde se vyskytuje $u(t)$ pouze pro $t = h-2$. % Při minimalizaci podle $u(h-2)$ musíme zahrnout i tuto část, člen ve složeném maticovém zápisu % tudíž nabyde tvaru % \begin{equation} % (u(h-2)^T, x(h-2)^T ) % \left( \begin{array}{ccc} % B^T \sqrt{Q}^T & \sqrt{R}^T & L_x A \\ % A^T \sqrt{Q}^T & 0 & L_x B % \end{array} % \right) % \left( \begin{array}{cc} % \sqrt{Q} B & \sqrt{Q} A \\ % \sqrt{R} & 0 \\ % L_x A & L_x B % \end{array} % \right) % \left( \begin{array}{c} % u(h-2) \\ % x(h-2) % \end{array} % \right) \;. % \end{equation} % Matici % \begin{equation} % M = \left( \begin{array}{cc} % \sqrt{Q} B & \sqrt{Q} A \\ % \sqrt{R} & 0 \\ % L_x A & L_x B % \end{array} % \right) = \left( \begin{array}{c} % M_0 \\ % L_x A \; L_x B % \end{array} % \right) % \end{equation} % opět převedeme QR dekompozicí do horního trojůhelníkového tvaru a dostaneme vztah pro $u(h-2)$. % Tento postup se analogicky aplikuje na každé $u(t)$. Matice $M_0$ je stále stjná, $L_x$ použijeme z předchozího kroku minimalizace. \subsubsection{Implementace minimalizace} Minimaizace kvadratického kritéria je v simulaci prováděna metoduo \texttt{mat L( const int horizont )} ve třídě \texttt{ QuadraticMinimalizator }, které se jako parametry konstruktoru předávají matice \texttt{A}, \texttt{B}, \texttt{L} a \texttt{Q}. Pro numerické výpočty je použite knihovna IT++, která umožňuje jednoduché operace s maticemi a vektory syntakticky podobně jako v jazyku MATLAB. Jsou zde také implementovány jednoduché algoritmy, jako například pro naše účely potřebný QR rozklad. Níže je vložen zdrojový kód metody pro minimalizaci kritéria a získání hodnot řídících parametrů. Proměnné jsou v kódu značeny stejně jako v textu výše. Ty, které jsou v kódu použity navíc, jsou popsány v komentářích. \begin{lstlisting} mat L( const int horizont ) { int xdim = A.cols(); // Dimenze vektoru x int udim = B.cols(); // Dimenze vektoru u mat sqQ = sqrt(Q); // Odmocninove matice mat sqR = sqrt(R); mat M0, M; mat qrQ; mat L, Ls, Lx, Lu; // sestaveni matice M0 M0 = concat_vertical( concat_horizontal( sqQ * B, sqQ * A ), concat_horizontal( sqR, zeros( udim, xdim ) ) ); M = M0; // hlavni cyklus for (int h = horizont; h >= 0; h --) { qr(M, L); // QR rozklad matice M // rozklad matice L na do slozek Lu = L(0, udim-1, 0, udim-1); Lx = L(udim, udim+xdim-1, udim, udim+xdim-1); Ls = L(0, udim-1, udim, udim+xdim-1); // kompozice matice M M = concat_vertical( M0, concat_horizontal(Lx * B, Lx * A ) ); } // navratova hodnota - vysledna matice L : u(t+1) = Lx(t) return - inv(Lu) * Ls; } \end{lstlisting}