KRE : 7.4. s. 344 -> GRE : 8.1 s. 391 -> Strang Simo Kivelä Algebra ja Geometria luku 4
> with(linalg): # Ladataan lineaarialgebrapakkaus
> A:=matrix(3,4,[a[1,1],a[1,2],...,a[3,4]]);
3 x 4 - matriisi täytetään vaakariveittäin.
> B:=matrix(4,5,b); #
Toinen tapa on antaa vaakalistojen listana (lähellä Matlab-syntaksia).
matrix([[1,2,3],[4,5,6],[7,8,9]]);
Matriisialgebra toimii + ja - laskuissa normaaliin tapaan. Skalaarilla
kertomisoperaatio on *
Matriisikertolaskun symboli on &*
Normaali tapa laskea on
> C:=evalm(A &* B);
Maplessa tarvitaan aina loppumerkki (; tai :), kaksoispiste (:) estää
tulostuksen.
Maple käsittelee sekä symbolisia että numeerisia matriiseja.
Rationaaliluvuilla se operoi tarkasti, ellei erityisesti pyydetä
liukulukulaskentaa.
Matriisien käsittely Matlab:lla
>> A=[1,2,3,4;5,6,7,8;9,10,11,12]
>> B=A'
>> C=A*B
Matlab:ssa ei tarvita loppumerkkiä. Jos tulostus halutaan estää, lopetetaan
puolipisteeseen (;)
Matlab käsittelee vain numeerisia matriiseja, mutta niitä sitten tehokkaasti.
2. Lineeriset yhtälösysteemit, Gaussin eliminaatio
A x =b, missä
A on kerroinmatriisi (m x n) (m yhtälöä, n tuntematonta)
x on tuntemattomien muodostama sarakevektori (n x 1)
b on annettujen lukujen muodostama sarakevektori (m x 1)
Ratkaisujen lukumäärä voi olla 0, 1 tai ääretön, kuten jo 2 x 2 systeemeistä
tiedetään (yhdensuunt. suorat, leikkaavat suorat, yhtyvät suorat).
Riviajattelu: Suorien leikkauspiste
Sarakeajattelu: Etsitään annetun vektorin (b) koordinaatit
matriisin sarakevektorien avulla esitettynä.
Gaussin eliminaatio, s. 347
Alkeisrivioperaatiot
1. rivi[i] <--> rivi[k] (rivien vaihto)
2. rivi[i] <-- c*rivi[i] , c ei ole 0
3. rivi[i] <-- rivi[i]+c*rivi[k] , c ei ole 0
Rivioperaatioissa yhtälösysteemi säilyy ekvivalenttina (samat ratkaisut).
Tähän perustuu ratkaisu Gaussin menettelyllä.
Muunnetaan systeemi yläkolmiomuotoon. Rivioperaatiot voidaan helpoimmin
kohdistaa suoraan matriisiin, jossa A:n perään liitetään b-sarake. Tätä
sanotaan liitännäismatriisiksi, "augmented matrix"
Maple
> with(linalg):
> A:=matrix(m,n,[a[1,1],...,a[m,n]]);
> b:=vector([b[1],...,b[m]);
> Ab:=augment(A,b);
Matlab
>> A=[...;...; ... ];b=[....]';Ab=[A b]
Luennolla katsotaan esimerkkejä, kts. myös
Esimerkki rivioperaatioista Maplella tehtynä .
Porrasmuoto, Echelon form
Gaussin algoritmi johtaa aina muotoon:
a[1,1] a[1,2] ... a[1,n] b[1]
0 c[2,2] ... c[2,n] bmato[2]
0 0
0 0
0 0 0.. 0 k[r,r] ... k[r,n] bmato[r]
0 0 .... 0 ... 0 bmato[r+1]
0 0 .... 0 ... 0 bmato[m]
Tässä "päälävistäjän" alkiot a[1,1], c[2,2], ..., k[r,r]
ovat nollasta poikkeavia.
Tämä muoto saadaan aikaan sarakevaihtojen avulla siten, että aina kun
käsiteltävä tukialkio (pivot) = 0 ja sen alapuolella oleva sarake on
niinikään pelkkää 0:aa, niin ko. sarake siirretään loppuun (siis A-
osan loppuun).
Edellä saadusta muodosta on helppo lukea kaikki mahdolliset tapaukset.
Itse ratkaisun kannalta sarakevaihdot aiheuttavat ylimääräisen komplikaation,
sillä tuntemattomien järjestyksestä täytyy silloin pitää kirjaa.
Niinpä käytännössä niitä ei yleensä tehdä, vaan annetaan päälävistäjän
porrastua tarpeen mukaan pitempiin askelmiin.
Olennaista on, että siirryttäessä seuraavalle riville alaspäin,
1. nollasta poikkeva alkio siirtyy oikealle ainakin 1. askeleen.
Ratkaisujen olemassaolo ja lukumääräkysymykset ovat kaikki luettavissa
tästä kaaviosta. (KRE s. 351, GRE s. 10 (GRE:ssä r:n sijasta q))
Tapaukset ovat
(a) r < m ja jokin bmato[i] # 0, r+1 <= i <= m
Ei ratk.
Esimerkki
(b) r=n ja bmato[i]=0, i=r+1 .. m (tai nämä (i > r)bmadot puuttuvat (tap. m=n))
yksikäs. ratk.
Esimerkki
(c) r < n ja bmato[i]=0, i=r+1 .. m (tai "kriittiset" bmadot puuttuvat
(tap. m < n ja r = m) )
äärettömän monta ratkaisua
Esimerkki (Myös (a)-kohdassa oli jo yksi.)
Tärkeä seurauslause homogeenisille systeemeille Ax=0
Seuraus. Jos homogeeniyhtälössä (b=0) on m < n ,
niin aina on äärettömän monta ratkaisua. Sillä tällöinhän bmato=0
ja r <=m < n .
Havainnollistus
(kesken )
a)
m m
------------------ ----------
| | | |
| | | |
| | | |
| | | |
r ------------------ r ----------
| 0 ... 0 | | 0..0 |
| 0 ... 0 | | 0..0 |
m ------------------ m ----------
Gauss-resepti
Askel 1: Oletetaan, että a[1,1] # 0 (uudelleenjärjestämällä).
Valitaan kertoimet c[2]=-a[2,1]/a[1,1],...,c[m]=-a[m,1]/a[1,1]
ja suoritetaan rivioperaatiot:
rivi[2] <-- c[2]*r[1] + r[2]
...
rivi[m] <-- c[m]*r[1] + r[m]
Näin saadaan alkion a[1,1] alle 0-sarake.
Askel 2: Jos amato[2,2] ja kaikki sen alapuoliset alkiot ovat
sattumoisin = 0, niin kaikki on hyvin. Tällöin syntyy
"pitkä porras" ja siirrytään katsomaan samalla silmällä
amato[2,3]:a ja sen alapuolista saraketta.
Ellei, niin vaihdetaan tarvittaessa rivejä niin, että
uusi amato[2,2] # 0. (Numeerisessa käytännössä vaihdetaan
itseisarvoltaan mahdollisimman suuri.)
Sitten jatketaan kohdasta [2,2] alkavalle alimatriisille
samoin kuin Askel 1:ssä.
Näin jatketaan niin kauan, kunnes kaikki on nollaa alapuolella tai
törmätään alareunaan (r=m) .
(Jos pysähdytään pystyseinään (r=n), niin silloinkin kaikki on
nollaa alapuolella, eli tätä ei tarvitse sanoa erikseen lopetusehtona.)
Huom Yllä esiintyvää r-lukua ei sattumalta merkitä r:llä,
vaan siihen liittyy termi rank .
Takaisinsijoitus
Kun systeemi on saatu porrasmuotoon, saadaan ratkaisut heti lasketuksi,
tai nähdään välittömästi, että ratkaisuja ei ole.
Gaussin algoritmi on sikäli miellyttävä, että sen avulla saadaan sekä
ratkaisut lasketuksi (jos niitä on) että olemassaolo- ja lukumäärätieto
(ellei numeerisia
vaikeuksia oteta huomioon).
Systemaattinen tapa laskea ratkaisut on katsoa ensin alhaalla
olevat 0-rivit. Jos jonkun 0-rivin kohdalla bmato-sarakkeessa
on nollasta poikkeava luku, ei homma jatku, vaan todetaan, että ratkaisuja
ei ole. (Tapaus (a) yllä )
Jos ristiriitaisia yhtälöitä ei ole, käydään käsiksi
alimmaiseen ei-0-riviin, rivi[r] .
Siitä lasketaan x[r] (joko 1-käs tai ottamalla vapaiksi parametreiksi
x[r+1], ... , x[n] ). Näin edetään alhaalta ylös.
Maple
Kun Gaussin algoritmia on joitakin kertoja harjoiteltu rivi riviltä,
addrow ja swaprow - tyyppisillä komennoilla
(vrt. Perus-Gauss ), voidaan ryhtyä käyttämään
komentoja
gausselim ja backsub
3. Gauss-Jordan, redusoitu porrasmuoto, rref
KRE s. 366, Exa 1, GRE s. 13
Takaisinsijoitus voidaan myös toteuttaa rivioperaatioina, jolloin
päädytään muotoon, josta ratkaisut ovat luettavissa vielä suoremmin
kuin alakolmiomuodosta. Siitä käytetään nimitystä redusoitu
porrasmuoto, "reduced row echelon form" (siitä lyhenne rref, jota mekin
käytämme).
Tässä nollataan yläkolmiota myös niin
paljon kuin mahdollista. Ei-singulaarisen neliösysteemin tapauksessa päädytään
diagonaalimatriisiin.
Tämä on erityisen hyödyllinen tapa silloin, kun on laskettava annetun
neliömatriisin käänteismatriisi.
Redusoitua porrasmuotoa luonnehditaan näin
* * * * * * *
[1 0 0] [1 0 2] [1 5 0 0]
[ ] [ ] [ ]
[0 1 0] [0 1 6] [0 0 1 2]
[ ] [ ]
[0 0 1] [0 0 0] [0 0 0 0]
[0 0 0 0]
* * * *
[1 1 0 0 0 6]
[ ]
[0 0 1 0 0 -1]
[ ]
[0 0 0 1 0 3]
[ ]
[0 0 0 0 1 1]
Maple ja Matlab
Maplen linalg-pakkauksessa on funktio gaussjord ja Matlab:ssa funktio rref . Tosin Matlab:n rref toimii joissakin tilanteissa väärin, liekö korjattu versiossa 5.
Esimerkkejä käänteismatriisin laskemisesta
Luennolla ja KRE s. 366 Exa 1.