You are on page 1of 10

Пресмятане на степен на матрица

Общ алгоритъм за „ A
1. Имаме Жордановото разлагане:
A = H J H -1
Тук H е матрицата от собствените вектори по стълбове. J е жордановата матрица, т.е. диагонална блочна матрица, с жорданови
клетки по диагонала.
2. ‰ A = H ‰ J H -1
3. Тъй като за J имаме:
J = diagHJk1 Hl1 L, ..., Jkn Hln LL, където li е i-тата собствена стойност на A, а ki е нейната кратност. Имаме и още:
‰ J = ‰diagIJk1 Hl1 L,...,Jkn Hln LM = diagI‰ Jk1 Hl1 L , ..., ‰ Jkn Hln L M
То остава да разберем как да намерим ‰ Jk HlL .
4. Всяка жорданова клетка Jk HlL е от вида:
Jk HlL = l I + N,
където N е нилпотентна, т.е. N i = 0, за някое i. Всъщност предвид общия вид на жордановите клетки, лесно е да се забележи, че
i = k.
5. Тогава матричната експонента на дадената жорданова клетка е:
‰l I+N = ‰l ‰ N
6. Тъй като ‰ N е нилпотентна, то можем да я развием в краен матричен ред. Предвид видът й, можем да конкретизираме:

‰ N = ⁄ki=0
1
Ni =
0 0 1ê2
i!

0 0 1ê2
0 1
0 1 0 0

0 ∏ 1ê2
0 1 0 0 ∏

∏ 0 1ê2
0 ∏ + + ...
∏ 1
0 0 1 0 0 0
0 0

0 1 1ê2
1k-2
Hk-1L!
1k-2 1k-1
Hk-2L! Hk-1L!
0 0 0 0 ∫ 0 ∫

1ê2
0 0 0 ∏ 0 0 1k-2
Hk-2L!
0 0 1 ∫
0 0 ∏ 0 0
+ = 0
1ê2
0 ∏ 0 0 0 0 1 ∏ ∫
∏ 0 0 0 0 0 0 ∏
0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0

1 1 1ê2 ∫
1k-2 1k-1
Hk-2L! Hk-1L!
1k-2
Hk-2L!
1 1 ∏ ∑
Т.е. ‰ Jk HlL = ‰l
1ê2
∏ ∏ ∏ ª
1 1
0 1 1
1
2 051-MatrixExp.nb

Случаите „t A
По същество сметките са същите, тъй като можем да положим A ' = t A. Въпреки това, често се смятат такива
матрици и е смислено да ги изведем.
7. Първо, нека отбележим, че за собствените числа имаме:
li HA 'L = t li HAL
8. Собствените вектори съвпадат
9. Следователно, предвид общия подход, единствената разлика от пресмятането на ‰ A е, че вместо ‰ Jk HlL ще смятаме ‰t Jk HlL . Тогава
‰t Jk HlL = ‰t Hl I+NL = ‰t l I+t N = ‰t l ‰t N .
1 1 1 tk-2 tk-1
Hk-2L! Hk-1L!
1 t1 t2 t3 ∫
1! 2! 3!
1 1 tk-2
Hk-2L!
1 t1 t2 ∏ ∑
1! 2!

∏ ∏ ∏ ∏ ª
t Jk HlL tl 1 1 1
Т.е. ‰ =‰ 1 t 1
t 2
t3
1! 2! 3!
1 1
1 t1 t2
1! 2!
1
0 1 t1
1!
1

Примери

8x8 Матрица

Разглеждаме матрицата

− 36 − 7 − 53 34 25 135 − 66 1
6 2 9 −6 −4 − 22 11 1
0 0 1 0 0 1 −1 1
− 31 − 5 − 44 29 20 111 − 55 2
In[1]:= a= ;
−2 0 −3 2 2 8 −5 1
6 1 9 −6 −4 − 21 11 0
14 3 21 − 14 − 10 − 53 27 0
− 43 − 7 − 61 39 28 154 − 76 3

In[2]:= n = Length @ a H∗ Размерността на a ∗L

Out[2]= 8

Задачата е да се намери видът на ‰t a .

Собствени стойности

Собствените стойности са:

In[3]:= Eigenvalues @ a

Out[3]= 82, 2, 1, 1, 1, 0, 0, 0<

Брой стобствени и присъедиени вектори

Сега ще се чудим дали са прости.


По теоремата за ранга за матрицата A имаме, че за броя колони/вектори n, рангът rank@AD и нулярност
nullity@AD (т.е. размерност на ядрото, т.е. брой решения x: A x = 0, т.е. брой собствени вектори):
rank@AD + nullity@AD = n
051-MatrixExp.nb 3

Тъй като собствените вектори се търсят във вида l x = A x, т.е. HA - l IL x = 0, то ние ще издледваме
матриците A - l I
Нека създадем простата функцийка, връщаща матрицата HA - l IL.

In[4]:= b@λ_D := a − λ IdentityMatrix @ n

l=2

In[5]:= n − MatrixRank @ b@2D

Out[5]= 2

Така намерихме броят собствени вектори. Тъй като стойността е двукратна, то ще имаме единствено два
собствени вектора. (т.е. 2 - 2 = 0 присъединени)
l=1

In[6]:= n − MatrixRank @ b@1D

Out[6]= 2

Тъй като стойността е трикратна и имаме два собствени вектора, то ще имаме 1 присъединен.
l=0

In[7]:= n − MatrixRank @ b@0D

Out[7]= 1

Тъй като стойността е трикратна и имаме един собствен вектор, то ще имаме и 2 присъединени.

Собствениге вектори чрез Mathematica

Нека видим какво ще каже Mathematica.

h = Eigenvectors @ a;
h êê MatrixForm
In[8]:=

h êê MatrixRank
Out[9]//MatrixForm=
0 1 1 1 1 0 0 1
−1 0 −1 0 −1 0 1 0
2 2 −1 −1 0 1 1 0
1 1 −1 −1 1 0 0 0
0 0 0 0 0 0 0 0
1 −1 −1 0 −1 0 0 1
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

Out[10]= 5

Тук си личат и нулевите собствени вектори. (т.е. тези които трябва да допълним с присъединени (Generalized
Eigenvectors на английски). Т.е. рангът на матрицата е по-малък от необходимия.
4 051-MatrixExp.nb

Присъединени вектори – дефиниция

Присъединените вектори се дефинират по следния начин (тъй като векторите, удовлетворяващи уравнението,
ще запълват пространството):

HA - l ILk xk = 0
Ø
(1)

Където за k = 1 получаваме собствените вектори за стойността l.


Принципно, при подходящо намерен собствен вектор, бихме могли да генерираме редица присъединени
вектори по следния начин:
HA - l IL xk = xk-1 (2)
където като положим x0 = 0, то x1 всъщност е собствен вектор.

Пресмятане на присъединените вектори.

Бихме могли да сметнем присъединените вектори, решавайки (2). Опасността тук е, че намирането им
зависи от избора на собствените вектори. Затова в практиката се използва обратния подход: намираме
вида на собствените вектори и предвид него взимаме вектор xk , който не го удовлетворява, но
удовлетворява HA - l ILk xk = 0, където k е кратността на собствената стойност, т.е. търсим видът на
най-последния присъединен вектор от веригата. От там пресмятаме останалите присъединени, докато
стигнем до собствен, използвайки (2). Например, ако x2 не е собствен вектор, то собственият x1 , на който x2 е
присъединен, намираме по x1 = HA - l IL x2 . В този смисъл често предлаганите от Mathematica вектори са
неподходящи (т.е. не можем да им намерим присъединени) и ще трябва да ги пресметнем сами.
l=1
Търсим един присъединен.
Нека запаметим нулевия вектор с подходящата размерност в символа zero. Използвайки ConstantArray
получаваме вектор с дължина n и елементи 0.

In[11]:= zero = ConstantArray@0, nD

Out[11]= 80, 0, 0, 0, 0, 0, 0, 0<

Нека видът на търсения вектор да запеметим в x. Такова описване се налага, тъй като математика възприема
новите символи за атоми, т.е. в случая – скалари, а не вектори.

In[12]:= x = 8x1, x2, x3, x4, x5, x6, x7, x8<;

Нека намерим видът на присъединените вектори:

In[13]:= Solve@MatrixPower@b@1D, 2D.x 0D

Solve::svars : Equations may not give solutions for all "solve" variables. à

::x6 → −
x3 x4 x3 x4
Out[13]= − − x5, x7 → − − − x5, x1 → − 2 x3 − x5, x2 → − 2 x3 − x5, x8 → 0>>
2 2 2 2

Нека положим x3 = x4 = 0, x5 = 1. Ще вземем първия от получения горе резултат, тъй като ще бъде върнат
двоен списък (особеност на Solve, но не лишена от смисъл) и в противен случай ще получим вектора в
неудобна за по-нататъшно ползване форма. Нека в матрицата със собствените вектори да запишем
получените. За целта трябва да си припомним, че собствените вектори са записани по редове и са подредени

H2, 2, 1, 1, 1, 0, 0, 0L. Т.е. ще запишем на мястото на пети ред.


по съответсващите им собствени стойности, които пък са подредени по големина в обратен ред, т.е.
051-MatrixExp.nb 5

In[14]:= h@@5DD = x ê. %@@1DD ê. 8x3 → 0, x4 → 0, x5 → 1<

Out[14]= 8− 1, − 1, 0, 0, 1, − 1, − 1, 0<

Нека от (2) да намерим собствения, на когото принадлежи. Той ще е на четвърто място (тъй като ги намираме
в обратен ред):

In[15]:= h@@4DD = b@1D.%

Out[15]= 80, 0, 0, 0, 0, 0, 0, 0<

Тъй като получихме нулевия вектор, оказва се, че при такова заместване сме получили собствения вектор, а
не присъединения. Нека да пробваме да заместим с други стойности, например x3 = 2, x4 = 0, x5 = 1

In[16]:= h@@5DD = x ê. %%%@@1DD ê. 8x3 → 2, x4 → 0, x5 → 1<

Out[16]= 8− 5, − 5, 2, 0, 1, − 2, − 2, 0<

Да видим, дали принадлежи на някакъв собствен вектор:

In[17]:= h@@4DD = b@1D.%

Out[17]= 81, 1, 0, 0, − 1, 1, 1, 0<

Съвсем. Ако някой се съмнява, че това е собствен вектор, нека провери:

In[18]:= b@1D.%

Out[18]= 80, 0, 0, 0, 0, 0, 0, 0<

l=0
Трябва да намерим два присъединени. Тук вдигаме матрицата A - l I на трета степен, тъй като ще
генерираме верига от три вектора (един собствен и два присъединени).

In[19]:= Solve@MatrixPower@b@0D, 3D.x 0D

Solve::svars : Equations may not give solutions for all "solve" variables. à
Out[19]= 88x1 → − x7 + x8, x2 → x5 − 2 x7, x3 → x5 − x7, x4 → x5 − x7 + x8, x6 → 0<<

Нека положим x5 = x7 = 1, x8 = 0. Ще запишем на осми ред (отзад напред караме)

In[20]:= h@@8DD = x ê. %@@1DD ê. 8x5 → 1, x7 → 1, x8 → 0<

Out[20]= 8− 1, − 1, 0, 0, 1, 0, 1, 0<

Назад във веригата:

In[21]:= h@@7DD = b@0D.%

Out[21]= 82, − 1, − 1, 1, − 1, 0, 0, 2<

Остана да сметнем генериращия собствен вектор:

In[22]:= h@@6DD = b@0D.%

Out[22]= 8− 1, 1, 1, 0, 1, 0, 0, − 1<
6 051-MatrixExp.nb

Да видим дали рангът на матрицата вече се допълни:

h êê MatrixForm
h êê MatrixRank
In[23]:=

Out[23]//MatrixForm=
0 1 1 1 1 0 0 1
−1 0 −1 0 −1 0 1 0
2 2 −1 −1 0 1 1 0
1 1 0 0 −1 1 1 0
−5 −5 2 0 1 −2 −2 0
−1 1 1 0 1 0 0 −1
2 −1 −1 1 −1 0 0 2
−1 −1 0 0 1 0 1 0

Out[24]= 8

Жорданова матрица

Нека транспонираме h, така че собствените вектори да са по стълбове:

h = Transpose @ h;
h êê MatrixForm
In[25]:=

Out[26]//MatrixForm=
0 −1 2 1 −5 −1 2 −1
1 0 2 1 −5 1 −1 −1
1 −1 −1 0 2 1 −1 0
1 0 −1 0 0 0 1 0
1 −1 0 −1 1 1 −1 1
0 0 1 1 −2 0 0 0
0 1 1 1 −2 0 0 1
1 0 0 0 0 −1 2 0

Така построена матрицата h всъщност има вида:

I x2,1 x2,2 x1,1 x11,2 x21,2 x10,1 x20,1 x30,1 M

Тук със горните индекси сме отбелязали номера във веригата вектори (там където има и присъединени).
Липсата на горен индекс означава, че векторът участва във верига от само един вектор (себе си), т.е. е
собствен без да има присъединени. Долните индекси бележат първо собствената стойност, а второ номера на
веригата.
С други думи за l = 2 имаме две вериги от по един собстевен вектор; за l = 1 имаме две вериги: първата от
един собствен вектор, а втората: собствен и присъединен; за l = 0 имаме само една верига от три вектора:
един собствен и два присъединени.
Жордановата матрица ще получим като разглеждаме блок-матрица с елементи по диагонала: жорданови
клетки. На всяка верига вектори съответства жорданова клетка от размерност броя вектори във веригата.
Жордановата клетка дефинираме така:
l 1 0 0

> n
0 ∏ ∏ 0
0 ∏ l 1
Jl,n =
0 0 0 l
ß
n
051-MatrixExp.nb 7

Т.е. изцяло нули с изключения на главния диагонал, където са само l и над-главния – само единици.
Например жордановата клетка за веригата x10,1 x20,1 x30,1 (която беше за l = 0) има вида:

0 1 0
In[27]:= 0 0 1
0 0 0

Out[27]= 880, 1, 0<, 80, 0, 1<, 80, 0, 0<<

Сега ще създадем жордановата матрица. За целта нека първо си създадем една „празна“ матрица от
съответната размерност:

j = ConstantArray@0, 8n, n<D;


j êê MatrixForm
In[28]:=

Out[29]//MatrixForm=
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

Сега запълваме. Първо са все едновекторни вериги.

In[30]:= j@@1, 1DD = 2;


j@@2, 2DD = 2;
j@@3, 3DD = 1;
j êê MatrixForm
Out[33]//MatrixForm=
2 0 0 0 0 0 0 0
0 2 0 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

Сега имаме нетривиална жорданова клетка. Образуваме я като запълваме главния диагонал с l и над-главния
с 1:

j@@4 ;; 5, 4 ;; 5DD = DiagonalMatrix@81, 1<D + DiagonalMatrix@81<, 1D;


j êê MatrixForm
In[34]:=

Out[35]//MatrixForm=
2 0 0 0 0 0 0 0
0 2 0 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 0 1 1 0 0 0
0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
8 051-MatrixExp.nb

Последно остана веригата за l = 0:

j@@6 ;; 8, 6 ;; 8DD = DiagonalMatrix@81, 1<, 1D;


j êê MatrixForm
In[36]:=

Out[37]//MatrixForm=
2 0 0 0 0 0 0 0
0 2 0 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 0 1 1 0 0 0
0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0

Дали получихме правилно жордановата форма? Нека проверим дали ще получим отново a:

In[38]:= h.j.Inverse @ h êê MatrixForm


h.j.Inverse @ h a
Out[38]//MatrixForm=
− 36 − 7 − 53 34 25 135 − 66 1
6 2 9 −6 −4 − 22 11 1
0 0 1 0 0 1 −1 1
− 31 − 5 − 44 29 20 111 − 55 2
−2 0 −3 2 2 8 −5 1
6 1 9 −6 −4 − 21 11 0
14 3 21 − 14 − 10 − 53 27 0
− 43 − 7 − 61 39 28 154 − 76 3

Out[39]= True

Експонентата

Главната цел беше да сметнем ескпонентата ‰t a . В началото обяснихме, че за видът на ‰t Jk HlL имаме:

Hk-2L! Hk-1L!
1k-2 1k-1
1 1 1ê2 ∫

Hk-2L!
1k-2
1 1 ∏ ∑
‰ Jk HlL = ‰l ∏ ∏ ∏ ª
1 1 1ê 2
0 1 1
1
Нека тогава дефинираме функция, която задава тази матрица, за дадено l и k:

, 0F, 8i, 1, k<, 8j, 1, k<F


tj−i
Hj − iL !

In[40]:= jexp@λ_, k_D := TableBIfBj ≥ i,

Така функционално задаваме матрица: с нейните елементи.

In[41]:= jexp@λ, 3D êê MatrixForm


Out[41]//MatrixForm=
tλ tλ 1 tλ
t t2
2
tλ tλ
0 t

0 0
051-MatrixExp.nb 9

Тогава за да сметнем ‰t a остава да построим жорданова матрица с клетки от вида на jexp и да умножим
отляво и отдясно, съответно с матрицата на прехода и обратната й. Ще я построим по начина, по който
построихме и „оригиналната“ жорданова матрица, но ще ползваме функцията jexp, за да построим
жордановите клетки:

jx = ConstantArray@0, 8n, n<D;


jx êê MatrixForm
In[42]:=

Out[43]//MatrixForm=
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

In[44]:= jx@@1 ;; 1, 1 ;; 1DD = jexp@2, 1D;


jx@@2 ;; 2, 2 ;; 2DD = jexp@2, 1D;
jx@@3 ;; 3, 3 ;; 3DD = jexp@1, 1D;
jx êê MatrixForm
Out[47]//MatrixForm=
2t 0 0 0 0 0 0 0
0 2t 0 0 0 0 0 0
t
0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
10 051-MatrixExp.nb

Забележете, че дори за променяне на единични стойности по матрицата jx ползвахме span оператора (;;), тъй
като jexp връща матрица, а не число.

jx@@4 ;; 5, 4 ;; 5DD = jexp@1, 2D;


jx êê MatrixForm
In[48]:=

Out[49]//MatrixForm=
2t 0 0 0 0 0 0 0
2t
0 0 0 0 0 0 0
t
0 0 0 0 0 0 0
0 0 0 t t t 0 0 0
0 0 0 0 t 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

jx@@6 ;; 8, 6 ;; 8DD = jexp@0, 3D;


jx êê MatrixForm
In[50]:=

Out[51]//MatrixForm=
2t 0 0 0 0 0 0 0
0 2t 0 0 0 0 0 0
0 0 t 0 0 0 0 0
0 0 0 t t t 0 0 0
0 0 0 0 t 0 0 0
t2
0 0 0 0 0 1 t
2
0 0 0 0 0 0 1 t
0 0 0 0 0 0 0 1

Тогава вече можем да получим ‰t a :

h.jx.Inverse @ h êê MatrixForm
MatrixExp@t aD êê Reduce
In[52]:=
h.jx.Inverse @ h

+ 19 H2 − tL + 6 I− 5 tM − 4 J− 1 + 2 t − N −4 − + 3 H2 − tL − 2 t +
Out[52]//MatrixForm=
t2
− 30 + 23 t −4 2t t + t t − 2t t t

+ 19 H− 1 + tL + 6 I− 5 tM − 4 J− 1 − t + N + 3 H− 1 + tL + t +
2
t2
30 + 23 t −8 2t t + t 6− t − 2t t t

+ 19 H− 1 + tL − 4 J− t + N + 3 H− 1 + tL + t −
2
t2 t2
30 + t − 12 2t 5−2 2t
2 2

19 − 11 t −8 2t −4t 3−2 t − 2t −t
+ 19 H− 1 + tL + 6 I tM − 4 J1 − t + N + 3 H− 1 + tL + t −
t2
30 − t − 12 2t t − t 4+ t −2 2t t t
+ 6 I− 2
2
t t + t t

+ 6 I− 2
12 tM t
− 4 + 12 t +4 2t t + t tM −1 + 2t + t t

+ 19 H2 − tL − 4 J2 t − N + 3 H2 − tL − 2 t +
t2 t2
− 30 − 8 2t −5 − 2t
2 2

Out[53]= True

You might also like