Fibonacciho postupnosť

Fibonacciho postupnosť je pre mňa jednou z najzaujímavejších v celej matematike. Na prvý pohľad pôsobí jednoducho, každý člen je len súčtom dvoch predchádzajúcich, no v tejto jednoduchosti sa skrýva dokonalý poriadok. Objavuje sa v prírode, v usporiadaní listov rastlín, v špirálach mušlí aj v pomeroch umeleckých diel.
Pozrime sa, ako ju môžeme vygenerovať a zobraziť v R:

fib <- numeric(20)
fib[1:2] <- c(0, 1)
for (i in 3:20) fib[i] <- fib[i-1] + fib[i-2]
fib
 [1]    0    1    1    2    3    5    8   13   21   34   55   89  144  233  377  610
[17]  987 1597 2584 4181

Noisy uniform

Pri generovaní simulácií alebo realistických dát sa používajú tzv. takmer rovnomerné hodnoty, ktoré majú malý náhodný rozptyl. Takto si to vygenerujeme v R:

set.seed(42)
u <- runif(20, 0, 10) + rnorm(20, 0, 0.5)
u
 [1]  9.80049526 10.51407683  2.16696500  8.16508188  6.35079452  5.50893469
 [7]  7.22375669  0.01843826  5.34968944  7.71070451  4.42409847  6.30046830
[13]  9.26076379  3.16162559  5.57052496  9.18491066  9.65362959  0.29329207
[19]  4.98001949  5.28333002

Operácie s vybranými vektormi

Ako prvé zistíme dĺžku oboch vektorov, aby sme si boli istí, že môžeme medzi nimi robiť operácie. Zistíme to pomocou nasledujúceho kódu:

length(fib)
[1] 20
length(u)            
[1] 20

Zistili sme, že oba vektori majú rovnaký rozmer. Počítame teda ich súčet.

fib+u
 [1]    9.800495   11.514077    3.166965   10.165082    9.350795   10.508935
 [7]   15.223757   13.018438   26.349689   41.710705   59.424098   95.300468
[13]  153.260764  236.161626  382.570525  619.184911  996.653630 1597.293292
[19] 2588.980019 4186.283330

Malé cvičenie

V tomto cvičení si vyberieme podmnožinu vektora w, ktorá obsahuje len čísla väčšie ako je priemer w.

w <- runif(20, 0, 50)
subset <- w[w > mean(w)]
subset
 [1] 29.08020 32.28159 38.79117 28.18234 33.37133 46.65171 46.28224 36.70472
 [9] 25.75317 37.19873 30.95796

Matice

Vytvorili sme si 2x2 maticu, vypočítali sme jej determinant, aby sme overili, že sa nerovná 0. Následne sme ku matici A urobili inverznú maticu a overili sme si, či nám táto inverzná matica vyšla správne pomocou súčinu matice A a k nej inverznej matice, z tohto súčinu nám musí výjsť jednotková matica.

A <- matrix(c(2, 1, 5, 3), nrow = 2, byrow = TRUE)
A
     [,1] [,2]
[1,]    2    1
[2,]    5    3
det(A)
[1] 1
A_inv <- solve(A)
A_inv
     [,1] [,2]
[1,]    3   -1
[2,]   -5    2
round(A %*% A_inv, 15)
     [,1] [,2]
[1,]    1    0
[2,]    0    1

Ukázalo sa, že nám naozaj vyšla jednotková matica a teda sme postupovali správne.

Malé cvičenie

M2 <- matrix(1:16, nrow = 4, byrow = TRUE)
colSums(M2)
[1] 28 32 36 40
t(M2) %*% M2
     [,1] [,2] [,3] [,4]
[1,]  276  304  332  360
[2,]  304  336  368  400
[3,]  332  368  404  440
[4,]  360  400  440  480
LS0tCnRpdGxlOiAiw5psb2hhIDIsIGRydWjDoSDEjWFzxaUiCmF1dGhvcjogIk1pcm9zbGF2YSBNZWR2ZWNrw6EgIDxicj4iCmRhdGU6ICJTZXB0ZW1iZXIgMjAyNSIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgdGhlbWU6IHVuaXRlZAogICAgaGlnaGxpZ2h0OiB0YW5nbwogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IHRydWUKICAgIGRmX3ByaW50OiBwYWdlZAplZGl0b3Jfb3B0aW9uczoKICBtYXJrZG93bjoKICAgIHdyYXA6IDcyCi0tLQoKIyMgRmlib25hY2NpaG8gcG9zdHVwbm9zxaUKRmlib25hY2NpaG8gcG9zdHVwbm9zxaUgamUgcHJlIG3FiGEgamVkbm91IHogbmFqemF1asOtbWF2ZWrFocOtY2ggdiBjZWxlaiBtYXRlbWF0aWtlLiBOYSBwcnbDvSBwb2jEvmFkIHDDtHNvYsOtIGplZG5vZHVjaG8sIGthxb5kw70gxI1sZW4gamUgbGVuIHPDusSNdG9tIGR2b2NoIHByZWRjaMOhZHphasO6Y2ljaCwgbm8gdiB0ZWp0byBqZWRub2R1Y2hvc3RpIHNhIHNrcsO9dmEgZG9rb25hbMO9IHBvcmlhZG9rLiBPYmphdnVqZSBzYSB2IHByw61yb2RlLCB2IHVzcG9yaWFkYW7DrSBsaXN0b3YgcmFzdGzDrW4sIHYgxaFwaXLDoWxhY2ggbXXFoWzDrSBhaiB2IHBvbWVyb2NoIHVtZWxlY2vDvWNoIGRpZWwuICAgICAKUG96cmltZSBzYSwgYWtvIGp1IG3DtMW+ZW1lIHZ5Z2VuZXJvdmHFpSBhIHpvYnJhemnFpSB2IFI6ICAgICAKYGBge3J9CmZpYiA8LSBudW1lcmljKDIwKQpmaWJbMToyXSA8LSBjKDAsIDEpCmZvciAoaSBpbiAzOjIwKSBmaWJbaV0gPC0gZmliW2ktMV0gKyBmaWJbaS0yXQpmaWIKYGBgCiMjIE5vaXN5IHVuaWZvcm0KUHJpIGdlbmVyb3ZhbsOtIHNpbXVsw6FjacOtIGFsZWJvIHJlYWxpc3RpY2vDvWNoIGTDoXQgc2EgcG91xb7DrXZhasO6IHR6di4gdGFrbWVyIHJvdm5vbWVybsOpIGhvZG5vdHksIGt0b3LDqSBtYWrDuiBtYWzDvSBuw6Fob2Ruw70gcm96cHR5bC4gVGFrdG8gc2kgdG8gdnlnZW5lcnVqZW1lIHYgUjoKYGBge3J9CnNldC5zZWVkKDQyKQp1IDwtIHJ1bmlmKDIwLCAwLCAxMCkgKyBybm9ybSgyMCwgMCwgMC41KQp1CmBgYAojIyBPcGVyw6FjaWUgcyB2eWJyYW7DvW1pIHZla3Rvcm1pIApBa28gcHJ2w6kgemlzdMOtbWUgZMS6xb5rdSBvYm9jaCB2ZWt0b3JvdiwgYWJ5IHNtZSBzaSBib2xpIGlzdMOtLCDFvmUgbcO0xb5lbWUgbWVkemkgbmltaSByb2JpxaUgb3BlcsOhY2llLiBaaXN0w61tZSB0byBwb21vY291IG5hc2xlZHVqw7pjZWhvIGvDs2R1OiAKYGBge3J9Cmxlbmd0aChmaWIpCmxlbmd0aCh1KSAgICAgICAgICAgIApgYGAKWmlzdGlsaSBzbWUsIMW+ZSBvYmEgdmVrdG9yaSBtYWrDuiByb3ZuYWvDvSByb3ptZXIuIFBvxI3DrXRhbWUgdGVkYSBpY2ggc8O6xI1ldC4gCmBgYHtyfQpmaWIrdQpgYGAKIyMgKk1hbMOpIGN2acSNZW5pZSoKViB0b210byBjdmnEjWVuw60gc2kgdnliZXJpZW1lIHBvZG1ub8W+aW51IHZla3RvcmEgdywga3RvcsOhIG9ic2FodWplIGxlbiDEjcOtc2xhIHbDpMSNxaFpZSBha28gamUgcHJpZW1lciB3LiAKYGBge3J9CncgPC0gcnVuaWYoMjAsIDAsIDUwKQpzdWJzZXQgPC0gd1t3ID4gbWVhbih3KV0Kc3Vic2V0CmBgYAojIyBNYXRpY2UKVnl0dm9yaWxpIHNtZSBzaSAyeDIgbWF0aWN1LCB2eXBvxI3DrXRhbGkgc21lIGplaiBkZXRlcm1pbmFudCwgYWJ5IHNtZSBvdmVyaWxpLCDFvmUgc2EgbmVyb3Zuw6EgMC4gTsOhc2xlZG5lIHNtZSBrdSBtYXRpY2kgQSB1cm9iaWxpIGludmVyem7DuiBtYXRpY3UgYSBvdmVyaWxpIHNtZSBzaSwgxI1pIG7DoW0gdMOhdG8gaW52ZXJ6bsOhIG1hdGljYSB2ecWhbGEgc3Byw6F2bmUgcG9tb2NvdSBzw7rEjWludSBtYXRpY2UgQSBhIGsgbmVqIGludmVyem5laiBtYXRpY2UsIHogdG9odG8gc8O6xI1pbnUgbsOhbSBtdXPDrSB2w71qc8WlIGplZG5vdGtvdsOhIG1hdGljYS4gCmBgYHtyfQpBIDwtIG1hdHJpeChjKDIsIDEsIDUsIDMpLCBucm93ID0gMiwgYnlyb3cgPSBUUlVFKQpBCmRldChBKQpBX2ludiA8LSBzb2x2ZShBKQpBX2ludgpyb3VuZChBICUqJSBBX2ludiwgMTUpCmBgYApVa8OhemFsbyBzYSwgxb5lIG7DoW0gbmFvemFqIHZ5xaFsYSBqZWRub3Rrb3bDoSBtYXRpY2EgYSB0ZWRhIHNtZSBwb3N0dXBvdmFsaSBzcHLDoXZuZS4gCgojIyAqTWFsw6kgY3ZpxI1lbmllKgpgYGB7cn0KTTIgPC0gbWF0cml4KDE6MTYsIG5yb3cgPSA0LCBieXJvdyA9IFRSVUUpCmNvbFN1bXMoTTIpCnQoTTIpICUqJSBNMgpgYGAKCg==