CoCalc Public FilesZordano_forma_pavyzdys_1.sagewsOpen with one click!
Author: Paulius Drungilas
Views : 199
Compute Environment: Ubuntu 20.04 (Default)
# Kaip papildyti vektorių sistemą iki erdvės bazės? def papildom_poerdviai(W, V): """ Gražina tiesinės erdvės V poerdvio W papildinio iki V bazę. Kitaip sakant, randa tokį poerdvį U, kad V yra W ir U tiesioginė suma ir gražina jo bazę. """ Q, pi, lift = V.quotient_abstract(W) Basis = [lift(v) for v in Q.basis()] return Basis # pi yra projekcijos atvaizdis iš erdvės V į faktorerdvę V/W: pi(v) = v + W. # lift yra "atvirkštinis" atvaizdis iš faktorerdvės Q = V/W į erdvę V, tenkinantis # lygybę pi(lift(u)) = u su visais u iš Q. def papildom(vec, V): """ Tiesinės erdvės V vektorių šeimą vec papildo vektoriais v1,..., vn iki erdvės V bazės ir gražina papildytus vektorius v1,..., vn. """ return papildom_poerdviai(V.span(vec), V)
# Pavyzdžiui, vec = [vector([1,0,0]),vector([1,1,0])] papildom(vec, QQ^3)
[(0, 0, 1)]
# 1 pavyzdys. Rasime matricos A = matrix(QQ, 4, 4, [[5, 1, -1, -1], [1, 5, -1, -1], [1, 1, 3, -1], [1,1,-1,3]]) show(A)
(5111151111311113)\displaystyle \left(\begin{array}{rrrr} 5 & 1 & -1 & -1 \\ 1 & 5 & -1 & -1 \\ 1 & 1 & 3 & -1 \\ 1 & 1 & -1 & 3 \end{array}\right)
# Žodano formą ir atitinkamą bazę.
%md
# Randame matricos charakteristinį polinomą: p = A.charpoly(var = 't') show(p) show(p.factor())
t416t3+96t2256t+256\displaystyle t^{4} - 16 t^{3} + 96 t^{2} - 256 t + 256
(t4)4\displaystyle (t - 4)^{4}
# Nagrinėjame matricą B := A-4*E. Ieškome mažiausoi p: rg(B^p)=4-4=0: B = A - 4*matrix.identity(4) show(B)
(1111111111111111)\displaystyle \left(\begin{array}{rrrr} 1 & 1 & -1 & -1 \\ 1 & 1 & -1 & -1 \\ 1 & 1 & -1 & -1 \\ 1 & 1 & -1 & -1 \end{array}\right)
# Matricos B laipsnių rangai: B.rank() (B**2).rank()
1 0
# Taigi, p=2. Matricos B branduolys ker B ir jo dimensija: L1 = B.left_kernel() L1.dimension()
3
# Matricos B^2 branduolys ker B^2 ir jo dimensija: L2 = (B**2).left_kernel() L2.dimension()
4
# Poerdvio L1 bazę pildant iki erdvės L2 bazės, reikia pridėti 1 vektorių, kurį # atitiks lygiai vianas 2-os eilės Žordano langelis. # Rasime šį vektorių: v11 = papildom(L1.basis(), L2)[0] v11
(1, 0, 0, 0)
# Suskaičiuojame dar vieną vektorių: v11B = v11*B # priklauso L1 v11B
(1, 1, -1, -1)
# Kadangi poerdvio L1 dimensija lygi 3 ir v11B priklauso L1, tai vektorių v11B reikia papildyti dviem vektoriais v21,v22 iki L1 bazės: L = papildom([v11B], L1) v21 = L[0] v22 = L[1] v21 v22
(1, 0, 0, -1) (0, 1, 0, -1)
# Taigi radome Žordano bazę v11,v11B,v21,v22. # Perėjimo matrica (iš standartinės bazės į Žordano bazę): T = matrix(QQ,4,4,[v11,v11B,v21,v22]) show(T)
(1000111110010101)\displaystyle \left(\begin{array}{rrrr} 1 & 0 & 0 & 0 \\ 1 & 1 & -1 & -1 \\ 1 & 0 & 0 & -1 \\ 0 & 1 & 0 & -1 \end{array}\right)
# Pradinės matricos Žordano matrica: show(T*A*(T^(-1)))
(4100040000400004)\displaystyle \left(\begin{array}{rrrr} 4 & 1 & 0 & 0 \\ 0 & 4 & 0 & 0 \\ 0 & 0 & 4 & 0 \\ 0 & 0 & 0 & 4 \end{array}\right)