Równanie Sylvestera

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj

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 {\textstyle n^2 \times n^2}. (W przypadku poszukiwania rozwiązania 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 jest 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 złożoność obliczeniowa wynosi \Omicron(n^3) operacji arytmetycznych, wykorzystywany jest w pakietach oprogramowania LAPACK, Matlab i GNU Octave (w funkcji lyap).

Zobacz także[edytuj | edytuj kod]