| Hosted by CoCalc | Download
# 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)
# 4 pavyzdys. Rasime matricos A = matrix(QQ, 4, 4, [[0, 0, -5, 3], [0, 0, -3, 1], [-5, 3, 0, 0], [-3,1,0,0]]) show(A)
(0053003153003100)\displaystyle \left(\begin{array}{rrrr} 0 & 0 & -5 & 3 \\ 0 & 0 & -3 & 1 \\ -5 & 3 & 0 & 0 \\ -3 & 1 & 0 & 0 \end{array}\right)
# Žodano formą ir atitinkamą bazę.
# Randame matricos charakteristinį polinomą: p = A.charpoly(var = 't') show(p) show(p.factor())
t48t2+16\displaystyle t^{4} - 8 t^{2} + 16
(t2)2(t+2)2\displaystyle (t - 2)^{2} \cdot (t + 2)^{2}
###################### # TIKRINĖ REIKŠMĖ t=2. ###################### # # Nagrinėjame matricą B2 := A-2*E. Ieškome mažiausoi p: rg(B2^p)=4-2=2: B2 = A - 2*matrix.identity(4) show(B2)
(2053023153203102)\displaystyle \left(\begin{array}{rrrr} -2 & 0 & -5 & 3 \\ 0 & -2 & -3 & 1 \\ -5 & 3 & -2 & 0 \\ -3 & 1 & 0 & -2 \end{array}\right)
# Matricos B2 laipsnių rangai: B2.rank() (B2**2).rank()
3 2
# Taigi, p=2. Matricos B2 branduolys ker B2 ir jo dimensija: L1 = B2.left_kernel() L1.dimension()
1
# Matricos B2^2 branduolys ker B2^2 ir jo dimensija: L2 = (B2**2).left_kernel() L2.dimension()
2
# Poerdvio L1 bazę pildant iki erdvės L2 bazės, reikia pridėti 1 vektorių v11, kurį # atitiks lygiai vienas 2-os eilės Žordano langelis. # Rasime šį vektorių: v11 = papildom(L1.basis(), L2)[0] v11
(1, 0, -1, 0)
# Suskaičiuojame dar vieną vektorių: v11B2 = v11*B2 # priklauso L1 v11B2
(3, -3, -3, 3)
############################
###################### # TIKRINĖ REIKŠMĖ t=-2. ###################### # # Nagrinėjame matricą Bm2 := A+2*E. Ieškome mažiausoi p: rg(Bm2^p)=4-2=2: Bm2 = A + 2*matrix.identity(4) show(Bm2)
(2053023153203102)\displaystyle \left(\begin{array}{rrrr} 2 & 0 & -5 & 3 \\ 0 & 2 & -3 & 1 \\ -5 & 3 & 2 & 0 \\ -3 & 1 & 0 & 2 \end{array}\right)
# Matricos Bm2 laipsnių rangai: Bm2.rank() (Bm2**2).rank()
3 2
# Taigi, p=2. Matricos Bm2 branduolys ker Bm2 ir jo dimensija: Lm1 = Bm2.left_kernel() Lm1.dimension()
1
# Matricos Bm2^2 branduolys ker Bm2^2 ir jo dimensija: Lm2 = (Bm2**2).left_kernel() Lm2.dimension()
2
# Poerdvio Lm1 bazę pildant iki erdvės Lm2 bazės, reikia pridėti 1 vektorių u11, kurį # atitiks lygiai vienas 2-os eilės Žordano langelis. # Rasime šį vektorių: u11 = papildom(Lm1.basis(), Lm2)[0] u11
(1, 0, 1, 0)
# Suskaičiuojame dar vieną vektorių: u11Bm2 = u11*Bm2 # priklauso Lm1 u11Bm2
(-3, 3, -3, 3)
# Taigi radome Žordano bazę v11,v11B2,u11,u11Bm2. # Perėjimo matrica (iš standartinės bazės į Žordano bazę): T = matrix(QQ,4,4,[v11,v11*B2,u11,u11*Bm2]) show(T)
(1010333310103333)\displaystyle \left(\begin{array}{rrrr} 1 & 0 & -1 & 0 \\ 3 & -3 & -3 & 3 \\ 1 & 0 & 1 & 0 \\ -3 & 3 & -3 & 3 \end{array}\right)
# Pradinės matricos Žordano matrica: show(T*A*(T^(-1)))
(2100020000210002)\displaystyle \left(\begin{array}{rrrr} 2 & 1 & 0 & 0 \\ 0 & 2 & 0 & 0 \\ 0 & 0 & -2 & 1 \\ 0 & 0 & 0 & -2 \end{array}\right)