http://www.math.hut.fi/teaching/v/3/02/L/LA3.html
Päivitetty 1.10.03
Tämä on hiukan kesken, mm. monet laskentaesimerkit on tehty Maplella, tosin sen ei pitäisi isommin haitata, koska syntaksi lienee yleimatemaattista.

LA3

Kirjalyhenteet:

   TE: Timo Eirolan pruju
   KRE Kreyszig (8. painos)
   LAY: Lay Linear Algebra
   STR  Strang: Linear Algebra
   LAODE: Golubitsky-Dellnitz

Näissä kirjojen kohdissa on tähän liittyvää

    KRE 7.5,7.6, 7.15
    LAODE 

Matriisiin liittyvät vektoriavaruudet

Annettu m x n - matriisi A.

Avaruus dimensio
riviavaruus, row(A) rangi, r(A)
sarakeavaruus, col(A) rangi, r(A)
nolla-avaruus, N(A) nulliteetti, n(A)

Nolla-avaruus, eli ydin

Esim
Määritä N(A):n kanta, kun
> 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

Sarakeavaruus col(A)

Lause col(A):n kannan muodostavat A:n tuki- (=pivot-) sarakkeet. (Ne paljastuvat ref:stä.) Siis ref(A):sta katsotaan tukisarakkeiden indeksit, niillä mennään alkuperäiseen A-matriisiin poimimaan a-sarakkeet.

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.
  

Riviavaruus row(A)

Esim.
 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.
  

Rangi, lineaarialgebran peruslauseen matriisimuoto

Määritelmä Matriisin A rangi, eli (säännöllisyys)aste on sarakeavaruuden dimensio dim(col(A)). Merk r(A).

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) = n
Sanoin 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.

Peruslause lineaarikuvaukstermein

Jos ajattelemme (ennakoivasti) matriisin määräämän lineaarikuvauksen T=LA kannalta, niin (kohta näemme):
        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

Lineaarisia yhtälösysteemejä koskeva lause alkuperäisen datan avulla

Palautetaan lineaaristen systeemien peruslause. Esitetään Gauss-Jordan- eli rref-muodossa. Tässä siis r < m merkitsee, että 0-rivejä on, ja r < n, että "parametrisarakkeita" on.
                                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.


Toisaalta, jos kirjoitamme matriisiyhtälön vektoriyhtälöksi (riviajattelu ==> sarakeajattelu), niin ratkaisun olemassaolololle on välttämätöntä ja riittävää, että b-vektori voidaan lausua A-matriisin sarakevektoreiden lineaarikombinaationa. Tämä merkitsee, että epäkonsistentti a)-tapaus esiintyy jos ja vain jos (joss) b ei kuulu A:n sarakeavaruuteen col(A).

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.


Yllä oleva (viivojen välinen) päättely jätetään selitettäväksi harj2LV teht. 4 (a)

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.
(c) Jos r < n, niin n-r vapaasti valittavaa param. (äärettömän monta ratk.)


Neliömatriisit

Determinantit

Voit kerrata (tai tustua aiheeseen) lukaisemalla KRE 6.6 s. 341 - 347. (Cramerin sääntöä emme tarvitse, voit siten lopettaa s. 347 alaosaan.)

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)
Kaunis!, helppo muistaa, todistuskaan ei ole ollenkaan niin hankala, kuin voisi luulla. (kts. KRE Thm. 7 s. 356). Jätämme todistuksen kuitenkin väliin, emmekä vaadi osattavaksi, itse kaavan kylläkin.

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:

Yläkolmio(alakolmio-)matriisin det = diagonaalialkioiden tulo.
(Olisi sopiva pikku harjoitustehtävä, mutta emme malta pysähtyä nyt tähän.)

Rivioperaatioihin nähden pätee:
Lause (KRE Thm. 1 sec. 6.6, s. 345) Determinantin käyttäytyminen rivioperaatioissa.

Tästä seuraa:
Lause Neliömatriisin A (n x n) rangi on täysi (eli n) jos ja vain jos
det(A) # 0
Tod: Neliömatriisin rangi on täysi, jos ja vain jos jokainen sarake on pivot-sarake, ts. ref(A):n diagonaalialkiot ovat kaikki # 0. Koska det(A)#0, joss det(ref(A))#0, ja vm. on diagonaalialkoiden tulo, niin todistus on valmis.

Huom! Tämä esitetään KRE s. 347 (Thm. 3) yleisemmässä muodossa, mutta meille riittää hyvin tämä.

Käänteismatriisi

Määritelmä Neliömatriisi A (nxn) on kääntyvä, eli säännöllinen eli ei-singulaarinen, jos on olemassa matriisi B siten, että
          AB = BA = I
Matriisia 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:

Viimeinen lausahdus tarkoittaa sitä, että käänteismatriisi on erinomainen apuväline teoreettisissa tarkasteluissa, matriisilausekkeissa ym., mutta käytännön laskuissa sitä ei juurikaan tarvita. (Käytetään matriishajoitelmaa, kuten LU-haj.)

Kootaan yhteen neliömatriisi/systeemiasioita:

Lause A (nxn). Seuraavat ominaisuudet ovat yhtäpitäviä:
  1. A:lla on käänteismatriisi A-1
  2. rangi: r(A)=n (täysi rangi)
  3. det(A)#0 (# tarkoittaa erisuuri)
  4. N(A) = {0} (n(A)=0)
  5. A:n sarakkeet ovat LRT ( <==> virittävät)
  6. A:n rivit ovat LRT ( <==> virittävät)
  7. (HY) Ax = 0 vain triviaaliratkaisu x=0
  8. A:n määräämä lineaarikuvaus LA on injektio
  9. (EHY) Ax = b yksikäs. ratk. kaikilla b.
  10. A:n määräämä lineaarikuvaus LA on surjektio

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!)

Käänteismatriisin laskeminen Gauss-Jordanilla

Esim.

>> 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.2000
Tä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


Tästä eteenpäin vanhempaa tekstiä,
Huom! Olkoon yleisesti F:V->W , missä dim(V)=n, dim(W)=m. Jos {e[1],...,e[n]} on mielivaltainen kanta lähtöavaruudessa ja {f[1],...,f[m]} on mielivaltainen kanta maaliavaruudessa, niin sama lasku antaa kuvauksen näin:

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

  1. Yhdistetyn kuvauksen matriisi on vastaavien matriisien tulo.
  2. Käänteiskuvaus on olemassa JOSS kuvauksen matriisi on kääntyvä. Tällöin käänteiskuvauksen matriisi on (tietenkin) kuvauksen matriisin käänteismatriisi.
Tod 1. seuraa matriisikertolaskun liitännäisyydestä. 2. on välitön seuraus kääntesmatriisin (ja käänteiskuvauksen) määritelmästä.

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])
[map1.gif]

Kierto

T=30*pi/180;A=[cos(T), -sin(T);
               sin(T), cos(T)]
       0.8660   -0.5000
       0.5000    0.8660
Icons -> vect. koord: (1.5,0)
[map2.gif]

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

[map3.gif]
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:

[linkuv1.gif]

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!