Równanie Sylvestera

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, wyszukiwania

Równanie Sylvestera - często spotykane w teorii sterowania równanie macierzowe mające postać:

A X + X B = C\,

gdzie A,B,X,C\, to macierze o wymiarach n \times n.

Istnienie i jednoznaczność rozwiązania[edytuj | edytuj kod]

Korzystając z notacji iloczynu Kroneckera i operatora wektoryzacji \operatorname{vec} powyższe równanie może być zapisane w postaci

 (I_n \otimes A +  B^T \otimes I_n) \operatorname{vec}X = \operatorname{vec}C\,

gdzie I_n\, jest macierzą jednostkową o rozmiarach n \times n\,. W takiej postaci równanie Sylvestera może być interpretowane jako układ liniowy o wymiarze n^2 \times n^2. (W przypadku poszukiwania rozwiazania numerycznego zapis równania w takiej formie nie jest zalecany ponieważ rozwiązanie równania w wersji układu liniowego jest niewydajne obliczeniowo i źle uwarunkowane).

Jeśli A=ULU^{-1}\, i B^T=VMV^{-1}\,kanonicznymi formami Jordana macierzy A\, i B^T\,, a \lambda_i\, i \mu_j\, są ich wartościami własnymi, można zapisać:

I_n \otimes A +  B^T \otimes I_n = (V\otimes U)(I_n \otimes L +  M \otimes I_n)(V \otimes U)^{-1}.

Ponieważ (I_n \otimes L +  M \otimes I_n)\, jest górną macierzą trójkątną z elementami na przekątnej \lambda_i+\mu_j\,, macierz po lewej stronie jest osobliwa wtedy i tylko wtedy gdy istnieje i\, i j\, takie, że \lambda_i=-\mu_j\,.

W ten sposób dowiedzione zostało, że równanie Sylvestera ma jednoznaczne rozwiązanie wtedy i tylko wtedy macierze A\, i -B\, nie mają wspólnych wartości własnych.

Rozwiązanie numeryczne[edytuj | edytuj kod]

Klasyczny algorytm rozwiązania numerycznego równania Sylvestera to algorytm Bartelsa-Stewarta, na który składa się przekształcenie macierzy A\, i B\, do postaci Schura (zob. rozkład Schura) za pomocą algorytmu QR a następnie rozwiązanie układu trójkątnego poprzez podstawienie w tył dla macierzy trójkątnej. Algorytm ten, którego wydajność obliczeniowa wynosi O(n^3)\, operacji arytmetycznych wykorzystywany jest w pakietach oprogramowania LAPACK, Matlab and GNU Octave (w funkcji lyap).

Zobacz także[edytuj | edytuj kod]