Základné operácie v R – dátová analýza pre udržateľnú energetiku

Autor

Branislav Stríž

Publikované

5. októbra 2026

Úvod k základným operáciám v R

Tento dokument demonštruje vybrané základné operácie v jazyku R na príkladoch z oblasti dátovej analýzy pre udržateľnú energetiku.

Obnoviteľné zdroje energie, ako sú solárne, veterné alebo vodné elektrárne, produkujú veľké množstvo dát. Pomocou programovacieho jazyka R môžeme tieto údaje spracovávať, porovnávať a analyzovať.

V dokumente budem pracovať s:

  • numerickými hodnotami,
  • textovými premennými,
  • logickými hodnotami,
  • numerickými vektormi,
  • maticami,
  • vlastnými číslami a vlastnými vektormi.

Na miestach označených ako Malé cvičenie budem demonštrovať použitie jednotlivých príkazov na vlastných príkladoch z oblasti energetiky.

Globálne nastavenie chunkov

V nasledujúcom chunke nastavím základné možnosti zobrazovania R kódu.

Kód
knitr::opts_chunk$set(
  echo = TRUE,
  message = FALSE,
  warning = FALSE
)

Skaláre

Numerické skaláre

Skalár predstavuje jednu numerickú hodnotu. V oblasti energetiky môže ísť napríklad o množstvo vyrobenej alebo spotrebovanej energie.

Predpokladajme, že solárna elektráreň vyrobila počas jedného dňa 420 kWh elektrickej energie a spotreba bola 350 kWh.

Kód
produkcia <- 420
spotreba <- 350

produkcia
[1] 420
Kód
spotreba
[1] 350

S týmito hodnotami môžeme vykonávať základné aritmetické operácie.

Kód
sucet <- produkcia + spotreba
rozdiel <- produkcia - spotreba
podiel <- produkcia / spotreba
dvojnasobna_produkcia <- produkcia * 2
mocnina <- produkcia ^ 2

sucet
[1] 770
Kód
rozdiel
[1] 70
Kód
podiel
[1] 1.2
Kód
dvojnasobna_produkcia
[1] 840
Kód
mocnina
[1] 176400

Rozdiel medzi produkciou a spotrebou nám ukazuje energetický prebytok alebo nedostatok.

Kód
energeticka_bilancia <- produkcia - spotreba
energeticka_bilancia
[1] 70

Ak je výsledok kladný, vyrobilo sa viac energie, ako sa spotrebovalo.

Zaokrúhľovanie hodnôt

Pri dátovej analýze môžeme potrebovať hodnoty zaokrúhliť.

Kód
priemerna_produkcia <- 387.68

round(priemerna_produkcia)
[1] 388
Kód
ceiling(priemerna_produkcia)
[1] 388
Kód
floor(priemerna_produkcia)
[1] 387

Funkcia round() zaokrúhli číslo na najbližšie celé číslo, ceiling() smerom nahor a floor() smerom nadol.

Malé cvičenie

Solárna elektráreň vyrobila za jeden deň 485 kWh energie. Spotreba bola 370 kWh. Vypočítajte energetický prebytok a percentuálny pomer produkcie k spotrebe.

Najskôr vytvorím potrebné premenné.

Kód
denna_produkcia <- 485
denna_spotreba <- 370

Energetický prebytok vypočítam ako rozdiel produkcie a spotreby.

Kód
prebytok <- denna_produkcia - denna_spotreba
prebytok
[1] 115

Následne vypočítam pomer produkcie k spotrebe v percentách.

Kód
pomer <- denna_produkcia / denna_spotreba * 100
round(pomer, 2)
[1] 131.08

Text

Vytváranie textových premenných

V dátach sa okrem numerických hodnôt často nachádzajú aj textové informácie. V energetike môže ísť napríklad o názov elektrárne, typ zdroja alebo lokalitu.

Kód
zdroj <- "Solarna energia"
lokalita <- "Bratislava"

zdroj
[1] "Solarna energia"
Kód
lokalita
[1] "Bratislava"

Textové premenné môžeme spájať pomocou funkcie paste().

Kód
elektraren <- paste(zdroj, lokalita)

elektraren
[1] "Solarna energia Bratislava"

Pomocou paste0() spojíme text bez automatickej medzery.

Kód
oznacenie <- paste0("SOLAR_", "BA")

oznacenie
[1] "SOLAR_BA"

Môžeme použiť aj vlastný oddeľovač.

Kód
zdroje <- paste("Solarna", "Veterna", "Vodna", sep = ", ")

zdroje
[1] "Solarna, Veterna, Vodna"

Dĺžka textového reťazca a podreťazec

Funkcia nchar() zistí počet znakov v textovej premennej.

Kód
nazov <- "Obnovitelna energia"

nchar(nazov)
[1] 19

Funkcia substr() umožňuje vybrať určitú časť textu.

Kód
substr(nazov, 1, 11)
[1] "Obnovitelna"

Malé cvičenie

Vytvorte textové premenné obsahujúce typ elektrárne a mesto. Následne ich spojte do jedného názvu.

Kód
typ_elektrarne <- "Veterna elektraren"
mesto <- "Trnava"

nazov_elektrarne <- paste(typ_elektrarne, "-", mesto)

nazov_elektrarne
[1] "Veterna elektraren - Trnava"

Zistím aj počet znakov výsledného názvu.

Kód
nchar(nazov_elektrarne)
[1] 27

Logické hodnoty a premenné

Základné logické operácie

Logické hodnoty môžu nadobúdať hodnotu TRUE alebo FALSE.

Kód
solarna <- TRUE
fosilna <- FALSE

!solarna
[1] FALSE
Kód
solarna & fosilna
[1] FALSE
Kód
solarna | fosilna
[1] TRUE
Kód
xor(solarna, fosilna)
[1] TRUE

Operátor ! predstavuje negáciu, & znamená AND a | znamená OR.

Logický výsledok porovnávania

Logické podmienky môžeme využiť napríklad pri porovnávaní produkcie a spotreby energie.

Kód
produkcia <- 500
spotreba <- 420

produkcia > spotreba
[1] TRUE
Kód
produkcia == spotreba
[1] FALSE
Kód
produkcia != spotreba
[1] TRUE

Výsledkom každého porovnania je hodnota TRUE alebo FALSE.

Zložitejšie logické operácie

Predpokladajme, že elektráreň je považovaná za dostatočne výkonnú, ak produkuje viac ako 400 kWh, ale menej ako 700 kWh denne.

Kód
produkcia <- 520

produkcia > 400 & produkcia < 700
[1] TRUE

Môžeme vytvoriť aj inú podmienku.

Kód
produkcia < 200 | produkcia > 800
[1] FALSE

Logické hodnoty vo vektore

Viacero logických hodnôt môžeme uložiť do jedného vektora.

Kód
splneny_limit <- c(TRUE, TRUE, FALSE, TRUE, FALSE)

splneny_limit
[1]  TRUE  TRUE FALSE  TRUE FALSE

Malé cvičenie

Solárna elektráreň vyrobila 460 kWh energie a denná spotreba bola 410 kWh. Zistite pomocou logickej podmienky, či produkcia dokázala pokryť spotrebu.

Kód
solarna_produkcia <- 460
denna_spotreba <- 410

solarna_produkcia >= denna_spotreba
[1] TRUE

Výsledok TRUE znamená, že produkcia bola dostatočná na pokrytie spotreby.

Pridám aj podmienku, podľa ktorej musí byť produkcia aspoň 400 kWh a zároveň musí byť vyššia ako spotreba.

Kód
solarna_produkcia >= 400 & solarna_produkcia >= denna_spotreba
[1] TRUE

Numerické vektory

Generovanie vektorov

Vektory umožňujú uložiť viacero hodnôt. Môžeme ich použiť napríklad na uloženie produkcie energie počas viacerých dní.

Kód
solarna_produkcia <- c(180, 220, 310, 420, 380, 270, 450)

solarna_produkcia
[1] 180 220 310 420 380 270 450

Postupnosť čísel môžeme vytvoriť pomocou operátora :.

Kód
dni <- 1:7

dni
[1] 1 2 3 4 5 6 7

Funkcia seq() umožňuje vytvoriť postupnosť s určitým krokom.

Kód
vykon <- seq(from = 100, to = 500, by = 50)

vykon
[1] 100 150 200 250 300 350 400 450 500

Funkcia rep() umožňuje opakovať rovnakú hodnotu.

Kód
minimalny_limit <- rep(250, times = 7)

minimalny_limit
[1] 250 250 250 250 250 250 250

Môžeme generovať aj náhodné hodnoty.

Kód
nahodne_hodnoty <- runif(5)

nahodne_hodnoty
[1] 0.56813450 0.94671199 0.96398090 0.04475958 0.80191122

Aritmetické operácie s vektormi

Predpokladajme, že máme dennú produkciu solárnej elektrárne.

Kód
produkcia <- c(200, 250, 300, 350, 400)

produkcia
[1] 200 250 300 350 400

Každú hodnotu môžeme napríklad zvýšiť o 20 kWh.

Kód
produkcia + 20
[1] 220 270 320 370 420

Alebo môžeme všetky hodnoty zvýšiť o 10 %.

Kód
produkcia * 1.10
[1] 220 275 330 385 440

Hodnoty môžeme tiež deliť.

Kód
produkcia / 2
[1] 100 125 150 175 200

Operácie s dvoma vektormi

Môžeme porovnať napríklad produkciu a spotrebu počas piatich dní.

Kód
produkcia <- c(300, 350, 420, 380, 450)
spotreba <- c(320, 330, 390, 400, 410)

produkcia
[1] 300 350 420 380 450
Kód
spotreba
[1] 320 330 390 400 410

Rozdiel produkcie a spotreby:

Kód
bilancia <- produkcia - spotreba

bilancia
[1] -20  20  30 -20  40

Kladná hodnota predstavuje prebytok a záporná hodnota nedostatok energie.

Dĺžka vektora

Počet sledovaných dní môžeme zistiť pomocou length().

Kód
length(produkcia)
[1] 5

Indexovanie a výber prvkov vektora

Predpokladajme, že máme produkciu počas siedmich dní.

Kód
vykon_dni <- c(250, 410, 380, 520, 290, 610, 450)

vykon_dni
[1] 250 410 380 520 290 610 450

Prvý deň:

Kód
vykon_dni[1]
[1] 250

Druhý až štvrtý deň:

Kód
vykon_dni[2:4]
[1] 410 380 520

Všetky dni s produkciou vyššou ako 400 kWh:

Kód
vykon_dni[vykon_dni > 400]
[1] 410 520 610 450

Pozície týchto dní:

Kód
which(vykon_dni > 400)
[1] 2 4 6 7

Práca s chýbajúcimi hodnotami

Pri zbere reálnych dát sa môže stať, že niektoré údaje chýbajú.

Kód
merania <- c(320, 350, NA, 410, 390, NA, 450)

merania
[1] 320 350  NA 410 390  NA 450

Pomocou is.na() zistíme, ktoré hodnoty chýbajú.

Kód
is.na(merania)
[1] FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE

Priemer bez odstránenia chýbajúcich hodnôt:

Kód
mean(merania)
[1] NA

Priemer po odstránení chýbajúcich hodnôt:

Kód
mean(merania, na.rm = TRUE)
[1] 384

Základné štatistiky produkcie energie

Predpokladajme, že máme produkciu solárnej elektrárne počas desiatich dní.

Kód
produkcia_10_dni <- c(310, 340, 290, 410, 450, 380, 360, 470, 420, 390)

produkcia_10_dni
 [1] 310 340 290 410 450 380 360 470 420 390

Vypočítame priemernú produkciu.

Kód
mean(produkcia_10_dni)
[1] 382

Štandardnú odchýlku:

Kód
sd(produkcia_10_dni)
[1] 58.2714

Maximálnu produkciu:

Kód
max(produkcia_10_dni)
[1] 470

Minimálnu produkciu:

Kód
min(produkcia_10_dni)
[1] 290

Základný štatistický prehľad:

Kód
summary(produkcia_10_dni)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  290.0   345.0   385.0   382.0   417.5   470.0 

Hodnoty môžeme zoradiť od najnižšej po najvyššiu.

Kód
sort(produkcia_10_dni)
 [1] 290 310 340 360 380 390 410 420 450 470

Alebo od najvyššej po najnižšiu.

Kód
sort(produkcia_10_dni, decreasing = TRUE)
 [1] 470 450 420 410 390 380 360 340 310 290

Malé cvičenie

Máme údaje o dennej produkcii solárnej elektrárne počas desiatich dní. Vypočítajte celkovú a priemernú produkciu a vyberte dni, počas ktorých bola produkcia vyššia ako 350 kWh.

Kód
solarna_10_dni <- c(280, 320, 370, 410, 290, 450, 390, 340, 430, 360)

solarna_10_dni
 [1] 280 320 370 410 290 450 390 340 430 360

Celková produkcia:

Kód
sum(solarna_10_dni)
[1] 3640

Priemerná produkcia:

Kód
mean(solarna_10_dni)
[1] 364

Vyberiem hodnoty vyššie ako 350 kWh.

Kód
vysoka_produkcia <- solarna_10_dni[solarna_10_dni > 350]

vysoka_produkcia
[1] 370 410 450 390 430 360

Zistím aj dni, počas ktorých bola táto podmienka splnená.

Kód
which(solarna_10_dni > 350)
[1]  3  4  6  7  9 10

Párne a nepárne hodnoty

Operátor %% môžeme použiť na zistenie zvyšku po delení.

Ako jednoduchý príklad vytvorím čísla jednotlivých dní.

Kód
dni <- 1:14

dni
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14

Vyberiem párne dni.

Kód
parne_dni <- dni[dni %% 2 == 0]

parne_dni
[1]  2  4  6  8 10 12 14

Vyberiem nepárne dni.

Kód
neparne_dni <- dni[dni %% 2 != 0]

neparne_dni
[1]  1  3  5  7  9 11 13

Matice

Vytvorenie matice

Matice môžeme v energetike použiť napríklad na uloženie údajov o viacerých typoch obnoviteľných zdrojov v rôznych obdobiach.

Vytvorím maticu, v ktorej riadky predstavujú solárnu, veternú a vodnú energiu a stĺpce predstavujú štyri obdobia.

Kód
energia <- matrix(c(
  150, 260, 420, 290,
  310, 350, 370, 330,
  500, 520, 490, 510
), nrow = 3, byrow = TRUE)

energia
     [,1] [,2] [,3] [,4]
[1,]  150  260  420  290
[2,]  310  350  370  330
[3,]  500  520  490  510

Hodnoty sú zadané po riadkoch pomocou byrow = TRUE.

Rozmery matice

Rozmery matice zistíme pomocou funkcie dim().

Kód
dim(energia)
[1] 3 4

Počet riadkov:

Kód
nrow(energia)
[1] 3

Počet stĺpcov:

Kód
ncol(energia)
[1] 4

Adresovanie prvkov matice

Môžeme vybrať konkrétnu hodnotu. Napríklad hodnotu v prvom riadku a druhom stĺpci.

Kód
energia[1, 2]
[1] 260

Celý prvý riadok predstavujúci solárnu energiu:

Kód
energia[1, ]
[1] 150 260 420 290

Celý druhý stĺpec:

Kód
energia[, 2]
[1] 260 350 520

Vybrať môžeme aj časť matice.

Kód
energia[1:2, 2:3]
     [,1] [,2]
[1,]  260  420
[2,]  350  370

Maticové operácie

Vytvorím dve jednoduché matice predstavujúce produkciu energie v dvoch sledovaných obdobiach.

Kód
A <- matrix(c(
  200, 250,
  300, 350
), nrow = 2, byrow = TRUE)

B <- matrix(c(
  50, 70,
  80, 100
), nrow = 2, byrow = TRUE)

A
     [,1] [,2]
[1,]  200  250
[2,]  300  350
Kód
B
     [,1] [,2]
[1,]   50   70
[2,]   80  100

Sčítanie matíc:

Kód
A + B
     [,1] [,2]
[1,]  250  320
[2,]  380  450

Násobenie zodpovedajúcich prvkov:

Kód
A * B
      [,1]  [,2]
[1,] 10000 17500
[2,] 24000 35000

Maticové násobenie:

Kód
A %*% B
      [,1]  [,2]
[1,] 30000 39000
[2,] 43000 56000

Transpozícia matice:

Kód
t(A)
     [,1] [,2]
[1,]  200  300
[2,]  250  350

Determinant:

Kód
det(A)
[1] -5000

Inverzná matica:

Kód
solve(A)
      [,1]  [,2]
[1,] -0.07  0.05
[2,]  0.06 -0.04

Zlučovanie vektorov do matíc

Predpokladajme, že máme samostatný vektor solárnej a veternej produkcie.

Kód
solarna <- c(300, 350, 420)
veterna <- c(250, 310, 380)

C <- cbind(solarna, veterna)

C
     solarna veterna
[1,]     300     250
[2,]     350     310
[3,]     420     380

Pomocou rbind() ich môžeme spojiť po riadkoch.

Kód
D <- rbind(solarna, veterna)

D
        [,1] [,2] [,3]
solarna  300  350  420
veterna  250  310  380

Výpočty po riadkoch a stĺpcoch

Použijem maticu produkcie troch obnoviteľných zdrojov počas štyroch období.

Kód
produkcia_matica <- matrix(c(
  200, 350, 500, 300,
  280, 320, 400, 350,
  450, 470, 460, 480
), nrow = 3, byrow = TRUE)

produkcia_matica
     [,1] [,2] [,3] [,4]
[1,]  200  350  500  300
[2,]  280  320  400  350
[3,]  450  470  460  480

Celkovú produkciu každého zdroja vypočítam pomocou:

Kód
apply(produkcia_matica, 1, sum)
[1] 1350 1350 1860

Priemernú produkciu v jednotlivých obdobiach:

Kód
apply(produkcia_matica, 2, mean)
[1] 310.0000 380.0000 453.3333 376.6667

Môžeme použiť aj rowSums() a colSums().

Kód
rowSums(produkcia_matica)
[1] 1350 1350 1860
Kód
colSums(produkcia_matica)
[1]  930 1140 1360 1130

Malé cvičenie

Máme údaje o produkcii troch obnoviteľných zdrojov energie počas štyroch štvrťrokov. Riadky predstavujú solárnu, veternú a vodnú energiu. Vypočítajte celkovú produkciu každého zdroja, priemernú produkciu v jednotlivých štvrťrokoch a súčin matíc \(M^T M\).

Najskôr vytvorím maticu.

Kód
M2 <- matrix(c(
  180, 350, 620, 300,
  320, 380, 410, 360,
  520, 540, 510, 530
), nrow = 3, byrow = TRUE)

M2
     [,1] [,2] [,3] [,4]
[1,]  180  350  620  300
[2,]  320  380  410  360
[3,]  520  540  510  530

Celková produkcia jednotlivých zdrojov:

Kód
rowSums(M2)
[1] 1450 1470 2100

Priemerná produkcia v jednotlivých štvrťrokoch:

Kód
apply(M2, 2, mean)
[1] 340.0000 423.3333 513.3333 396.6667

Transponovaná matica:

Kód
t(M2)
     [,1] [,2] [,3]
[1,]  180  320  520
[2,]  350  380  540
[3,]  620  410  510
[4,]  300  360  530

Súčin matíc \(M^T M\):

Kód
t(M2) %*% M2
       [,1]   [,2]   [,3]   [,4]
[1,] 405200 465400 508000 444800
[2,] 465400 558500 648200 528000
[3,] 508000 648200 812600 603900
[4,] 444800 528000 603900 500500

Vlastné čísla a vlastné vektory matíc

Čo znamenajú vlastné čísla a vlastné vektory?

Nech \(\mathbf A\) je štvorcová matica. Vlastné číslo \(\lambda\) a príslušný vlastný vektor \(\mathbf v\) spĺňajú vzťah

\[ \mathbf A \mathbf v = \lambda \mathbf v. \]

Vlastné čísla a vlastné vektory sa využívajú aj pri dátovej analýze. Môžu byť užitočné napríklad pri analýze vzťahov medzi viacerými premennými alebo pri práci s variančno-kovariančnými maticami.

Jednoduchý príklad – matica 2 × 2

Použijem jednoduchú symetrickú maticu.

\[ \mathbf A = \begin{pmatrix} 4 & 2 \\ 2 & 4 \end{pmatrix} \]

V R ju vytvorím nasledovne:

Kód
A_eig <- matrix(c(
  4, 2,
  2, 4
), nrow = 2, byrow = TRUE)

A_eig
     [,1] [,2]
[1,]    4    2
[2,]    2    4

Matica je symetrická, pretože platí \(A^T=A\).

Kód
t(A_eig)
     [,1] [,2]
[1,]    4    2
[2,]    2    4

Výpočet pomocou funkcie eigen()

Na výpočet vlastných čísel a vlastných vektorov použijem funkciu eigen().

Kód
eig_A <- eigen(A_eig, symmetric = TRUE)

eig_A
eigen() decomposition
$values
[1] 6 2

$vectors
          [,1]       [,2]
[1,] 0.7071068 -0.7071068
[2,] 0.7071068  0.7071068

Výsledok môžeme rozdeliť na vlastné čísla a vlastné vektory.

Kód
lambda_A <- eig_A$values
V_A <- eig_A$vectors

lambda_A
[1] 6 2
Kód
V_A
          [,1]       [,2]
[1,] 0.7071068 -0.7071068
[2,] 0.7071068  0.7071068

Vlastné čísla získame pomocou:

Kód
eig_A$values
[1] 6 2

Vlastné vektory získame pomocou:

Kód
eig_A$vectors
          [,1]       [,2]
[1,] 0.7071068 -0.7071068
[2,] 0.7071068  0.7071068

Prvé vlastné číslo:

Kód
eig_A$values[1]
[1] 6

Prvý vlastný vektor:

Kód
eig_A$vectors[, 1]
[1] 0.7071068 0.7071068

Ak potrebujeme iba vlastné čísla, môžeme použiť argument only.values = TRUE.

Kód
eigen(A_eig, symmetric = TRUE, only.values = TRUE)$values
[1] 6 2

Overenie vzťahu Av = λv

Vyberiem prvé vlastné číslo a prvý vlastný vektor.

Kód
lambda_1 <- lambda_A[1]
v_1 <- V_A[, 1]

lambda_1
[1] 6
Kód
v_1
[1] 0.7071068 0.7071068

Vypočítam ľavú stranu rovnice.

Kód
lava_strana <- as.vector(A_eig %*% v_1)

lava_strana
[1] 4.242641 4.242641

A pravú stranu:

Kód
prava_strana <- lambda_1 * v_1

prava_strana
[1] 4.242641 4.242641

Porovnaním výsledkov môžeme overiť vzťah

\[ \mathbf A\mathbf v = \lambda\mathbf v. \]

Kód
lava_strana
[1] 4.242641 4.242641
Kód
prava_strana
[1] 4.242641 4.242641

Matica 3 × 3

Ako ďalší príklad vytvorím symetrickú maticu 3 × 3, ktorú môžeme chápať ako zjednodušenú maticu vzťahov medzi tromi energetickými premennými.

Kód
B_eig <- matrix(c(
  5, 1, 0,
  1, 5, 0,
  0, 0, 3
), nrow = 3, byrow = TRUE)

B_eig
     [,1] [,2] [,3]
[1,]    5    1    0
[2,]    1    5    0
[3,]    0    0    3

Vypočítam vlastné čísla a vlastné vektory.

Kód
eig_B <- eigen(B_eig, symmetric = TRUE)

eig_B$values
[1] 6 4 3
Kód
eig_B$vectors
          [,1]       [,2] [,3]
[1,] 0.7071068  0.7071068    0
[2,] 0.7071068 -0.7071068    0
[3,] 0.0000000  0.0000000    1

Súčty štvorcov prvkov jednotlivých vlastných vektorov:

Kód
colSums(eig_B$vectors^2)
[1] 1 1 1

Pre štvorcovú maticu platí, že súčet vlastných čísel sa rovná stope matice.

Kód
c(
  sucet_vlastnych_cisel = sum(eig_B$values),
  stopa_matice = sum(diag(B_eig))
)
sucet_vlastnych_cisel          stopa_matice 
                   13                    13 

Súčin vlastných čísel sa rovná determinantu matice.

Kód
c(
  sucin_vlastnych_cisel = prod(eig_B$values),
  determinant = det(B_eig)
)
sucin_vlastnych_cisel           determinant 
                   72                    72 

Malé cvičenie

Máme zjednodušenú variančno-kovariančnú maticu troch premenných súvisiacich s obnoviteľnou energetikou. Premenné predstavujú solárnu produkciu, veternú produkciu a spotrebu energie. Vypočítajte vlastné čísla a vlastné vektory tejto matice.

Použijem nasledujúcu symetrickú maticu:

\[ C = \begin{pmatrix} 0.000210 & 0.000015 & 0.000095 \\ 0.000015 & 0.000045 & 0.000070 \\ 0.000095 & 0.000070 & 0.000850 \end{pmatrix} \]

Najskôr vytvorím maticu v R.

Kód
C <- matrix(c(
  0.000210, 0.000015, 0.000095,
  0.000015, 0.000045, 0.000070,
  0.000095, 0.000070, 0.000850
), nrow = 3, byrow = TRUE)

C
        [,1]    [,2]    [,3]
[1,] 2.1e-04 1.5e-05 9.5e-05
[2,] 1.5e-05 4.5e-05 7.0e-05
[3,] 9.5e-05 7.0e-05 8.5e-04

Skontrolujem jej rozmery.

Kód
dim(C)
[1] 3 3

Keďže ide o symetrickú maticu, jej transpozícia je rovnaká ako pôvodná matica.

Kód
t(C)
        [,1]    [,2]    [,3]
[1,] 2.1e-04 1.5e-05 9.5e-05
[2,] 1.5e-05 4.5e-05 7.0e-05
[3,] 9.5e-05 7.0e-05 8.5e-04

Vlastné čísla a vlastné vektory vypočítam pomocou funkcie eigen().

Kód
eig_C <- eigen(C, symmetric = TRUE)

eig_C
eigen() decomposition
$values
[1] 8.699886e-04 1.963398e-04 3.867159e-05

$vectors
            [,1]        [,2]        [,3]
[1,] -0.14386288  0.98869358  0.04229041
[2,] -0.08626312  0.03004323 -0.99581930
[3,] -0.98583069 -0.14690953  0.08096569

Samostatne vypíšem vlastné čísla.

Kód
vlastne_cisla <- eig_C$values

vlastne_cisla
[1] 8.699886e-04 1.963398e-04 3.867159e-05

A vlastné vektory.

Kód
vlastne_vektory <- eig_C$vectors

vlastne_vektory
            [,1]        [,2]        [,3]
[1,] -0.14386288  0.98869358  0.04229041
[2,] -0.08626312  0.03004323 -0.99581930
[3,] -0.98583069 -0.14690953  0.08096569

Prvé vlastné číslo:

Kód
eig_C$values[1]
[1] 0.0008699886

Prvý vlastný vektor:

Kód
eig_C$vectors[, 1]
[1] -0.14386288 -0.08626312 -0.98583069

Nakoniec overím vzťah medzi prvým vlastným číslom a prvým vlastným vektorom.

Kód
lambda_C <- eig_C$values[1]
v_C <- eig_C$vectors[, 1]

lava_strana_C <- as.vector(C %*% v_C)
prava_strana_C <- lambda_C * v_C

lava_strana_C
[1] -1.251591e-04 -7.504793e-05 -8.576615e-04
Kód
prava_strana_C
[1] -1.251591e-04 -7.504793e-05 -8.576615e-04

Rovnaké hodnoty na oboch stranách potvrdzujú vzťah

\[ C\mathbf v = \lambda\mathbf v. \]

Záver

V tomto dokumente som demonštroval vybrané základné operácie programovacieho jazyka R na príkladoch z oblasti dátovej analýzy pre udržateľnú energetiku.

Pracoval som s numerickými hodnotami, textovými a logickými premennými, numerickými vektormi a maticami. Na údajoch o produkcii a spotrebe energie som použil základné aritmetické operácie, podmienky, indexovanie a štatistické funkcie.

Pri práci s maticami som analyzoval údaje o viacerých obnoviteľných zdrojoch energie a použil operácie ako transpozícia, maticové násobenie alebo výpočet súčtov a priemerov.

V poslednej časti som pomocou funkcie eigen() vypočítal vlastné čísla a vlastné vektory symetrických matíc a overil vzťah medzi maticou, vlastným číslom a vlastným vektorom.