Równanie Sylvestera

Z testwiki
Przejdź do nawigacji Przejdź do wyszukiwania

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

AX+XB=C,

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

Istnienie i jednoznaczność rozwiązania

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

(InA+BTIn)vecX=vecC,

gdzie In jest macierzą jednostkową o rozmiarach n×n.

W takiej postaci równanie Sylvestera może być interpretowane jako układ liniowy o wymiarze n2×n2. (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=ULU1 i BT=VMV1kanonicznymi formami Jordana macierzy A i BT, a λi i μj są ich wartościami własnymi, można zapisać:

InA+BTIn=(VU)(InL+MIn)(VU)1.

Ponieważ (InL+MIn) jest górną macierzą trójkątną z elementami na przekątnej λi+μj, macierz po lewej stronie jest osobliwa wtedy i tylko wtedy, gdy istnieje i i j, takie że λi=μ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

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 O(n3) operacji arytmetycznych, wykorzystywany jest w pakietach oprogramowania LAPACK, Matlab i GNU Octave (w funkcji lyap).

Zobacz też