1. Inngangur

He was determined to discover the underlying logic behind the universe. Which was going to be hard, because there wasn’t one.

- Terry Pratchett, Mort

1.1. Hvað er töluleg greining?

1.1.1. Tilraun að svari

  • Fagið töluleg greining snýst um að búa til, greina og forrita aðferðir til þess að nálga á lausnum á stærðfræðilegum verkefnum.

  • Aðferðirnar eru settar fram með reikniritum sem síðan eru forrituð og það þarf góðan skilning á eiginleikum lausnanna sem verið er að nálga til þess að geta greint hvernig forritin munu virka.

  • Greining á reikniritum er aðallega fólgin í skekkjumati og mati á þeim aðgerðafjölda sem þarf til þess að ná að nálga lausn með fyrirfram gefinni nákvæmni, þ.e. hagkvæmni og nákvæmni reikniritsins.

  • Líkanagerð í raunvísindum og verkfræði felur yfirleitt í sér eftirfarandi skref:

    1. Greina kerfið sem um ræðir

    2. Smíða líkan sem útskýrir hvernig kerfið hegðar sér, þó yfirleitt með töluverðum einföldunum.

    3. Herma kerfið í tölvu eins vel og hægt er. Hér þarf að ná ásættanlegri námkvæmni á þeim tíma sem útreikningar mega taka.

    4. Túlka niðurstöðurnar og bera saman við upphaflega kerfið.

    Töluleg greining kemur mikið við sögu í lið 3. og einnig í lið 4.

1.2. Dæmi: Eldflaug

Gerum ráð fyrir að við höfum eftirfarandi eldflaug undir höndum:

  • Eldsneytið dugir í 18 sek., þ.e. t[0,18].

  • Loftmótstaðan er d=0.1v2, þar sem v(t) er hraðinn á tíma t.

  • Krafturinn sem knýr flaugina er T=5000 N.

  • Massi eldsneytisins er m=18010t kg.

  • Massi flaugarinnar er M=120+m=30010t kg.

Spurningin er: Í hvaða hæð er eldflaugin þegar eldsneytið klárast?

Úr öðru lögmáli Newtons fæst að F=(Mv). Kraftarnir sem verka á eldflaugina er T upp á við og loftmótstaðan og þyngdarkrafturinn niður á við. Þannig fæst

(Mv)=F=TMgd

það er

Mv+Mv=TMgd.

Þetta jafngildir því að

v=TMgdMvM=5000(30010t)g0,1v2+10v30010t,

og upphafsskilyrðin eru v(0)=0.

Þar sem h=v, þá er hæðin á tíma t gefin með h(t)=t0v(s)ds. Þegar eldsneytið klárast þá er hæðin h(18)=180v(s)ds.

Verkefnið er því að finna v, og reikna svo heildið.

Diffurjafnan hér að ofan er ólínuleg og ekki aðgreinanleg þannig að við getum ekki vænst þess finna lausn með þeim aðferðum sem við höfum þegar lært. Eins er ekki víst að við getum auðveldlega fundið stofnfall h fyrir v til þess að reikna heildið, jafnvel þótt við hefðum v.

Hins vegar getum við leyst diffurjöfnuna tölulega með aðferðunum úr kafla 6, og heildið reiknum við svo tölulega með aðferðunum úr kafla 5.

1.3. Samleitni runa

1.3.1. Nokkur atriði um samleitni runa

Mörg reiknirit til nálgunar á einhverri rauntölu eru hönnuð þannig að reiknuð er runa x0,x1,x2, sem á að nálgast lausnina okkar.

1.3.2. Skilgreining: Samleitni

Rauntalnaruna (xn) er sögð vera samleitin (e. convergent) að markgildinu r ef um sérhvert ε>0 gildir að til er N>0 þannig að

|xnr|<ε, ef nN.

Þetta er táknað annað hvort með

limnxn=r eða xnr ef n.

Ef runan (xn) er samleitin að markgildinu r þá segjum við einnig að hún stefni á r.

Hugsum okkur nú að (xn) sé gefin runa sem stefnir á r og táknum skekkjuna með en=rxn.

Runan er sögð vera línulega samleitin (e. linear convergence) ef til er λ]0,1[ þannig að

limn|en+1||en|=λ,

ofurlínulega samleitin (e. superlinear convergence), ef

limn|en+1||en|=0,

ferningssamleitin (e. quadratic convergence) ef til er λ>0 þannig að

limn|en+1||en|2=λ,

og samleitin af stigi α (e. convergence of order α), þar sem α>1, ef til er λ>0 þannig að

limn|en+1||en|α=λ.

Athugasemd

Runa er ofurlínulega samleitin ef hún er samleitin af stigi α>1.

Ferningssamleitin runa er samleitin af stigi 2 þannig að hún er einnig ofurlínulega samleitin.

1.3.3. Skilgreining

Oft eru notuð veikari hugtök til þess að lýsa samleitni runa (t.d. ef við getum ekki fundið λ og α nákvæmlega).

Þannig segjum við að runan (xn)að minnsta kosti línulega samleitin ef til er λ]0,1[ og N>0 þannig að

|en+1|λ|en|,nN,

ef til er λ>0 og N>0 þannig að

|en+1|λ|en|2,nN,

og að minnsta kosti samleitin af stigi α, þar sem α>1, ef til eru λ>0 og N>0 þannig að

|en+1|λ|en|α,nN.

1.4. Setning Taylors

Sometimes it’s better to light a flamethrower than curse the darkness. - Terry Pratchett, Men at Arms: The Play

1.4.1. Ritháttur fyrir diffranleg föll

Látum nú f:IC vera fall á bili I sem tekur gildi í tvinntölunum. Ef f er deildanlegt í sérhverjum punkti í I, þá táknum við afleiðuna með f. Ef f er deildanlegt í sérhverjum punkti í I, þá táknum við aðra afleiðu f með f, og svo framvegis.

Við skilgreinum með þrepun f(k) fyrir k=0,1,2, þannig að f(0)=f og ef f(k1) er deildanlegt í sérhverjum punkti í I, þá er f(k)=(f(k1)).

Við látum Ck(I) tákna línulega rúmið sem samanstendur af öllum föllum f:IC þannig að f,,f(k) eru til í sérhverjum punkti í I og f(k) er samfellt fall á I.

1.4.2. Nálgun með Taylor-margliðu

Ef aI, m er jákvæð heiltala og fCm(I), þá nefnist margliðan

p(x)=f(a)+f(a)(xa)++f(m)(a)m!(xa)m

Taylor-margliða fallsins f í punktinum a af stigi m, og er stundum táknuð með Tmf(x;a).

Athugið að stig margliðunnar p er minna eða jafnt og m.

1.4.3. Setning Taylors

Látum IR vera bil, f:IC vera fall, m0 vera heiltölu og gerum ráð fyrir að fCm(I) og að f(m+1)(x) sé til í sérhverjum innri punkti bilsins I. Þá er til punktur ξ á milli a og x þannig að

f(x)Tmf(x;a)=f(m+1)(ξ)(m+1)!(xa)m+1.

Hægri hliðin er oft táknuð Rm(x).

Athugasemd

Þetta þýðir að skekkjan í því að nálga fallið f(x) með Taylor-margliðu af stigi m hagar sér eins og (xa)m+1.

1.4.4. Viðbót

Ef f(m+1) er samfellt á lokaða bilinu með endapunkta a og x, þá er

Rm(x)=f(x)Tmf(x;a)=xa(xt)mm!f(m+1)(t)dt=(xa)m+110(1s)mm!f(m+1)(a+s(xa))ds.

1.4.5. Sýnidæmi: Nálgun á fallgildum xsinx

Vitum að xsinx ef x er lítið. Tökum x=0.1 og hugsum okkur að við séum að reikna á vél með 8 stafa nákvæmni. Hún gefur

sin0.1=0.099833417

Af því leiðir

0.1sin0.1=1.66583104

Við höfum tapað tveimur markverðum stöfum í nákvæmni.

Ef við notum Taylor-nálgunina fyrir sin(x),

sinx=xx33!+x55!x77!

og tökum fyrstu þrjá liðina, þ.e. skoðum 6. stigs Taylor-margliðu fallsins.

xsin(x) er þá u.þ.b.

x(xx33!+x55!)=x33!x55!.

Fallgildið er þá

0.133!0.155!=1.6658334104.

Skekkjan er gefin með

|R6(0.1)|=|sin(7)(ξ)7!0.17|=|cos(ξ)7!0.17|17!0.17<0.21010.

Sem þýðir að allir 8 stafir reiknivélarinnar eru markverðir, þ.e. allir stafir 1.6658334104 eru réttir.

sin(7) hér að ofan táknar 7. afleiðu sin, sem er cos.

Ef við tökum x=0.01 er þetta enn greinilegra. Reiknivélin gefur

sin(0.01)=0.0099998333

Þannig að

0.01sin0.01=0.1667107

og við erum bara með 4 markverða stafi.

Hér dugir að taka aðeins þriðja stigs liðinn í Taylor-formúlunni

0.01sin(0.01)0.0133!=0.16666667107,

því skekkjan er

R4(0.01)0.0155!<1012

1.5. Skekkjur

Við allar úrlausnir á verkefnum í tölulegri greininingu þarf að fást við skekkjur. Þær eru af ýmsum toga:

  • Gögn eru oft niðurstöður mælinga og þá fylgja þeim mæliskekkjur. Eins getum við þurft að notast við nálganir á föstum sem koma fyrir (t.d. π, Avogadrosar talan, …).

  • Við nálganir á lausnum á stærðfræðilegum verkefnum verða til aðferðarskekkjur. Þær verða til þegar reikniritin eru hönnuð og greining á reikniritum snýst fyrst og fremst um mat á aðferðarskekkjum.

  • Reikningsskekkjur verða til í tölvum á öllum stigum, jafnvel þegar tölur eru lesnar inn í tugakerfi og þeim snúið yfir í tvíundarkerfi. Þær verða líka til vegna þess að tölvur geta einungis unnið með endanlegt mengi af tölum og allar útkomur þarf að nálga innan þess mengis. Þessar skekkjur nefnast oft afrúningsskekkjur.

  • Mannlegar villur eru óumflýjanlegar. Það sem við getum gert er temja okkur vinnubrögð sem lágmarka líkur á þeim og auðvelda okkur að finna villur sem við gerum.

    Real stupidity beats artificial intelligence every time. – Terry Pratchett

1.5.1. Skekkja í nálgun á rauntölu r

Við getum stillt upp jöfnunum svona

r (rétt gildi) =x (nálgunargildi)+e (skekkja)

þar sem talan x er nálgun á tölunni r, og þá nefnist

e=rx

skekkjan (e. error) í nálgun á r með x eða bara skekkja.

Algildi skekkju (e. absolute error) er tölugildið |e|=|rx|

Ef vitað er að r0, þá nefnist

|e||r|=|rx||r|

hlutfallsleg skekkja (e. relative error) í nálgun á r með x.

Aðvörun

Auðvitað er talan r sem við leitum að óþekkt (annars þyrftum við ekki að framkvæma alla þessa reikninga), sem þýðir að við getum hvergi notað hana í reikningum.

1.5.2. Fyrirframmat á skekkju

Metið er áður en reikningar hefjast hversu umfangsmikla reikninga þarf að framkvæma til þess að nálgunin náist innan fyrirfram gefinna skekkjumarka.

Ef lausnin er fundin með ítrekunaraðferð er yfirleitt metið hversu margar ítrekarnir þarf til þess að nálgun verði innan skekkjumarka.

1.5.3. Eftirámat á skekkju

Um leið og reikningar eru framkvæmdir er lagt mat á skekkju og reikningum er hætt þegar matið segir að nálgun sé innan skekkjumarka. Það gerist yfirleitt þegar gildið sem við reiknum út breytist orðið lítið í hverju skrefi.

Hér þarf að skipta í tvö tilvik, fyrst skoðum við tilvikið þegar runan er ofurlínulega samleitin og seinna tilvikið er þegar við vitum aðeins að runan er línulega samleitin, en þá er matið aðeins flóknara.

1.5.4. Ofurlínuleg samleitni – Eftirámat á skekkju

Hugsum okkur að við séum að nálga töluna r með gildum rununnar xn, að við höfum reiknað út x0,,xn og viljum fá mat á skekkjunni en=rxn í n-ta skrefi.

Við reiknum næst út xn+1 og skrifum en+1=λnen. Þá er

xn+1xn=(rxn)(rxn+1)=enen+1=(1λn)en

og við fáum

en=xn+1xn1λn.

Ef við vitum að runan er ofurlínulega samleitin, þá stefnir λn á 0 og þar með er

enxn+1xn.

Við hættum því útreikningi þegar |xn+1xn|<ε þar sem ε er fyrirfram gefin tala, sem lýsir þeirri nákvæmni sem við viljum ná.

1.5.5. Línuleg samleitni – Eftirámat á skekkju

Skoðum nú tilvikið ef einu upplýsingarnar sem við höfum er að runan xnað minnsta kosti línulega samleitin, þ.e. c[0,1) og NN þannig að

|en+1|c|en|,fyrir nN.

Þá stefnir λn=en+1/en á fasta λc og við höfum

λn=en+1en=1λn1λn+1xn+2xn+1xn+1xnxn+2xn+1xn+1xn

Nú þurfum við að átta okkur á því hvernig þetta er nýtt í útreikningum.

Hugsum okkur að við höfum reiknað út x0,,xn og viljum fá mat á en. Við reiknum þá út xn+1 og xn+2 og síðan hlutfallið κn=(xn+2xn+1)/(xn+1xn) sem við notum sem mat á λn. Eftirámatið á skekkjunni í ítrekunarskrefi númer n verður síðan

enxn+1xn1κn.

Ef stærðin í hægri hliðinni er komin niður fyrir fyrirfram gefin skekkjumörk ε, þá stöðvum við útreikningana.

1.5.6. Sýnidæmi

Okkur er gefin runa af nálgunum á lausn jöfnunnar

f(x)=exsinxx2=0

og eigum að staðfesta hvort nálgunaraðferðin er ferningssamleitin:

n

xn

|xn+1xn|

|xn+1xn||xnxn1|2

0

3.00000000000000

1

2.73251570951922

0.10052257507862

1.404

2

2.63199313444060

0.01373904283351

1.359

3

2.61825409160709

0.00024006192208

1.273

4

2.61801402968501

0.00000007236005

1.256

5

2.61801395732496

0.00000000000001

1.272

Við metum en|xn+1xn| og þar af leiðandi er

|en|/|en1|2|xn+1xn|/|xnxn1|2.

Við sjáum að hlutfallið |xn+1xn|/|xnxn1|2 helst stöðugt og því ályktum við að aðferðin sé ferningssamleitin.

1.5.7. Útreikningur á samleitnistigi

Skoðum lítið dæmi um útreikninga á samleitnistigi.

Eftirfarandi runa stefnir á 3.

n

xn

0

2.000000000000000

1

1.666666666666667

2

1.727272727272727

3

1.732142857142857

4

1.732050680431722

5

1.732050807565499

Er samleitnistigið 1.618?

Ef ekki, hvert er þá samleitnistigið?

1.6. Meira um skekkjur

1.6.1. Skilgreining: Markverðir stafir

Gerum ráð fyrir að r0, þá segjum við að xnálgun á r með t markverðum stöfum (e. significant digits) ef

|rx||r|10t.

Getum útfært þetta aðeins ítarlegra. Ef

10(t+1)<|rx||r|10t.

þá segjum við að nálgunin á r með x sé rétt með að minnsta kosti t markverðum stöfum og að hámarki með t+1 markverðum stöfum.

Athugið að ef e er minnsta heila talan þannig að |r|<10e, þá gefur seinni ójafnan matið

|rx|=0.00atat+1  10e,

þar sem núllin aftan við punkt eru t talsins.

Einnig er hægt að útfæra þetta fyrir aðrar grunntölur en 10.

1.6.2. Úrlausn annars stigs jöfnu

Þegar núllstöðvar annars stigs jöfnunnar ax2+bx+c=0 eru reiknaðar út úr formúlunni

x=b±b24ac2a,

verður til styttingarskekkja ef b2 er miklu stærra heldur en 4ac vegna |b|b24ac. Við komumst hjá þessum vandræðum með því að líta á margliðuna fullþáttaða a(xx1)(xx2) og notfæra okkur að núllstöðvarnar x1 og x2 uppfylla x1x2=c/a.

Ef b>0, þá reiknum við x1 fyrst út úr formúlunni

x1=bb24ac2a og síðan x2=c/ax1.

Ef aftur á móti b<0, þá reiknum við fyrst x1 út úr formúlunni

x1=b+b24ac2a og síðan x2=c/ax1.

Ef b24ac þá lendum við í styttingarskekkjum, en við neyðumst til þess að lifa með þeim.

1.6.3. Áhrif gagnaskekkju

Hugsum okkur að við séum að finna nálgun á núllstöð falls xf(x,α). Við viljum finna nálgun x á lausninni r=r(α) sem uppfyllir

f(r,α)=0

og við lítum á α sem stika (t.d. náttúrulegur fasti).

Gerum ráð fyrir að α0 sé nálgun á α og að við þekkjum nálgun á r(α0) sem er lausn á jöfnunni f(x,α0)=0.

Við viljum athuga hversu mikil áhrif nálgun á α með α0 hefur á lausnina okkar, þ.e. við þurfum að meta skekkjuna r(α)r(α0).

Ef við gefum okkur að f sé samfellt deildanlegt í grennd um punktinn (x0,α0), þar sem x0=r(α0) og xf(x0,α0)0, þá segir setningin um fólgin föll að til sé grennd I um punktinn α0 í R og samfellt deildanlegt fall r:IR, þannig að r(α0)=x0 og f(r(α),α)=0 fyrir öll αI.

Með öðrum orðum má segja að við getum alltaf leyst jöfnuna f(x,α)=0 með tilliti til x þannig að út komi lausn x=r(α) sem er samfellt diffranlegt fall af α.

Keðjureglan gefur okkur nú gildi afleiðunnar, því af jöfnunni f(r(α),α)=0 leiðir að fallið Iαf(r(α),α) er fast, þannig að

0=αf(r(α),α)=fx(r(α),α)r(α)+fα(r(α),α).

Þetta gefur

r(α)=fα(r(α),α)fx(r(α),α).

Nú látum við e tákna skekkjuna í nálguninni á α með α0, e=αα0. Þá fáum við skekkjumatið

r(α)r(α0)r(α0)e=fα(r(α0),α0)fx(r(α0),α0)e

og jafnframt mat á hlutfallslegri skekkju

|r(α)r(α0)||r(α)||fα(r(α0),α0)||r(α0)fx(r(α0),α0)||e|.

1.6.4. Sýnidæmi

Við skulum nú líta á það verkefni að finna nálgun á minnstu jákvæðu lausn jöfnunnar sin(πx)=1ex, þar sem við gerum ráð fyrir því að þurfa að nálga π með 3.14.

Okkur eru gefnar niðurstöður úr nálguninni með einhverri aðferð. Við setjum f(x,α)=1exsin(αx) og fáum

n

xn

|xn+1xn|

|xn+1xn||xnxn1|2

0

0.8

1

0.81276894538752

0.00014017936338

0.8597

2

0.81262876602414

0.00000001621651

0.8253

3

0.81262874980763

0.00000000000000

0.8444

Hér er α=π og α0=3.14 og þar með |e|<0.0016.

Hlutafleiðurnar eru fx(x,α)=exαcos(αx) og fα(x,α)=xcos(αx).

Við stingum tölunum okkar inn í matið og notum punktinn (x3,α0)=(0.8126,3.14). Það gefur

r(π)r(3.14)r(3.14)e|0.8126cos(0.81263.14)||e0.81263.14cos(0.81263.14)| 0.00160.4103

Þetta mat segir okkur að við eigum að gera ráð fyrir að áhrif gagnaskekkjunnar séu þau að við fáum lausn með þremur réttum stöfum, r(π)0.813. Nálgun okkar á minnstu jákvæðu lausn jöfnunnar sin(πx)=1ex er því 0.813.

1.6.5. O-ritháttur

Látum f og g vera tvö föll sem skilgreind eru á bili IR og látum c vera tölu á I eða annan hvorn endapunkt I.

Við segjum að f(t) sé stórt O af g(t) og skrifum

f(t)=O(g(t)),tc,

ef til er fasti C>0 þannig að ójafnan

|f(t)|C|g(t)|

gildi fyrir öll t í einhverri grennd um c.

Athugið að grennd um c=+ er bil af gerðinni ]α,+[ og grennd um c= er bil af gerðinni ],α[.

1.6.6. O-ritháttur og skekkja í Taylor-nálgnum

Oft er O-ritháttur notaður þegar fjallað er um skekkjur í Taylor-nálgunum,

f(x)Tnf(x;c)=f(x)f(c)f(xc)f(n)(c)n!(xc)n=f(n+1)(ξ)(n+1)!(xc)n+1=O((xc)n+1),xc

1.6.7. Sýnidæmi

Það eru til haugar af dæmum, sem við þekkjum vel.

Setning Taylors gefur okkur:

xsinx=O(x3),x0xx33!sinx=O(x5),x0

1.6.8. O-ritháttur fyrir runur

Látum nú (an) og (bn) vera tvær talnarunur. Við segjum að an sé stórt O af bn og skrifum

an=O(bn),

ef til er fasti C>0 þannig að ójafnan

|an|C|bn|

gildi fyrir öll n=0,1,2,3,.

1.6.9. Tvö sýnidæmi

  • Út frá Taylor-röðinni fyrir cosx fáum við að

    cos(1/n)1+1/(2n2)=O(1/n4)
  • Út frá

    n+1n=1n+1+n12n

    sjáum við að

    n+1n=O(1n)

1.7. Fleytitalnakerfið

1.7.1. Framsetning á tölum

Ef r er rauntala frábrugðin 0 og β er náttúrleg tala, 2 eða stærri, þá er til einhlýtt ákvörðuð framsetning á r af gerðinni

r=±(0.d1d2dkdk+1)β×βe

þar sem e er heiltala og dj eru heiltölur

  • 1d1<β,

  • 0dj<β, j=2,3,4,.

Tölvur reikna ýmist í tvíundarkerfi með β=2 eða í sextánundarkerfi með β=16, en við mannfólkið með okkar tíu fingur reiknum í tugakerfi með β=10.

1.7.2. Mantissa

Formerkið og runan

±(0.d1d2dkdk+1)β=±j=1djβj

nefnist mantissa tölunnar r.

Við skrifum

(0.d1d2dk)β=kj=1djβj

ef dk+1=dk+2==0 og segjum þá að talan r hafi k-stafa mantissu.

1.7.3. Markverðir β-stafir

Ef rauntalan x er nálgun á r, þá segjum við að x sé nálgun á r með að minnsta kosti t markverðum β -stöfum ef

|rx||r|βt.

Ef við höfum að auki að

βt1<|rx||r|βt.

þá segjum við að x sé nálgun á r með t markverðum β -stöfum.

Athugið að ef e er minnsta heila talan þannig að |r|<βe, þá gefur seinni ójafnan matið

|rx|=(0.00atat+1)β×βe,

þar sem núllin aftan við punkt eru t talsins.

1.7.4. Afrúningur talna

Ef r er sett fram á stöðluðu β-fleytitöluformi, þá nefnist talan

x=(±0.d1d2dk)β×βe

afskurður tölunnar r við k -ta aukastaf r, en talan

x={±(0.d1d2dk)β×βe,dk+1<β/2,±((0.d1d2dk)β+βk)×βe,dk+1β/2.

nefnist afrúningur tölunnar r við k -ta aukastaf.

Við köllum þessar aðgerðir afskurð (e. chopping) og afrúning (e. rounding).

1.7.5. Fleytitölukerfi

Fleytitölukerfi er endanlegt hlutmengi í R, sem samanstendur af öllum tölum

±(0.d1d2dk)β×βe

þar sem dj eru heiltölur eins og áður var lýst, k er föst tala og við höfum mörk á veldisvísinum meM.

Allar tölvur vinna með eitthvert fleytitölukerfi, oftast með grunntölu β=2 eða β=16 eins og áður sagði.

Eftir hverja aðgerð í tölvunni þarf að nálga útkomuna með afskurði eða afrúningu.

Ef við förum ekki varlega þá getur þetta magnað upp skekkju.

Sjá Úrlausn annars stigs jöfnu.

1.7.6. IEEE staðlar

  • Single: β=2,k=24,m=125 og M=128,

  • Double: β=2,k=53,m=1021 og M=1024.

1.7.7. Útreikningur í tugakerfi

Þegar reiknað er í tugakerfi er tölurnar afrúnaðar við k-ta aukastaf ef skekkjan í nálgun á þeim er minni en 12×10k. Ef

|rx||r|<10k1

þá treystum við öllum k stöfum mantissunnar, en ef

|rx||r|>10k+q,

þá eru síðustu q stafir mantissunnar marklausir auk þess sem vænta má nokkurs fráviks í dkq.