CoCalc Shared FilesZordano_forma_pavyzdys_1.sagewsOpen in CoCalc with one click!
Author: Paulius Drungilas
Views : 37
# 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, [[3, 1, 0, 0], [0, 2, 1, 0], [0, 0, 2, 1], [-1,-1,-1,1]]) show(A)
(3100021000211111)\displaystyle \left(\begin{array}{rrrr} 3 & 1 & 0 & 0 \\ 0 & 2 & 1 & 0 \\ 0 & 0 & 2 & 1 \\ -1 & -1 & -1 & 1 \end{array}\right)
# Žodano formą ir atitinkamą bazę.act_on_polynomial
%md
# Randame matricos charakteristinį polinomą: p = A.charpoly(var = 't') show(p.factor())
(t2)4\displaystyle (t - 2)^{4}
# Nagrinėjame matricą B := A-2*E ir skaičiuojame jos laipsnių branduolių dimensijas: B = A - 2*matrix.identity(4) show(B)
(1100001000011111)\displaystyle \left(\begin{array}{rrrr} 1 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ -1 & -1 & -1 & -1 \end{array}\right)
# Matricos B branduolys ker B ir jo dimensija: L1 = B.left_kernel() L1.dimension()
1
# Matricos B^2 branduolys ker B^2 ir jo dimensija: L2 = (B**2).left_kernel() L2.dimension()
2
# Matricos B^3 branduolys ker B^3 ir jo dimensija: L3 = (B**3).left_kernel() L3.dimension()
3
# Matricos B^4 branduolys ker B^4 ir jo dimensija: L4 = (B**4).left_kernel() L4.dimension()
4
# Poerdvio L3 bazę pildant iki erdvės L4 bazės, reikia pridėti 1 vektorių, kurį # atitiks lygiai vianas 4-os eilės Žordano langelis. # Rasime šį vektorių: v1 = papildom(L3.basis(), L4)[0] v1
(1, 0, 0, 0)
# Suskaičiuojame dar tris vektorius: v2 = v1*B # priklauso L3 v3 = v2*B # priklauso L2 v4 = v3*B # priklauso L1 v2 v3 v4
(1, 1, 0, 0) (1, 1, 1, 0) (1, 1, 1, 1)
# Taigi radome Žordano bazę v1,v2,v3,v4. # Perėjimo matrica (iš standartinės bazės į Žordano bazę): T = matrix(QQ,4,4,[v1,v2,v3,v4]) show(T)
(1000110011101111)\displaystyle \left(\begin{array}{rrrr} 1 & 0 & 0 & 0 \\ 1 & 1 & 0 & 0 \\ 1 & 1 & 1 & 0 \\ 1 & 1 & 1 & 1 \end{array}\right)
# Pradinės matricos Žordano matrica: show(T*A*(T^(-1)))
(2100021000210002)\displaystyle \left(\begin{array}{rrrr} 2 & 1 & 0 & 0 \\ 0 & 2 & 1 & 0 \\ 0 & 0 & 2 & 1 \\ 0 & 0 & 0 & 2 \end{array}\right)