Lineaarialgebra a, kevät 2018 Harjoitusta 4 Maplella restart; with(linalg): Warning, the protected names norm and trace have been redefined and unprotected Osassa seuraavista on temppuiltu Maplella, eikä sittenkään kaikilta osin ole saatu vastauksia ideaalisessa muodossa; lukijalle jää vielä "tulkintatyötä". Tehtävä 1. Käänteismatriisi määritelmää käyttäen A := matrix([[3,5], [1,-2]]); B := matrix(2,2, [a,b,c,d]); # toinen tapa määritellä Id := matrix(2,2, [1,0,0,1]); # Huom! I on imaginaariyksikkö (1.1) A &* B = Id; evalm(a &* B = Id); # pitäis saada yhtälöryhmäksi tää, miten? (1.2) (1.3) with(student); (1.4) YR := equate(a &*B, Id); # onnaakohan? Ratk := solve(yr); # jees, nyt ratkaistaan subs(ratk, B); # ja sijoitetaan B:hen... ups!? subs(ratk, evalm(b)); (1.5) (1.6) (1.7)
(1.8) Tarkastetaan, että myös on BA = Id, eli lasketaan multiply(b, A); (1.9) No voi, eihän niitä B:hen pysyvästi edellä sijoitettukaan! Toteutetaanpa sijoitus uudestaan ja annetaan nimi Behdokas := subs(ratk, evalm(b)); (1.10) multiply(behdokas, A); # tuleekohan nyt yksikkömatriisi? (1.11) Siispä ja tehtävä on ratkaistu. Tehtävä 2. Sieventelyt a) Koska A on säännöllinen ja kaikki ovat n x n -matriiseja, on lauseke määritelty ja tulos samaa kokoa. Liitännäisyyttä ja osittelulakia I käyttäen päästään muotoon = Uudelleen liitännäisyyttä ja käänteismatriisin määritelmää käyttäen ( ) saadaan =, josta osittelulailla II ja taas käänteismatriisin määritelmän avulla lopulta = ja vielä voi osittelulain I mukaan ottaa yhteisen tekijän ja tulos on =. b) Kertolaskun liitännäisyyden, tulon transpoosin laskusäännön ja käänteismatriisin määritelmän mukaan = =. Lausekkeen arvo on siis kaksoistranspoosin laskusäännön mukaan = (1)_nxn, pelkkiä ykkösiä sisältävä n x n-matriisi. c) Lauseke ei ole määritelty, koska esimerkiksi tulossa eivät dimensiot täsmää (paitsi jos n = 1). Tehtävä 3. Alkeismatriisien tyypit ja käänteismatriisit restart; with(linalg): Warning, the protected names norm and trace have been redefined and
unprotected Id := Matrix(3, 3, shape = identity); (3.1) on tyyppiä III, ja se on saatu yksikkömatriisista operaatiolla E[1] := addrow(id,2,1,-7); (3.2) on ei ole alkeismatriisi, sillä sitä ei saada yksikkömatriisista millään yhdellä alkeisoperaatiolla (tai: siitä ei saada yksikkömatriisia millään yhdellä alkeisoperaatiolla). on tyypin II alkeismatriisi,sillä se saadaan yksikkömatriisista kertomalla 2. rivi luvulla -7: E[3] := mulrow(id,3,-2); (3.3) on alkeismatriisi, joka saadaan yksikkömatriisista operaatiolla E[4] := swaprow(id,1,3); (3.4) Käänteismatriisit ovat map(inverse, [E[1], E[3], E[4]]); (3.5) Tehtävä 4. Käänteismatriisit ja matriisiyhtälöiden ratkaiseminen restart; with(linalg): Warning, the protected names norm and trace have been redefined and unprotected Käytössäsi ovat alkeisoperaatiot I rivien vaihto swaprow
II rivin kertominen mulrow III rivi lisätään toiseen jollain kerrottuna addrow joiden syntaksi pitää tietysti selvittää katsomalla Helpistä tai kokeilemalla. A := matrix([[4,3],[1,-2]]): B := matrix([[3,-2],[-6,4]]): Id := matrix([[1,0],[0,1]]): print(a,b,id); (4.1) Laajennettu matriisi A Id : augment(a,id); (4.2) addrow(%,1,2,-1/4); (4.3) mulrow(%,1,1/4): mulrow(%,2,-4/11); (4.4) Id_invA := addrow(%,2,1,-3/4); (4.5) Matriisin A käänteismatriisi on siis tuossa oikealla, erotetaan se ja verrataan Maplella suoraankin saatavaan: inva := submatrix(id_inva,1..2,3..4); (4.6) inverse(a); # Maplen käskyllä suoraankin (4.7) Laajennettu matriisi B Id : augment(b,id); (4.8)
(4.8) addrow(%,1,2,2); (4.9) Nähdään, että B ei voi olla riviekvivalentti yksikkömatriisin kanssa, joten se on singulaarinen eikä sillä siis ole käänteismatriisia! Kohta a) Koska A on säännöllinen, yhtälö voidaan aluksi kertoa oikealta A:lla, jolloin saadaan ja voidaan ratkaista, missä tarvittava käänteismatriisi inva oli jo laskettu edellä: multiply(inva, B); (4.10) linsolve(a, B); # tässä se on vielä tehty suoraankin (4.11) Kohta b) Tässäkin voidaan sieventää "käsin": saadaan X = (I + A (B - I)) A ja siis välituloksin valituloksetjax := map(evalm,[ A &* (B-Id), Id + (A &* (B-Id)), (Id + A &* (B-Id))&* A ]); (4.12) X := valituloksetjax[3]; # listan 3. jäsen (4.13) Tarkastus: sijoitetaan aluperäiseen yhtälöön I + AB - XA^(-1) = A evalm(id + A &* B - X &* inva = A); (4.14)
Kohta c) Koska B ei ole säännöllinen, ei voida ratkaista suoraan. Määritellään X := matrix(2,2,[x1,x2,x3,x4]): Muodostetaan matriisiyhtälö evalm(b &* X = 2*B); (4.15) with(student); (4.16) YR := equate(b &* X, 2*B); solve(yr); # tutkitaan ratkaisuja: (4.17) (4.18) Siis äärettömästi ratkaisuja; valitaan vapaiksi x3 ja x4 Ratk := solve(yr,{x1, x2}); (4.19) X := subs(ratk,evalm(x)); (4.20) Vielä parametrimuotoon, sijoitetaan x3 = s ja x4 = t: Xst := subs({x3 = s,x4 = t}, evalm(x)); (4.21) Tarkastus: evalm(b &* Xst = 2*B); (4.22) Tehtävä 5. Matriisi B singulaarinen? restart; with(linalg): Warning, the protected names norm and trace have been redefined and unprotected Viedään laajennettu matriisi porrasmuotoon (riittäisi tässä tietysti viedä vain B) alkeisoperaatioilla
B := matrix([[2, -4, 1], [2, 0, 5], [-2, 3, -2]]); Id := matrix([[1, 0, 0], [0, 1, 0], [0, 0, 1]]); (5.1) augment(b,id); (5.2) addrow(%,1,2,-1): addrow(%,1,3,1); # I vaihe (5.3) Toinen vaihe: addrow(%,2,3,1/4); (5.4) mulrow(%,1,1/2): mulrow(%,2,1/4); (5.5) Vasen matriisi on nyt porrasmuodossa, josta singulaarisuus näkyy nollarivinä vasemmalla. Tarkemmin: B ei ole riviekvivalentti yksikkömatriisin kanssa, joten se on singulaarinen. Maplessa redusoitu porrasmuoto saadaan suoraan käskyllä (gausselim vie lähes porrasmuotoon) gaussjord(b); (5.6)
Tehtävä 6. Toistensa käänteismatriisit Määritellään matriisit: A := matrix([[4,3,-2], [-4,-2,2], [8,2,2]]); (6.1) B := 1/12*matrix([[-4, -5, 1], [12, 12, 0], [4, 8, 2]]); (6.2) multiply(a, B), multiply(b, A); # ovatko tulot yksikkömatriiseja? (6.3) Ratkaistaan suoraan A:n käänteismatriisia B käyttäen, kun se tässä jo tiedetään.määritellään tarvittavat vektorit ba := vector([3,2,1]); bb := vector([1,-2,3]); (6.4) Kertominen multiply-käskyllä tai dyadisesti &*-käskyllä (joka ei yleensä kirjoita tuloja auki, siksi evalm map(evalm, [B &* ba, B &* bb]); # molemmat vastaukset kerralla (6.5) Tietysti voisi ratkaista myös Gaussilla tai Maplen matriisiyhtälökäskyllä linsolve(a,ba), linsolve(a,bb); (6.6) Tehtävä 7. Alkeismatriisien jäljitys Määritellään yksikkömatriisi Id ja sen avulla alkeisoperaatiot EI = rivien vaihto EII = rivin kertominen luvulla EIII = rivi lisätään toiseen a-kertaisena Id := matrix([[1,0,0],[0,1,0],[0,0,1]]);
(7.1) EI := (i,j) - swaprow(id,i,j); Kokeillaan: EI(2,3); (7.2) (7.3) EII := (i,a) - mulrow(id,i,a); EII(2,5); (7.4) (7.5) EIII := (i,j,a) - addrow(id,i,j,a); EIII(2,3,5); (7.6) (7.7) print(id); # ALOITETAAN! (7.8) Määritellään rivien 2 ja 3 vaihto matriisiksi E1: E1 := EI(2,3); (7.9) kerrotaan A0 = Id sillä vasemmalta saadaksesi A1: A1 := multiply(e1,id); (7.10) Järkätään vasempaan ylänurkkaan 3 kertomalla alkeismatriisilla E2:
E2 := EII(1,3); (7.11) A2 := multiply(e2,a1); (7.12) Järkätään ylös keskelle ykkönen: E3 := EIII(3,1,1); (7.13) A3 := multiply(e3,a2); (7.14) Sitten keskelle kakkonen: E4 := EIII(3,2,2); (7.15) A4 := multiply(e4,a3); (7.16) Lopuksi skaalataan kolmas rivi: E5 := EII(3,-6); (7.17) A5 := multiply(e5,a4); (7.18) Kokeillaan sitten toimiiko:
Atulona := multiply(e5,e4,e3,e2,e1); (7.19) Käänteismatriisin pitäisi nyt olla edellisten käänteismatriisien tulo käänteisessä järjestyksessä: kaantmat := multiply(e1^(-1),e2^(-1),e3^(-1),e4^(-1),e5^(-1) ); (7.20) Kokeillaan: multiply(atulona,kaantmat), multiply(kaantmat,atulona); (7.21)