Tämä on hiukan kesken, mm. monet laskentaesimerkit on tehty Maplella, tosin sen ei pitäisi isommin haitata, koska syntaksi lienee yleimatemaattista.
TE: Timo Eirolan pruju KRE Kreyszig (8. painos) LAY: Lay Linear Algebra STR Strang: Linear Algebra LAODE: Golubitsky-Dellnitz
KRE 7.5,7.6, 7.15 LAODE
Avaruus | dimensio |
riviavaruus, row(A) | rangi, r(A) |
sarakeavaruus, col(A) | rangi, r(A) |
nolla-avaruus, N(A) | nulliteetti, n(A) |
> A:=<<-3,1,2>|<6,-2,-4>|<-1,2,5>|<1,3,8>|<-7,-1,-4>>; [-3 6 -1 1 -7] [ ] A := [ 1 -2 2 3 -1] [ ] [ 2 -4 5 8 -4] > rref(A); [1 -2 0 -1 3] [ ] [0 0 1 2 -2] [ ] [0 0 0 0 0] > x1:=2*x2+x4-3*x5: > x3:=-2*x4+2*x5: > u:=<2,1,0,0,0>;v:=<1,0,-2,1,0>;w:=<-3,0,2,0,1>;Ladotaan nämä vierekkäin:
[2 1 -3] [ ] [1 0 0] [ ] [0 -2 2] [ ] [0 1 0] [ ] [0 0 1]Vektorit ovat LRT, sillä jokaista vapaata muuttujaa vastaa matriisissa yksikkömatriisin rivi. Suoraan LRT-määritelmästä, kun katsotaan näitä kohtia, nähdään, että kertoimien on oltava = 0. (Vektorit tietysti virittävät N(A):n.)
Tämä on yleistyskelpoinen päättely. Ilman muutahan aina kunkin vapaan muuttujan numeroisella rivillä on yksikkömatriisin rivi. Riittäköön tämä, emme mene sen formaalimpaan todistukseen tässä kohden.
Johtopäätös: N(A):n dimensio, jota merkitsemme n(A):lla = vapaiden muuttujien lukumäärä.
n(A)=dim(N(A))=vapaiden muuttujien lkm |
Esim
> A:=<<1,3,2,5>|<4,12,8,20>|<0,1,1,2>|<2,5,3,8>|<-1,5,2,8>>; [1 4 0 2 -1] [ ] [3 12 1 5 5] A := [ ] [2 8 1 3 2] [ ] [5 20 2 8 8] > ref(A); [1 4 0 2 -1] [ ] [0 0 1 -1 8] [ ] [0 0 0 0 -4] [ ] [0 0 0 0 0] Tukisarakkeiden indeksit: 1,3,5. > A[1..-1,[1,3,5]]; [1 0 -1] [ ] [3 1 5] [ ] [2 1 2] [ ] [5 2 8] Siinäpä komeilee col(A):n kanta.
A:=<<-2,1,3,1>|<-5,3,11,7>|<8,-5,-19,-13>|<0,1,7,5>|<-17,5,1,-3>>; [-2 -5 8 0 -17] [ ] [ 1 3 -5 1 5] A := [ ] [ 3 11 -19 7 1] [ ] [ 1 7 -13 5 -3] > ref(A); [-2 -5 8 0 -17 ] [ ] [ 0 1/2 -1 1 -7/2] [ ] [ 0 0 0 -4 20 ] [ ] [ 0 0 0 0 0 ] > F:=rref(A); [1 0 1 0 1] [ ] [0 1 -2 0 3] F := [ ] [0 0 0 1 -5] [ ] [0 0 0 0 0] > B:=F[1..-2,1..-1]; [1 0 1 0 1] [ ] B := [0 1 -2 0 3] [ ] [0 0 0 1 -5] > rivi:=(M,i)->M[i,1..-1]; rivi := (M, i) -> M[i, 1 .. -1] > kantavektorit:=seq(rivi(B,i),i=1..3); kantavektorit := [1, 0, 1, 0, 1], [0, 1, -2, 0, 3], [0, 0, 0, 1, -5] Huom! Toki kantavektorit voidaan muodostaa myös A:n rivivektoreista. Miten tehdään kätevästi. No kyseessähän on A^T:n sarakeavaruus. Tehdään ref(A^T):lle ja poimitaan.
Edellä nähtiin, että sarakeavaruuden dim = pivotsarakkeiden lkm ja riviavaruuden dim = nollasta poikkeavien rivien lkm ref(A):ssa. Mutta jokaista pivottia kohti on täsmälleen yksi nollasta poikkeva rivi ja yksi sarake ref(A):ssa. Niinpä päädymme lineaarialgebran erääseen "ihmeeseen": dim(row(A))=dim(col(A)) . Rangi voitaisiin siten määritellä myös riviavaruuden dimensioksi. Toisin sanoen:
Rangi r(A) on nollasta poikkeavien rivien lkm ref(A):ssa, eli alimman ei-nollarivin rivi-indeksi. (Siksipä merkitsimme viime mainittua jo ennakoivasti r:llä.
Lause (Lineaarialgebran peruslauseen matriisimuoto)
Olkoon A m x n - matriisi. Tällöin
r(A) + n(A) = nSanoin lausuttuna: rangi + "nulliteetti" = n |
Tod: Olkoon E=ref(A). r(A) = pivotsarakkeiden lkm. Edellä todettiin: n(A) = vapaiden muuttujien lkm. No mutta siinäpä se, muunlaisia sarakkeita ei ole, kuin näitä kahta tyyppiä, joten summaksi tulee n.
col(A) = T(Rn) (kuvajoukko) N(A) = ker(T) (ydin={x | T(x) = 0} )Siten:
(kuva-avaruuden dim) + (ytimen dim) = Lähtöavaruuden (määrittelyjoukon) dim |
r n ------------------------------- | | | (r < m) ja (b2 # 0): ei ratk. | | | (r = m) tai (b2 = 0): | | | r = n : 1-käs. ratk. | | | r < n : (n-r) vapaata par. | Ir x r P | | | | | | | | | | | | r ------------------------------- | 0 | 0 | | 0 | 0 | m -------------------------------Lineaaristen systeemien peruslause näkyy suoraan tästä kuvasta, kuten L1:ssä todettiin.
Tulos on siltä osin epätyydyttävä, että siinä esiintyy rivioperaatioilla muuteltu b-vektori (jota kutsuimme nimellä bmato). Muistamme, että a)-kohta (r < m ja B2#0) oli ainoa tapaus, jossa ratkaisuja ei ole.
Tämä ehto voidaan elegantisti lausua rangin avulla. Muistamme: r(A) on max-määrä LRT sarakkeita (=sarakeavaruuden dimensio). Jos katsomme matriisia Ab = [A b] (Matlab-syntaksi), niin aina pätee R(Ab) >= R(A) ja yhtäsuuruus pätee joss b kuuluu A:n sarakeavaruuteen.
Lauseemme voidaan siis muotoilla näin:
Kts. KRE 6.5 Thm 1 s. 338.
Lause (linsys, muoto 2)
Olkoon A (mxn) matriisi ja b sarakevektori (pituus m). Merk. taas:
Ab=[A b]Systeemillä A x = b on ratkaisuja JOSS r(A)=r(Ab). Oletetaan nyt, että ratkaisuja on, eli r(A)=r(Ab)=r.
(b) Jos r=n (täysi rangi, "full rank"), niin yksikäsitteinen ratk. |
Mieleen palautusta:
Olkoon A nxn-matriisi (neliömatr.) Matriisiin A voidaan liittää
luku det(A).
Kannattaa palauttaa mieleen ainakin determinanttien kehittäminen alideterminanttien ja shakkilautamerkkikaavion avulla.
Determinanttien merkitys lienee hieman vähenemään päin. Kannattaa muistaa, että determinanttien teoria on paljon vanhempaa kuin matriisien.
Esimerkki kauniista, mutta tehottomasta kaavasta on Cramerin sääntö. Se on käytännön laskennassa toivottoman tehoton (jos n > 4). Gauss on aivan ylivertainen.
Determinantit ovat silti erinäisissä yhteyksissä tarpeellisia ja käteviä.
KRE esitystapa on tarpeisiimme oikein sovelias.
Lähdetään 2x2-
determinantista ja laajennetaan tunnettuun tapaan yleisille n-rivisille.
Muistathan:
Determinantti on luku, kun taas matriisi on lukutaulukko.
Determinantti määritellään vain neliömatriisille.
Lause (determinanttien kertosääntö) det(AB)=det(A)det(B) |
Determinanttien merkitys yhtälösysteemien teoriassa perustuu siihen, että Gaussin rivioperaatiot eivät muuta determinantin nollaluonnetta (nolla/ei-nolla). Yläkolmiomatriisin determinantti puolestaan on helppo laskea:
Rivioperaatioihin nähden pätee:
Lause (KRE Thm. 1 sec. 6.6, s. 345) Determinantin käyttäytyminen
rivioperaatioissa.
Lause Neliömatriisin A (n x n) rangi on täysi (eli n)
jos ja vain jos det(A) # 0 |
Huom! Tämä esitetään KRE s. 347 (Thm. 3) yleisemmässä muodossa, mutta meille riittää hyvin tämä.
AB = BA = IMatriisia B sanotaan tällöin A:n käänteismatriisiksi ja merk B=A-1.
Käänteismatriisin olemassaolo ja määrittäminen palautuu välittömästi n:ään yhtälösysteemiin, joiden kerroinmatriisina on A ja oikeana puolena yksikkömatriisin sarakkeet. Tästä nähdään heti, että matriisilla A (nxn). on käänteismatriisi JOSS r(A)=n Siten:
Kootaan yhteen neliömatriisi/systeemiasioita:
Lause A (nxn). Seuraavat ominaisuudet ovat yhtäpitäviä:
|
Lause Jos A(nxn) ja B(nxn) ovat kääntyviä, niin AB on kääntyvä ja (AB)-1=B-1A-1
Tod: Suora lasku, käytetään matriisitulon liitännäisyyttä ja käänteismatriisin määritelmää. (Kukaan ei voi eksyä harhapoluille!)
>> A=[-1 1 2;3 -1 1;-1 3 4] A = -1 1 2 3 -1 1 -1 3 4 >> A_ja_Id=[A eye(3)] A_ja_Id = -1 1 2 1 0 0 3 -1 1 0 1 0 -1 3 4 0 0 1 >> rref(A_ja_Id) ans = 1.0000 0 0 -0.7000 0.2000 0.3000 0 1.0000 0 -1.3000 -0.2000 0.7000 0 0 1.0000 0.8000 0.2000 -0.2000 >> B=ans(:,4:6) B = -0.7000 0.2000 0.3000 -1.3000 -0.2000 0.7000 0.8000 0.2000 -0.2000 >> B=ans(:,4:6) B = -0.7000 0.2000 0.3000 -1.3000 -0.2000 0.7000 0.8000 0.2000 -0.2000Tässä ratkaisemme yhtäaikaa kolme yhtälösysteemiä, joissa sama kerroinmatriisi A ja b-vektorina vuorollaan kukin yksikkömatriisin sarake. Jos matriisi A on kääntyvä, niin rref(A) on yksikkömatriisi. Tällöin kukin bmato antaa suoraan vastaavan ratkaisuvektorin, joten bmadot vierekkäin antavat käänteismatriisin sarakkeet. Ts. rref(AI) tekee vasemmalle puolelle 3x3-yksikkömatriisin (jos täysi rankki) ja oikealle puolelle A:n käänteismatriisin (simsalabim!)
No katsotaan, onko päättelymme mennyt putkeen:
>> A*B
ans =
1.0000 0 -0.0000
0.0000 1.0000 0
0 0 1.0000
Lisätään vielä tulostustarkkuutta.
>> format long
>> A*B
ans =
1.00000000000000 0 -0.00000000000000
0.00000000000000 1.00000000000000 0
0 0 1.00000000000000
Hyvältä näyttää!
Matlab-esimerkki (hieman edellistä laajempi)
Katso, jos haluat
x -> (x[1],...,x[n]) -> A (x[1],...,x[n])' , missä A saadaan latomalla F(e[i])-vektorien koordinaattivektorit kannan {f[1],...,f[m]} suhteen matriisin sarakkeiksi. Tuloksena saadaan koordinaattivektori, joka ilmaisee koordinaatit f-kannassa.Lause
Tod 1. seuraa matriisikertolaskun liitännäisyydestä. 2. on välitön seuraus kääntesmatriisin (ja käänteiskuvauksen) määritelmästä.
- Yhdistetyn kuvauksen matriisi on vastaavien matriisien tulo.
- Käänteiskuvaus on olemassa JOSS kuvauksen matriisi on kääntyvä. Tällöin käänteiskuvauksen matriisi on (tietenkin) kuvauksen matriisin käänteismatriisi.
Huom: Ominaisuus 1. on motivaatio sille, miksi matriisikertolasku määritellään, kuten tehdään.
Tason lineaarikuvauksista
Lineaarikuvaukset L: R2 -> R2 ovat siis kaikki määriteltävissä sopivan matriisin A (2x2) avulla.Dilataatio, diagonaalimatriisi
c=0.6;A=diag([c,c]) % kutistus, (0 < c < 1) c=1.4;A=diag([c,c]) % venytys, ( c > 1) map c1=.3;c2=4;A=diag([c1,c2]) % (x1,x2)->(c1*x1,c2*x2) yleinen diag. kuvaus.map c=0.6;A=diag([c,c])
Kierto
T=30*pi/180;A=[cos(T), -sin(T); sin(T), cos(T)] 0.8660 -0.5000 0.5000 0.8660Icons -> vect. koord: (1.5,0)
Kierto ja dilataatio
T=30*pi/180;c=0.8;A=c*[cos(T), -sin(T); sin(T), cos(T)] A = 0.6928 -0.4000 0.4000 0.6928 Kerran zoomattu
Vektorien kärjet piirtävät spiraalin, joka suppenee kohti O:a.Lineaarikuvauksen havainnollistus, oma skripti
Rakennetaan maanläheinen skripti yksikköympyrän kuvautumisesta.clf A=diag(1:2) % Vaihda A siten kuin haluat. t=linspace(0,2*pi,50); % Kulmat ympyra=[cos(t);sin(t)]; % 1-ymp. pisteet: 1. rivi: x-pisteet % 2. rivi: y-pisteet kuva=A*ympyra; % Kuvapisteet A:lla kerrottaessa plot(ympyra(1,:),ympyra(2,:),'r') % Ympyrä punaisella 'r' hold on plot(kuva(1,:),kuva(2,:),'b'); % Kuva sinisellä axis('square');axis([-4 4 -4 4]) grid;shg; disp('Valitse punaiselta ympyrältä piste, jonka kuvan haluat nähdä') [x,y]=ginput(1) plot([0,x],[0,y],'r') uv=A*[x;y]; plot([0,uv(1)],[0,uv(2)],'b')Saadaan tällainen:
Tähän olis kiva laittaa for-silmukka, joka antaisi mahdollisuuden valita useita pisteitä ja katsoa niiden kuvautumista
Strangin talo
Str-kirjan kansikuvassa on taloja. Jotta kiertomatriisin luominen olisi vaivatonta, voimme kirjoittaa funktion:%%%%%%%% kierto.m %%%%%%%%%%%% function A=kierto(theta) A=[cos(theta), -sin(theta); sin(theta), cos(theta)]; %%%%%%%%%%%%%%%%%%%%%%%%%%%% % Strangin talo clf T=[0 0 -1 6 13 12 12 3 3 6 6 0;0 9 8 15 8 9 0 0 5 5 0 0] plot(T(1,:),T(2,:)) shg A=kierto(pi/4);S=T; S=A*S;plot(S(1,:),S(2,:)) %% nn-iteroi!Modifikaatio: joka talo omaan ikkunaan
Joskus järkevää, joskus ei!clf T=[0 0 -1 6 13 12 12 3 3 6 6 0;0 9 8 15 8 9 0 0 5 5 0 0] plot(T(1,:),T(2,:)) shg A=kierto(pi/4);S=T; S=A*S;figure;plot(S(1,:),S(2,:)) %% nn-iteroi!