program p ! paaohjelma ... call sub end subroutine sub ! aliohjelma .. end
Pääohjelma ja aliohjelmat toisistaan riippumattomia. Voivat olla peräkkäin samassa tiedostossa tai erillisissä tiedostoissa.
Pääohjelma ja aliohjelmat käännetään erikseen ja linkitetään yhteen.
Erillisiä aliohjelmia helppo linkittää yhteen.
Aliohjelmakirjasto on vain aliohjelmia sisältävä tiedosto.
Parametrit (viiteparametreja!) ovat vain osoitteita. Käännösaikana ei yleensä mahdollista tarkistaa, että todelliset parametrit ovat oikeaa tyyppiä tai että niitä on oikea määrä. Suoritus voi kaatua hämäräperäiseen ilmoitukseen (segmentation fault tms.)
Globaalit muuttujat on kerrottava erikseen jokaiselle aliohjelmalle common-alueen avulla.
Aliohjelmien työtilan varaaminen hankalaa. Tavallinen ratkaisu on varata työtilat kutsuvassa ohjelmassa ja välittää parametreina alihohjelmalle. Aliohjelmakutsut usein hyvin mutkikkaita.
Fortran 90
Tiedostossa voi olla:
1) Pääohjelma ja proseduureja
program p ! paaohjelma call sub .. end contains subroutine sub ! aliohjelma end end program
Sisäiset proseduurit näkevät pääohjelman globaalit muuttujat automaattisesti.
Parametrien oikeellisuus tarkistettavissa.
2) Ulkoinen proseduuri
Erillisillä proseduureilla voi myös olla omia sisäisiä proseduureja:
subroutine sub ... call inner ... contains subroutine inner ... end end subroutine
Ei useita sisäkkäisiä tasoja, kuten Pascalissa.
3) Moduuli
module m ! tyyppien ja muuttujien maarittelyt ... contains subroutine sub ! aliohjelma end ... end module
Myös moduulin proseduureilla voi olla omia sisäisiä proseduureja.
module m2 ... contains subroutine sub .. contains subroutine inner .. end subroutine inner end subroutine sub ... end module
4) Mitä tahansa ohjelmatekstiä
Esimerkiksi usein toistuva osa voidaan kirjoittaa erilliseen tiedostoon ja ottaa mukaan include-lauseella:
include 'fyle.f'
Erittäin tarpeellinen f77:ssa esimerkiksi globaalien muuttujien (common-alueiden) määrittelyssä. F90:ssä ei vastaavaa ongelmaa.
Jos paikallinen muuttuja alustetaan määrittelyn yhteydessä, sillä on automaattisesti tämä ominaisuus. Sitä EI alusteta uudestaan joka kerta aliohjelmaan tultaessa:
program savetest write(*,*) f(1.0) write(*,*) f(1.0) contains real function f(x) real, intent(in) :: x real :: y=0.0 y=y+1 f=x+y end function end program 2.000000 3.000000
Jos tällaista sivuvaikutusta ei haluta, muuttujat on alustettava sijoituslauseilla:
real function f(x) real, intent(in) :: x real :: y y=0.0 ...
Seuraava on täydellinen luettelo kaikista muuttujan attribuuteista.
dimension: määrittelee taulukon koon
parameter: muuttuja on vakio, jota ei saa muuttaa
save: muuttuja varataan staattisesti ja sen arvo säilyy aliohjelmakutsujen välillä
allocatable: dynaamisesti varattava taulukko
pointer: osoitin
target: muuttujaan saatetaan viitata osoittimen avulla
intent: aliohjelman argumentin käyttötapa
optional: valinnainen argumentti; voi puuttua proseduurin kutsusta
external: muuttuja on proseduurin nimi
intrinsic: muuttuja on varusfunktion nimi
private: moduulin yksityinen muuttuja
public: moduulin julkinen muuttuja
Kaikki edellä esiintyneet yhtälöt ovat tavallisia differentiaaliyhtälöitä. Kahden tai useamman muuttujan yhtälö, joka sisältää osittaisderivaattoja, on osittaisdifferentiaaliyhtälö.
Hyvin monia ilmiöitä voidaan kuvata toisen kertaluvun lineaarisilla yhtälöillä
a (\pd2u / \pd2x) + b (\pd2u / \pd x \pd y) + c (\pd2u / \pd2y) + d (\pd u \pd x) + e (\pd u \pd y) + fu + g = 0.
Tällainen yhtälö on jotakin kolmesta tyypistä riippuen toisten derivaattojen kertoimista:
Jaottelulla ei sinänsä suurta merkitystä numeriikan kannalta, mutta:
Tärkeimmät ratkaisumenetelmät:
Yksinkertainen osittaisdifferentiaaliyhtälö on esimerkiksi Laplacen yhtälö, joka suorakulmaisessa koordinaatistossa on
\pd2u / \pd2x + \pd2u / \pd2y = 0.
Laplacen yhtälössä a=c=1 ja b=0, joten b2-4ac = -4, ja kyseessä on siis elliptinen yhtälö.
Jos oikea puoli ei ole nolla, saadaan Poissonin yhtälö
\pd2u / \pd2x + \pd2u / \pd2y = f(x,y).
Esimerkiksi gravitaatiopotentiaali V toteuttaa Poissonin yhtälön
\pd2V / \pd2x + \pd2V / \pd2y + \pd2V / \pd2z = \nabla2 V = -4\pi G\rho(x,y,z),
missä \rho on tiheys ja G gravitaatiovakio.
Elliptiset yhtälöt kuvaavat usein ajasta riippumatonta potentiaalia tai tasapainossa olevaa systeemiä.
\pd u(xi,yj) / \pd x = (u(xi+1,yj)-u(xi-1,yj)) / 2\Delta x, \pd u(xi,yj) / \pd y = (u(xi,yj+1)-u(xi,yj-1)) / 2\Delta y, \pd2 u(xi,yj) / \pd2 x = (u(xi+1,yj)-2u(xi,yj)+u(xi-1,yj)) / (\Delta x)2, \pd2 u(xi,yj) / \pd2 y = (u(xi,yj+1)-2u(xi,yj)+u(xi,yj-1)) / (\Delta y)2.Merkitään ui,j=u(xi,yj) ja valitaan askel samaksi molemmissa suunnissa, h=\Delta x=\Delta y, jolloin
\pd2 ui,j / \pd2 x = (ui+1,j-2ui,j+ui-1,j) / h2, \pd2 ui,j / \pd2 y = (ui,j+1-2ui,j+ui,j-1) / h2.
Laplacen yhtälö on nyt
\nabla2 ui,j = (ui+1,j-2ui,j+ui-1,j) / h2 + (ui,j+1-2ui,j+ui,j-1) / h2 = 0
eli
(1 / h2)(ui+1,j+ui-1,j+ui,j+1+ui,j-1-4ui,j) = 0.
Laplacen operaattori voidaan esittää kaaviona
1 1 \nabla2 = --- 1 -4 1 h2 1Yhdeksän pisteen menetelmä:
1 1 4 1 \nabla2 = --- 4 -20 4 6h2 1 4 1Kolmiulotteisessa tapauksessa esimerkiksi:
1 1 1 \nabla2 = --- 1 -6 1 h2 1 1
Tylsä vakioesimerkki: suorakaiteen muotoinen levy, jonka yksi reuna pidetään 100 asteen lämpötilassa ja muut reunat 0 asteessa.
Dirichlet'n reunaehto: ratkaistavan funktion arvo tunnetaan koko ratkaisualueen reunalla.
Käytetään vain kolmea hilapistettä:
0 0 0 0 u1 u2 u3 100 0 0 0Lasketaan Laplacen operaattori kussakin hilapisteessä:
(1 / h2)(0+0+u2+0-4u1) = 0
(1 / h2)(u1+0+u3+0-4u2) = 0
(1 / h2)(u2+0+100+0-4u3) = 0
eli
| -4 1 0 | | u1 | | 0 | | 1 -4 1 | | u2 | = | 0 | | 0 1 -4 | | u3 | | 100 |Tiheämpi hila voisi olla
u1 u2 u3 u4 u5 u6 u7 u8 u9 u10 u11 u12 u13 u14 u15 u16 u17 u18Kun hilapisteitä on paljon, kerroinmatriisi on seuraavantapainen:
... 1 1 -4 1 1 1 1 -4 1 1 1 1 -4 1 1 ...Mitä enemmän hilapisteitä on, sitä pienempi osuus kerroinmatriisin alkioista on nollasta poikkeavia.
Eliminoinnissa matriisin vinorivien väliselle alueelle muodostuu nollasta poikkeavia alkioita.
Jos pisteitä on paljon, on edullista käyttää iteratiivisia ratkaisumenetelmiä, jolloin em. tapauksessa tarvitsee tallettaa vain matriisin viisi vinoriviä.
| -4 1 0 | | u1 | | 0 | | 1 -4 1 | | u2 | = | 0 | | 0 1 -4 | | u3 | | 100 |kirjoitetaan muotoon, jossa vasemmalla puolella ovat alkuperäisen yhtälöryhmän diagonaalialkiot:
u1 = (u2) / 4,
u2 = (8u1+u3) / 4,
u3 = (u2+100) / 4.
Näillä iteraatiokaavoilla päivitetään ratkaisuvektoria u, kunnes ratkaisu ei enää muutu vaadittua tarkkuutta enempää. Iterointi lopetetaan esim., kun suurin u:n alkioiden muutoksista on riittävän pieni.
Laplace-operaattorin kaaviosta saadaan suoraan iteraatioon sopivat kaavat:
| 1 | \nabla2 u = (1 / h2) | 1 -4 1 | uij=0, | 1 |josta
uij = (1/4)(ui,j+1+ui,j-1+ui-1,j+ui+1,j).
Alkuarvo voidaan laskea esimerkiksi ratkaisemalla yhtälö hyvin karkealla hilalla. Ratkaisun avulla interpoloidaan likimääräiset arvot tiheämmän hilan pisteissä.
Liebmannin iteraation suppeneminen voi olla hidasta. Suppenemista voi kiihdyttää ylirelaksaatiomenetelmällä.
Merkitään yläindeksiksi iteraatiokierros, jolla arvo on laskettu:
uijk+1 = (1/4) (ui,j+1k+ui,j-1k+1+ui-1,j k+1+ui+1,jk).
Lisätään ja vähennetään uijk:
uijk+1 = uijk + ( {ui,j+1k+ui,j-1k+1+ui-1,j k+1+ui+1,jk - 4uijk) / 4.
Sulkulauseke on korjaus, jolla uij:tä päivitetään. Kun ratkaisu on löytynyt, sulkulauseke on nolla.
Korjaus on usein liian pieni, joten u:n arvot lähestyvät hitaasti oikeaa ratkaisua. Suppeneminen nopeutuu, jos korjaustermiä suurennetaan sopivasti:
uijk+1 = uijk + \omega ( ui,j+1k+ui,j-1k+1+ui-1,jk+1+ui+1,jk - 4uijk) / 4.
Vakio \omega on välillä [1, 2]. Kun pisteiden määrä kasvaa hyvin suureksi, optimaalinen arvo -> 2.
(Suorakulmaisen hilan ja Dirichlet'n reunaehtojen tapauksessa optimaalinen arvo on
\omega = 4 / (2+\sqrt(4-c2)),
missä
c = cos \pi/n + cos \pi/m,
ja n ja m ovat hilapisteiden määrä x- ja y-suunnissa.)
\pd u / \pd t = c \pd2 u / \pd x2
alkuehdolla u(x,t=0)=g(x) ja reunaehdoilla u(x=0,t)=a, u(x=1,t)=b.
\pd2u \pd x2 = (1/h2) (ui+1k - 2uik + ui-1k),
\pd u / \pd t = (1/\Delta t) (uik+1-uik).
Diskretoitu yhtälö
uik+1 = uik + (c \Delta t / h2) (ui+1k - 2uik + ui-1k).
Oikean puolen termi uik häviää, kun 2c\Delta t/ h2 = 1. Voidaan osoittaa, että tästä saadaan raja stabiilisuudelle. Jotta yhtälö olisi stabiili, on oltava 2c\Delta t/h2 < 1. Jos siis pituus\-askelta lyhennetään, on samalla lyhennettävä aika-askelta.
Menetelmä on eksplisiittinen: kullakin aika-askelella tarvitaan vain edellisellä aika-askelella laskettuja arvoja. Virhe on O(\Delta t)+O(h2).
Implisiittiset menetelmät ovat ajan suhteen tarkempia. Esimerkiksi Crank-Nicholsonin menetelmä:
uik+1 = uik + (c\Delta t / 2h2) (ui+1k+1 - 2uik+1+ui-1k+1+ui+1k-2uik + ui-1k).
Virhe on O((\Delta t)2)+O(h2), ja menetelmä on stabiili kaikilla \Delta t.
Haittapuoli on, että kutakin aika-askelta kohti joudutaan ratkaisemaan tridiagonaalinen yhtälöryhmä.
\pd2u / \pd t2 = c2 \pd2u / \pd x2
Diskretoimalla saadaan
(uik+1-2uik+uik-1) / (\Delta t)2 = c2 (ui+1k-2uik+ui-1k\over h2)
eli
uik+1 = 2uik - uik-1 + (c2(\Delta t)2 / h2) (ui+1k-2uik+ui-1k).
Jos aika-askel valitaan siten, että c\Delta t = h, saadaan
uik+1 = -uik-1 + ui+1k+ui-1k.
Yhtälö voi kuvata esimerkiksi värähtelevää kieltä. Alkuarvoina tarvitaan poikkeamat alkuhetkellä, ui0, ja nopeus, josta voidaan laskea ui1.
Käytetään erityisesti rakenneanalyysissä ja virtausmekaniikassa.
Elementtien muodot ja koot voidaan valita melko vapaasti tehtävän mukaan. Menetelmää on helppo soveltaa myös tilanteisiin, joiden geometria on mutkikasta.
Elementtien kokoa voidaan helposti pienentää kriittisissä kohdissa.
Kysymyksessä on minimointitehtävä, joka on yleensä aina ratkaistavissa. Menetelmä on stabiilimpi kuin differenssimenetelmät.
Funktionaali
F[v] = \int v(x,y,y') dx
saa ääriarvon, kun v toteuttaa Lagrangen yhtälön
\pd v / \pd y - (d/dx) (\pd v /\pd y') = 0.
Valitaan
v = (y'(x))2 + 2f(x)y(x),
jolloin
\pd v / \pd y = 2f(x),
\pd v / \pd y' = 2y'
(d/dx) (\pd v / \pd y') = 2y''.
Lagrangen yhtälö on siis
2f(x)-2y''(x)=0
eli
y''=f(x).
Differentiaaliyhtälö
y''=f(x)
voidaan siis ratkaista myös variaatiotehtävänä etsimällä minimi funktionaalille
F[v] = \int y'2+2f(x)y dx
Vastaavasti esimerkiksi Poissonin yhtälö
\nabla2 u = f(x,y,z)
voidaan ratkaista minimoimalla funktionaalia
F[u] = \int ( (\pd u/ \pd x)2 + (\pd u/ \pd y)2 + (\pd u/\pd z)2 +2f(x,y,z) u) dx dy dz.
Approksimoidaan ratkaisua kantafunktioiden \phii lineaarikombinaationa:
v = \sumj aj \phij,
jolloin minimoitava funktionaali on
F[v] = \int ( (\sumj aj\phi'j)2+2f(x)\sumj aj \phij) dx.
Minimi saadaan yhtälöistä
\pd F[v] / \pd ai = 0.
\pd F[v] / \pd ai =
\int ( 2\phi'i (\sumj aj\phi'j) + 2f(x) \phii ) dx
= 2 \sumj aj \int \phi'i\phi'j\,dx + 2 \int f(x)\phii dx,
josta
\sumj aj \int\phii'\phij'dx = - \int f(x)\phii.
Saadaan yhtälöryhmä
Fa = b,
missä
Fij = \int\phii'\phij' dx ,
bi = -\int f(x) \phii dx.
Esimerkki: yritetään ratkaista yhtälö y''=x reunaehdoilla y(0)=y(1)=0.
Valitaan kantafunktioiksi
1+(x-xi)/h, kun xi-1 <= x <= xi \phii = 1-(x-xi)/h, kun xi <= x <= xi+1 0 muuten
Kerroinmatriisin alkiot ovat
-1/h, kun i=j +- 1, \int \phi'i\phi'j dx = 2/h, kun i=j, 0 muuten
\int01 f\phi1\,dx = \int0h x (1 + (x-h)/h) dx + \inth2h x (1 - (x-h)/h) dx = h2/3 + 2h2/3 = h2, \int01 f\phi2 dx = 2h2, \int01 f\phi3 dx = 3h2.
Valitaan yksinkertaisuuden vuoksi h=0.25, jolloin kantafunktioita on vain kolme.
Minimointitehtävästä saadaan yhtälöryhmä
| 2 -1 0 | | a1 | | 1 | 1/0.25 | -1 2 -1 | | a2 | = -0.252 | 2 | | 0 -1 2 | | a3 | | 3 |Tämän ratkaisu on
| -0.0391 | a = | -0.0625 | | -0.0547 |Esimerkiksi y(0.5)=a2\phi2(0.5)=a2=-0.0625.
Yhtälön tarkka ratkaisu on y=(x3-x)/6, josta y(0.5)=-0.0625.
Ax = \lambda x
eli
(A - \lambda I) x = 0.
Jotta yhtälöllä olisi ei-triviaali ratkaisu, on oltava
det (A - \lambda I) = 0.
Kun determinantti kirjoitetaan auki, saadaan karakteristinen polynomi, josta ominaisarvot voidaan ratkaista.
Jos matriisi on reaaliarvoinen ja symmetrinen, ominaisarvot ovat reaalisia.
Esimerkiksi matriisin
| 1 4 | | 1 1 |karakteristinen polynomi on
| 1-\lambda 4 | det | | = = \lambda2 - 2\lambda - 3, | 1 1-\lambda|jonka nollakohdista saadaan ominaisarvot \lambda1=3 ja \lambda2=-1. Hyvin työlästä, jos matriisi vähänkään isompi.
A = QR,
missä Q on ortogonaalimatriisi ja R yläkolmiomatriisi.
Muunnos voidaan tehdä eri tavoilla:
| 3 2 1 | A = | 1 1 2 | | 2 1 3 |Poimitaan tämän ensimmäinen pystyrivi
| 3 | x1 = a(:,1) = | 1 | | 2 |ja lasketaan siitä vektori
| 1 | | -0.7416574 | u1=x1-||x1|| | 0 | = | 1 | | 0 | | 2 |Tämän avulla muodostetaan Householderin muunnosmatriisi
P1=I - 2 (u1u1^T / || u1 ||2) = | 0.8017837 0.2672612 0.5345225 | | 0.2672612 0.6396433 -0.7207135 | | 0.5345225 -0.7207135 -0.4414270 |Kun alkuperäinen matriisi kerrotaan tällä muunnoksella, ensimmäiseltä sarakkeelta nollautuvat kaikki lävistäjän alapuolella olevat alkiot:
A1= P1 A = | 3.7416574 2.4053512 2.9398737 | | 0 0.4534522 -0.6155927 | | 0 -0.0930955 -2.2311854 |Sitten poimitaan toiselta sarakkeelta vektori
| 0.4534522 | x2 = a(2:3,1) = | | | -0.0930955 |josta
| 1 | | -0.0094578 | u2=x2-||x||2 | | = | | | 0 | | -0.0930955 |Tästä saadaan toinen muunnosmatriisi
P2=I - 2u2u2T / || u2 ||2 = | 1 0 0 | | 0 0.9795688 -0.2011093 | | 0 -0.2011093 -0.9795688 |Kerrotaan A1 muunnoksella, jolloin toisen sarakkeen lävistäjän alapuoliset alkiot nollautuvat. Samalla tavoin jatketaan, kunnes matriisi on saatu yläkolmiomuotoon.
A2=P2 A1 = | 3.7416574 2.4053512 2.9398737 | | 0 0.4629100 -0.1543033 | | 0 0 2.3094011 |Hajotelman matriisit saadaan nyt muunnosmatriisien avulla.
Q = P1 P2 = | 0.8017837 0.1543033 -0.5773503 | | 0.2672612 0.7715167 0.5773503 | | 0.5345225 -0.6172134 0.5773503 |
R = P2 P1 A = | 3.7416574 2.4053512 2.9398737 | | 0 0.4629100 -0.1543033 | | 0 0 2.3094011 |Tarkistuksen vuoksi voidaan laskea
QR = | 3 2 1 | | 1 1 2 | | 2 1 3 |Matriisin Q ortogonaalisuus nähdään laskemalla tulo QQT:
Q QT = | 1 0 0 | | 0 1 0 | | 0 0 1 |Yleisessä tapauksessa hajotelman matriisit ovat
Q = P1 P2 ... Pn, R = Pn ... P2 P1 A.
Neliömatriisi on lohkokolmiomatriisi, jos se on muotoa
| T11 T12 T13 ... T1n | | 0 T22 T23 ... T2n | | | | 0 0 0 ... Tnn |missä alimatriisit Tij ovat neliömatriiseja.
Voidaan osoittaa, että tällaisen matriisin ominaisarvot ovat lävistäjälohkojen Tii ominaisarvot.
=> jos matriisi on lävistäjä- tai kolmiomatriisi, ominaisarvot ovat lävistäjällä olevat alkiot.
Ominaisarvot eivät muutu similariteettimuunnoksissa
A -> S-1 A S.
Muunnetaan matriisi aluksi johonkin yksinkertaisempaan muotoon similariteettimuunnoksilla.
A = | 4 3 2 1 | | 3 4 -1 2 | | 2 -1 1 -2 | | 1 2 -2 2 |Muunnetaan tätä Householderin muunnoksilla. Ensimmäiseltä pystyriviltä poimitaan vektoriin x1 lävistäjän alapuoliset alkiot:
| 3 | x1 = | 2 | | 1 |Näistä muodostetaan vektori
| 1 | | -0.7416574 | u1 = x1 - ||x1|| | 0 | = | 2 | | 0 | | 1 |Tämän avulla saadaan matriisi
p1 = I - 2u1u1T/ ||u1|| = | 0.8017837 0.5345225 0.2672612 | | 0.5345225 -0.4414270 -0.7207135 | | 0.2672612 -0.7207135 0.6396433 |ja tästä edelleen Householderin muunnosmatriisi
P1 = | 1 0 0 0 | | 0 0.8017837 0.5345225 0.2672612 | | 0 0.5345225 -0.4414270 -0.7207135 | | 0 0.2672612 -0.7207135 0.6396433 |Nyt voidaan suorittaa matriisin A similariteettimuunnos. Muunnosmatriisi on symmetrinen, joten sitä ei tarvitse transponoida.
A1 = P1 A P1 = | 4 3.7416574 0 0 | | 3.7416574 2.4285714 1.2977396 2.1188066 | | 0 1.2977396 0.0349563 0.2952113 | | 0 2.1188066 0.2952113 4.5364723 |Toinen sarake käsitellään samalla tavalla. Ensin muodostetaan vektori x2
| 1.2977396 | x2 = | | | 2.1188066 |ja tästä edelleen
| -1.1869072 | u2 = x2 - ||x2|| = | | | 2.1188066 |
p2 = | 0.5223034 0.8527597 | | 0.8527597 -0.5223034 |ja varsinainen muunnosmatriisi
P2 = | 1 0 0 0 | | 0 1 0 0 | | 0 0 0.5223034 0.8527597 | | 0 0 0.8527597 -0.5223034 |
A2 = P2 A1 P2 = | 4 3.7416574 0 0 | | 3.7416574 2.4285714 2.4846467 0 | | 0 2.4846467 3.5714286 -1.8708287 | | 0 0 -1.8708287 1 |Symmetrinen matriisi redusoituu siis tridiagonaaliseksi.
Muutetaan sitten alkuperäinen matriisi epäsymmetriseksi:
A = | 4 2 3 1 | | 3 4 -2 1 | | 2 -1 1 -2 | | 1 2 -2 2 |Muunnos etenee samalla tavalla kuin edelläkin, ja tulokseksi saadaan:
A2 = | 4 3.4743961 -1.3039935 -0.4776738 | | 3.7416574 1.7857143 2.9123481 1.1216168 | | 0 2.0934787 4.2422252 -1.0307759 | | 0 0. -1.2980371 0.9720605 |Yleisen matriisin tapauksessa tuloksena on Hessenbergin matriisi, joka on muotoa
H = | x x x x x | | x x x x x | | 0 x x x x | | 0 0 x x x | | 0 0 0 x x |
Valitaan aluksi A1=H. Sitten toistetaan seuraavia askelia:
-- Lasketaan QR-hajotelma QiRi = Ai.
-- Lasketaan uusi matriisi Ai+1 = Ri Qi.
QR-hajotelman matriisi Q on ortogonaalinen ja A=QR, R=QTA, joten
RQ = QT A Q
on similariteettimuunnos ja säilyttää ominaisarvot.
Matriisien Ai jono suppenee kohti yläkolmio- tai lohkomatriisia, josta ominaisarvot voidaan poimia.
Viimeisen esimerkin tapauksessa raja-arvo on 50 iteraatiokierroksen jälkeen
| 7.0363389 -0.7523758 -0.7356716 -0.3802631 | | 4.265E-08 4.9650342 -0.8892339 -0.4538061 | | 0 0 -1.9732687 -1.3234202 | | 0 0 0 0.9718955 |Matriisin ominaisarvot ovat nyt lävistäjällä olevat luvut. Jos ominaisarvot ovat kompleksiarvoisia, matriisi on lohkomatriisi, jonka ominaisarvot ovat lävistäjällä olevien 2x2-alimatriisien ominaisarvoja.