︠f0407ff8-43f4-486c-8fdd-2edd46ed87ads︠
# 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)
︡c1641bf8-82dd-4b9b-b431-9d47739d4789︡{"done":true}
︠59876658-4e86-4924-b8cb-1a7385dfc614s︠
# 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)
︡13f130eb-3a97-4b0d-97f1-903566afedf7︡{"html":"
$\\displaystyle \\left(\\begin{array}{rrrr}\n0 & 0 & -5 & 3 \\\\\n0 & 0 & -3 & 1 \\\\\n-5 & 3 & 0 & 0 \\\\\n-3 & 1 & 0 & 0\n\\end{array}\\right)$
"}︡{"done":true}
︠ab4244ce-99b2-46fd-80b5-644d1ecb786c︠
# Žodano formą ir atitinkamą bazę.
︡affd63e5-63cc-4149-9317-875eac9ae867︡
︠a9d6d2c4-ffe8-4ea6-9192-53ed436d5649s︠
# Randame matricos charakteristinį polinomą:
p = A.charpoly(var = 't')
show(p)
show(p.factor())
︡54752b3c-2bb3-497a-99a9-7cd0d5fe3879︡{"html":"$\\displaystyle t^{4} - 8 t^{2} + 16$
"}︡{"html":"$\\displaystyle (t - 2)^{2} \\cdot (t + 2)^{2}$
"}︡{"done":true}
︠8bc33e38-acb2-4c31-bd27-8c44089d64d7︠
######################
# 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)
︡7a31c962-30e2-4fef-b635-26d996e5a62f︡{"html":"$\\displaystyle \\left(\\begin{array}{rrrr}\n-2 & 0 & -5 & 3 \\\\\n0 & -2 & -3 & 1 \\\\\n-5 & 3 & -2 & 0 \\\\\n-3 & 1 & 0 & -2\n\\end{array}\\right)$
"}︡{"done":true}
︠fb51bb89-6f35-4f44-8728-05c8bdd143e3s︠
# Matricos B2 laipsnių rangai:
B2.rank()
(B2**2).rank()
︡8b6448d1-c566-4f96-b920-3ab3e4e0b824︡{"stdout":"3\n"}︡{"stdout":"2\n"}︡{"done":true}
︠75856db2-a50c-4b0c-991f-43afe5602010s︠
# Taigi, p=2. Matricos B2 branduolys ker B2 ir jo dimensija:
L1 = B2.left_kernel()
L1.dimension()
︡737dab1d-8c48-4349-8c70-be32cc852c41︡{"stdout":"1\n"}︡{"done":true}
︠9f06a5b1-b9f2-49c0-a65f-084975f7d67es︠
# Matricos B2^2 branduolys ker B2^2 ir jo dimensija:
L2 = (B2**2).left_kernel()
L2.dimension()
︡6775d7a7-65e3-479d-a728-5371b19f17c8︡{"stdout":"2\n"}︡{"done":true}
︠cd851dd3-76d2-41d6-a54d-c6ad29d79c01s︠
# 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
︡7ec45665-7b1d-422d-bfa1-4fb7d715f542︡{"stdout":"(1, 0, -1, 0)\n"}︡{"done":true}
︠c2ce5303-39d6-46cf-b96f-3b446aa117f6s︠
# Suskaičiuojame dar vieną vektorių:
v11B2 = v11*B2 # priklauso L1
v11B2
︡ed6ed343-6b5b-4240-b6b9-48a3544d841a︡{"stdout":"(3, -3, -3, 3)\n"}︡{"done":true}
︠5f011239-3dc1-4673-9daa-2ff34a24da73︠
############################
︡35341889-1976-4e0d-9b8d-ae8407806ccc︡
︠afb53830-5b79-4c1f-942d-c72a8a87ad8a︠
######################
# 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)
︡6fbe1483-ba80-49c9-bd71-9fc2fb97a7a8︡{"html":"$\\displaystyle \\left(\\begin{array}{rrrr}\n2 & 0 & -5 & 3 \\\\\n0 & 2 & -3 & 1 \\\\\n-5 & 3 & 2 & 0 \\\\\n-3 & 1 & 0 & 2\n\\end{array}\\right)$
"}︡{"done":true}
︠f53adeb7-40bf-437f-b723-4bca7c4a9f28s︠
# Matricos Bm2 laipsnių rangai:
Bm2.rank()
(Bm2**2).rank()
︡0c225875-7bd8-4644-9290-e23ab196c5fa︡{"stdout":"3\n"}︡{"stdout":"2\n"}︡{"done":true}
︠ea12ed25-9eb2-4158-83df-f67761c8878ds︠
# Taigi, p=2. Matricos Bm2 branduolys ker Bm2 ir jo dimensija:
Lm1 = Bm2.left_kernel()
Lm1.dimension()
︡316f0ffa-042c-4efc-bb7b-fbc31618c517︡{"stdout":"1\n"}︡{"done":true}
︠96e86f1d-16ff-4221-a391-e42623034700s︠
# Matricos Bm2^2 branduolys ker Bm2^2 ir jo dimensija:
Lm2 = (Bm2**2).left_kernel()
Lm2.dimension()
︡93cbdef8-97b4-4d02-b025-144bf6987ebe︡{"stdout":"2\n"}︡{"done":true}
︠efd3c2ac-6e1b-4466-b697-13ce5a3ec392s︠
# 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
︡6447d179-52f6-4b3f-9dc6-3a8b92ba008a︡{"stdout":"(1, 0, 1, 0)\n"}︡{"done":true}
︠12e7a129-5d35-4b31-96ae-3c2d3b0ba0e0s︠
# Suskaičiuojame dar vieną vektorių:
u11Bm2 = u11*Bm2 # priklauso Lm1
u11Bm2
︡7a019b7a-f14d-462b-997a-f9adf716e6ce︡{"stdout":"(-3, 3, -3, 3)\n"}︡{"done":true}
︠20a2b857-cc63-4fdb-8df3-00d65131c233s︠
# 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)
︡6d96fef3-9f04-4568-a172-49623e9caf02︡{"html":"$\\displaystyle \\left(\\begin{array}{rrrr}\n1 & 0 & -1 & 0 \\\\\n3 & -3 & -3 & 3 \\\\\n1 & 0 & 1 & 0 \\\\\n-3 & 3 & -3 & 3\n\\end{array}\\right)$
"}︡{"done":true}
︠1f2e4abe-fe47-48b9-8401-b02b4f89c42cs︠
# Pradinės matricos Žordano matrica:
show(T*A*(T^(-1)))
︡b4ee9aea-8e08-419a-b349-0ae0a9e800fe︡{"html":"$\\displaystyle \\left(\\begin{array}{rrrr}\n2 & 1 & 0 & 0 \\\\\n0 & 2 & 0 & 0 \\\\\n0 & 0 & -2 & 1 \\\\\n0 & 0 & 0 & -2\n\\end{array}\\right)$
"}︡{"done":true}
︠d8b85e9a-55d9-49b6-96bb-90b0eccb5ceb︠