root/applications/doprava/texty/novotny_vyzk_LQ/Implementation/Minimalization.tex @ 1434

Revision 1434, 6.3 kB (checked in by jabu, 12 years ago)

finalni verze

Line 
1
2
3% Kvadratické kritérium ve tvaru
4% \begin{equation}\label{eq:J}
5%  J = \sum_{t=0}^h x(t)^T Q x(t) + u(t)^T R u(t) \;, 
6% \end{equation}
7% kde $Q$ a $R$ jsou diagonální pozitivně definitní matice vah,
8% rozepíšeme pomocí vztahu \ref{eq:prechod_mat_po_subs}
9% a budeme minimalizovat pro jednotlivá $t$ podle $u(t)$.
10% Proměnná $u(h)$ se v kritériu vyskytuje pouze ve členu
11% \begin{equation}
12% u(h)^T Ru(h)
13% \end{equation}
14% a tedy musí být $u(h) = 0$. $u(h - 1)$ se vyskytuje ve členech
15% \begin{equation}
16%  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) \;,
17% \end{equation}
18% což lze pomocí složených vektorů a matic přepsat do tvaru
19% \begin{equation} \label{eq:J_sloz}
20%  (u(h-1)^T, x(h - 1)^T )
21%   \left( \begin{array}{cc}
22%           B^T \sqrt{Q}^T & \sqrt{R}^T \\
23%         A^T \sqrt{Q}^T & 0
24%         \end{array}
25%   \right) 
26%   \left( \begin{array}{cc}
27%            \sqrt{Q} B & \sqrt{Q} A \\
28%         \sqrt{R} & 0
29%         \end{array}
30%   \right)
31%   \left( \begin{array}{c}
32%          u(h-1) \\
33%           x(h - 1)
34%         \end{array}
35%   \right) \;,
36% \end{equation}
37% kde symbolem $\sqrt{Q}$ myslíme matici, pro níž platí $\sqrt{Q}^T \sqrt{Q} = Q$.
38% Matice $Q$ a $R$ jsou pozitivně definitní diagonální matice, takže $\sqrt{Q}$ bude také
39% pozitivně definitní diagonální a její diagonální prvky budou rovny odmocnině
40% příslušných prvků původní matice $Q$.
41% Složenou matici
42% \begin{equation} 
43%   M_0 =  \left( \begin{array}{cc}
44%            \sqrt{Q} B & \sqrt{Q} A \\
45%         \sqrt{R} & 0
46%         \end{array}
47%   \right)
48% \end{equation}
49% můžeme pomocí QR dekompozice rozložit na součin
50%
51% \begin{equation}
52%  M_0 = M_R M_Q ,
53% \end{equation}
54% kde $M_Q$ je horní trojůhelníková matice a $M_R$ je matice ortonormální.
55% Pro ortonormální matici $M_R$ platí
56% \begin{equation}
57%  M_R^T M_R = I \;,
58% \end{equation}
59% neboť její zloupce jsou vzájemně ortogonální a normované na jednotku.
60% Z toho plyne, že součin matic $M_0^T M_0$ vyskytující se v členu \ref{eq:J_sloz}
61% můžeme pomocí QR rozlkladu převést na tvar
62% \begin{equation}
63%  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 \;,
64% \end{equation}
65% kde
66% \begin{equation}
67%  M_Q =  \left( \begin{array}{cc}
68%           L_u & L \\
69%         0 & L_q
70%         \end{array}
71%   \right) \;,
72% \end{equation}
73% je horní trojůhelníková matice.
74% Člen \ref{eq:J_sloz} poté přejde na tvar
75% \begin{equation}
76%  (\Delta C(h-1)^T, x(h - 1)^T )
77%   \left( \begin{array}{cc}
78%           L_q^T & 0 \\
79%         L^T & L_u^T
80%         \end{array}
81%   \right) 
82%   \left( \begin{array}{cc}
83%           L_u & L \\
84%         0 & L_q
85%         \end{array}
86%   \right)
87%   \left( \begin{array}{c}
88%          u(h-1) \\
89%           x(h - 1)
90%         \end{array}
91%   \right) \;,
92% \end{equation}
93% který můžeme dále upravit na
94% \begin{equation}
95%  ( 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)
96% \end{equation}. Pokud tento člen chceme minimalizovat v proměnné $x(h-1)$, musí nutně platit
97% \begin{equation}
98% u(h-1) = - L_u^{-1} L x(h-1)
99% \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
100% \begin{equation}
101%  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) ) \;,
102% \end{equation}
103% kde se vyskytuje $u(t)$ pouze pro $t = h-2$.
104% Při minimalizaci podle $u(h-2)$ musíme zahrnout i tuto část, člen ve složeném maticovém zápisu
105% tudíž nabyde tvaru
106% \begin{equation}
107%  (u(h-2)^T, x(h-2)^T )
108%   \left( \begin{array}{ccc}
109%           B^T \sqrt{Q}^T & \sqrt{R}^T & L_x A \\
110%         A^T \sqrt{Q}^T & 0 & L_x B
111%         \end{array}
112%   \right) 
113%   \left( \begin{array}{cc}
114%            \sqrt{Q} B & \sqrt{Q} A \\
115%         \sqrt{R} & 0 \\
116%         L_x A & L_x B
117%         \end{array}
118%   \right)
119%   \left( \begin{array}{c}
120%          u(h-2) \\
121%           x(h-2)
122%         \end{array}
123%   \right) \;.
124% \end{equation}
125% Matici
126% \begin{equation}
127%  M = \left( \begin{array}{cc}
128%            \sqrt{Q} B & \sqrt{Q} A \\
129%         \sqrt{R} & 0 \\
130%         L_x A & L_x B
131%         \end{array}
132%   \right) = \left( \begin{array}{c}
133%            M_0  \\
134%         L_x A \; L_x B
135%         \end{array}
136%   \right)
137% \end{equation}
138% opět převedeme QR dekompozicí do horního trojůhelníkového tvaru a dostaneme vztah pro $u(h-2)$.
139% 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.
140
141\subsubsection{Implementace minimalizace}
142
143Minimaizace kvadratického kritéria je v simulaci prováděna metoduo \texttt{mat L( const int horizont )} ve třídě
144\texttt{ QuadraticMinimalizator }, které se jako parametry konstruktoru předávají matice \texttt{A}, \texttt{B}, \texttt{L} a \texttt{Q}.
145Pro numerické výpočty je použite knihovna IT++, která umožňuje jednoduché operace s maticemi a vektory syntakticky podobně jako v jazyku
146MATLAB. Jsou zde také implementovány jednoduché algoritmy, jako například pro naše účely potřebný QR rozklad.
147Níž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
148stejně jako v textu výše. Ty, které jsou v kódu použity navíc, jsou popsány v komentářích.
149
150\begin{lstlisting}
151 mat L( const int horizont ) {
152        int xdim = A.cols(); // Dimenze vektoru x
153        int udim = B.cols(); // Dimenze vektoru u
154        mat sqQ = sqrt(Q);   // Odmocninove matice
155        mat sqR = sqrt(R);
156        mat M0, M;
157        mat qrQ;
158        mat L, Ls, Lx, Lu;
159        // sestaveni matice M0
160        M0 = concat_vertical(                           
161                concat_horizontal( sqQ * B,     sqQ * A ),
162                concat_horizontal( sqR,         zeros( udim, xdim ) )
163            );
164        M = M0;
165        // hlavni cyklus
166        for (int h = horizont; h >= 0; h --) {
167            qr(M, L);  // QR rozklad matice M
168            // rozklad matice L na do slozek
169            Lu = L(0,    udim-1,       0,    udim-1);     
170            Lx = L(udim, udim+xdim-1,  udim, udim+xdim-1);
171            Ls = L(0,    udim-1,       udim, udim+xdim-1);
172            // kompozice matice M
173            M = concat_vertical(
174                    M0,
175                    concat_horizontal(Lx * B, Lx * A )
176                );
177        }
178        // navratova hodnota - vysledna matice L : u(t+1) = Lx(t)
179        return - inv(Lu) * Ls;
180    }
181\end{lstlisting}
Note: See TracBrowser for help on using the browser.