---
title: "R Notebook"
output: html_notebook
---


Nejistoty a chyby měření

```{r echo=FALSE, message=FALSE, warning=FALSE}

library(errors)
xe <- set_errors(3.602, 0.008)
options(errors.notation = "plus-minus") 
print(xe, digits = 2)
options(errors.notation = "parenthesis")
print(xe, digits = 2)

# elementarni naboj
e <- set_errors(1.6021766208e-19, 0.0000000098e-19) 
options(errors.notation = "plus-minus") 
print(e, digits = 2)
options(errors.notation = "parenthesis")
print(e, digits = 3)

```


Ze zásilky kaprolaktamu bylo odebráno 10 vzorku a byl u nich stanoven bod tání. Vypočítejte průměrnou hodnotu bodu tání v zásilce a její směrodatnou odchylku.

```{r echo=FALSE, message=FALSE, warning=FALSE}

xc = c(68.5, 68.7, 68.3, 68.8, 68.5, 68.2, 68.6, 68.4, 68.2, 68.7)
mean(xc)
sd(xc) # sd
sd(xc)/sqrt(length(xc)) # str chyba prumeru

e <- set_errors(mean(xc), sd(xc)/sqrt(length(xc))) 
options(errors.notation = "plus-minus"); print(e, digits = 2)

```


Šíření chyb

```{r echo=FALSE, message=FALSE, warning=FALSE}

library(propagate)

# z prumeru a nejistoty, bez uvedení poctu stupnu volnosti, resp. poctu opakovani

x <- c(5, 0.01) 
y <- c(1, 0.01) 

EXPR1 <- expression(x/y) 
DF1 <- cbind(x, y)
RES1 <- propagate(expr = EXPR1, data = DF1, type = "stat", do.sim = TRUE, verbose = TRUE, nsim = 100000) 
RES1
RES1$data
RES1$prop
RES1$sim
summary(RES1)
plot(RES1)

EXPR <- expression(a^b*x)
a = c(5, 0.1)
b = c(10, 0.1)
x = c(1, 0.1)
DAT <- cbind(a, b, x)
(res <- propagate(EXPR, DAT))
res$data
res$prop
res$sim
summary(res)
plot(res)


# z prumeru a nejistoty, s uvedením poctu stupnu volnosti
EXPR2 <- expression(x/y) 
x <- c(5, 0.01, 12) 
y <- c(1, 0.01, 5) 
DF2 <- cbind(x, y) 
RES2 <- propagate(expr = EXPR2, data = DF2, type = "stat", do.sim = TRUE, verbose = TRUE, nsim = 100000)
RES2
RES2$data
RES2$prop
RES2$sim
summary(RES2)
plot(RES2)


# Výpocet pomocí intervalu 

EXPR3 <- expression(C * sqrt((520 * H * P)/(M *(t + 460))))
H <- c(64, 65)
M <- c(16, 16.2)
P <- c(361, 365)
t <- c(165, 170)
C <- c(38.4, 38.5)
DAT3 <- makeDat(EXPR3)
interval(DAT3, EXPR3, seq = 2)

EXPR5 <- expression(x^2 - x + 1)
x <- c(-2, 1)
curve(x^2 - x + 1, -2, 1)
DAT5 <- makeDat(EXPR5)
interval(DAT5, EXPR5, seq = 2)


library(metRology)

data(GUM.H.1)
GUM.H.1

## a simple uncertainty analysis for the product of two quantities
GUM(c("x1","x2"),c(2.3,1.1),c(0.030,0.015),c(5,9999),"x1*x2")

## a simple uncertainty analysis for the product of two quantities
GUM.validate(c("x1","x2"), c(2.3,1.1), c(0.030,0.015), c(5,9999), c("A","B"),c("Normal","Rectangular"),"x1*x2")


expr <- expression(a+b*2+c*3+d/2)
x <- list(a=1, b=3, c=2, d=11)
u <- lapply(x, function(x) x/10) # nejistota 10 %
u.expr<-uncert(expr, x, u, method="NUM")
u.expr
# function method
f <- function(a,b,c,d) a+b*2+c*3+d/2
u.fun<-uncert(f, x, u, method="NUM")
u.fun
# formula method
u.form<-uncert(~a+b*2+c*3+d/2, x, u, method="NUM")
u.form


# s korelaci
u.cor<-diag(1,4)
u.cor[3,4]<-u.cor[4,3]<-0.5
u.cor
# num
u.formc<-uncert(~a+b*2+c*3+d/2, x, u, method="NUM", cor=u.cor)
u.formc
# Monte Carlo
u.formc.MC<-uncert(~a+b*2+c*3+d/2, x, u, method="MC", cor=u.cor, B=200)
u.formc.MC


expr <- expression(a/(b-c))
x <- list(a=1, b=3, c=2)
u <- lapply(x, function(x) x/20)
set.seed(403)
u.invexpr<-uncertMC(expr, x, u, distrib=rep("norm", 3), B=999, keep.x=TRUE )
u.invexpr

```


Vypočítejte hustotu a její chybu pro látku, u níž byla opakovaným měřením stanovena hmotnost 6.824 (0.008) g a objem 3.03 (0.01) ml.

```{r echo=FALSE, message=FALSE, warning=FALSE}

library(propagate)

EXPR2 <- expression(m/V) 
m = c(6.824, 0.008) #[g] 
V = c(3.03, 0.01) #[ml]
DF2 <- cbind(m, V) 
RES2 <- propagate(expr = EXPR2, data = DF2, type = "stat", do.sim = TRUE, verbose = TRUE, nsim = 100000)
RES2
RES2$data
RES2$prop
RES2$sim
library(errors)
e <- set_errors(RES2$sim[1], RES2$sim[2]) 
options(errors.notation = "plus-minus"); print(e, digits = 1)
options(errors.notation = "parenthesis"); print(e, digits = 1)

```


Na píst o průměru 200 (0.05) mm působí pára tlakem 8.2 (0.1) atm. Jakou silou působí pára na píst?

```{r echo=FALSE, message=FALSE, warning=FALSE}

library(propagate)
library(measurements)

d = c(200, 0.05) # [mm] na [m]
d = as.vector(conv_unit(c(200, 0.05), from="mm", to="m"))
p = c(8.2, 0.1)  # [atm] na [Pa]
p = as.vector(conv_unit(c(8.2, 0.1), from="atm", to="Pa"))
pi
EXPR7 <- expression(p*3.141593*(d/2)^2)
DF7 <- cbind(d, p) 
RES7 <- propagate(expr = EXPR7, data = DF7, type = "stat", do.sim = TRUE, verbose = TRUE, nsim = 100000)
RES7
RES7$data
RES7$prop
RES7$sim
library(errors)
e <- set_errors(RES7$sim[1], RES7$sim[2]) 
options(errors.notation = "plus-minus"); print(e, digits = 1)
options(errors.notation = "parenthesis"); print(e, digits = 1)

```


Vypočítejte koeficient viskozity roztoku glycerinu Stokesovou metodou

```{r echo=FALSE, message=FALSE, warning=FALSE}

library(propagate)

r = c(0.0112, 0.0001) # polomer kulicky [cm]
l = c(31.23, 0.05) # draha kulicky za cas t [cm]
t = c(62.1, 0.2) # cas [s]
g = c(980.1,0) # tihove zrychleni [cm/s2] z tabulek
d0 = c(13.55,0) # hustota kulicky [g/cm3] z tabulek
d = c(1.28,0) # hustota roztoku [g/cm3] z tabulek
EXPR3 <- expression((2/9)*g*(((d0-d)*r^2)/l)*t)
DF3 <- cbind(r, l, t, g, d0, d) 
RES3 <- propagate(expr = EXPR3, data = DF3, type = "stat", do.sim = TRUE, verbose = TRUE, nsim = 100000)
RES3
RES3$data
RES3$prop
RES3$sim
EXPR4 <- expression((2/9)*980.1*(((13.55-1.28)*r^2)/l)*t)
DF4 <- cbind(r, l, t) 
RES4 <- propagate(expr = EXPR4, data = DF4, type = "stat", do.sim = TRUE, verbose = TRUE, nsim = 100000)
RES4$data
RES4$prop
RES4$sim
library(errors)
e <- set_errors(RES4$sim[1], RES4$sim[2]) 
options(errors.notation = "plus-minus"); print(e, digits = 1)
options(errors.notation = "parenthesis"); print(e, digits = 1)

```


Vypočítejte koeficient viskozity roztoku glycerinu pomocí kapilárního viskozimetru.

```{r echo=FALSE, message=FALSE, warning=FALSE}

library(propagate)
library(measurements)

p = c(20.12, 0.01) # tlak na vytoku z kapilary [mm Hg] to [Pa]
p = as.vector(conv_unit(c(20.12, 0.01), from="mmHg", to="Pa"))
r = c(0.570, 0.003) # polomer kapilary [mm] to [m]
r = conv_unit(c(0.570, 0.003), from="mm", to="m")
l = c(10.526, 0.005) # delka kapilary [mm] to [m]
l = conv_unit(c(10.526, 0.005), from="mm", to="m")
V = c(5.025, 0.001)# objem kapaliny vytekle za cas t [cm3] to [m3]
V = conv_unit(c(5.025, 0.001), from="cm3", to="m3")
t = c(27.34, 0.02) # cas [s]
pi
EXPR5 <- expression((3.141593*p*(r^4)*t)/(8*V*l))
DF5 <- cbind(p, r, l, V, t) 
RES5 <- propagate(expr = EXPR5, data = DF5, type = "stat", do.sim = TRUE, verbose = TRUE, nsim = 100000)
RES5 # [kg / m.s]
RES5$data
RES5$prop
RES5$sim
# conv_multiunit(x = RES5$sim[1:2], from="kg / m", to="g / cm")
library(errors)
e <- set_errors(RES5$sim[1], RES5$sim[2]) 
options(errors.notation = "plus-minus"); print(e, digits = 1)
options(errors.notation = "parenthesis"); print(e, digits = 1)

```


Součin rozpustnosti stříbrné soli AgX má hodnotu Ks = 4.0 (0.4) x 10^-8. Jaká je chyba vypočtené rovnovážné koncentrace stříbrných iontů ve vode?

```{r echo=FALSE, message=FALSE, warning=FALSE}

library(propagate)
EXPR <- expression(x^0.5)
x = c(4.0, 0.4)
DAT <- data.frame(x)
res <- propagate(EXPR,DAT)
# NEFUNGUJE pro jednu promennou.


library(metRology)

GUM("Ks",4.0e-8,0.4e-8,1,"sqrt(Ks)",sig.digits.U = 2) 

expr <- expression(a^0.5)
x <- list(a=4.0e-8)
u <- lapply(x, function(x) x/10) # nejistota 10 %
u.expr<-uncert(expr, x, u, method="NUM")
u.expr
# function method
f <- function(a) a^0.5
u.fun<-uncert(f, x, u, method="NUM")
u.fun
# formula method
u.form<-uncert(~a^0.5, x, u, method="NUM")
u.form

```


Nejistoty a korelace

```{r echo=FALSE, message=FALSE, warning=FALSE}

library(errors)

x = c(0.9719378, 1.9840006, 2.9961830, 4.0123346, 5.0012799)
errors(x) = c(0.01, 0.01, 0.01, 0.01, 0.01)
y = c(0.9748992, 1.9627805, 2.9935831, 3.9921237, 4.9612555)
errors(y) = c(0.02, 0.02, 0.02, 0.02, 0.02)

# bez korelace
correl(x, y) =  c(0, 0, 0, 0, 0) 
z <- x / y; z

# s korelací
correl(x, y) =  c(0.8864282, 0.9761841, 0.9140209, 0.9496266, 0.9911837)
z_correlp <- x / y; z_correlp

correl(x, y) =  c(-0.8864282, -0.9761841, -0.9140209, -0.9496266, -0.9911837)
z_correln <- x / y; z_correln

```


Import dat

```{r echo=FALSE, message=FALSE, warning=FALSE}


# Import Dataset v RStudio


# clipboard

cyclamate<- read.delim("clipboard", header=T)


# txt, ascii

cyclamate1<- read.table("c:\\Users\\lubop\\Dropbox\\kursR\\cyclamate.txt", header=T)

cyclamate2<- read.delim("c:\\Users\\lubop\\Dropbox\\kursR\\cyclamate.txt", header=T)


## csv

data1 <- read.csv("c:\\Users\\lubop\\Dropbox\\kursR\\Chemical Composion of Ceramic.csv", header=TRUE, stringsAsFactors=FALSE)

library(data.table)
data2 <- fread("c:\\Users\\lubop\\Dropbox\\kursR\\Chemical Composion of Ceramic.csv")

data3 <- read.csv("https://archive.ics.uci.edu/ml/machine-learning-databases/00583/Chemical Composion of Ceramic.csv")


library(readr)


## Excel

library(openxlsx)

getSheetNames("c:\\Users\\lubop\\Dropbox\\kursR\\zarodky.xlsx")

zarodky1 <- read.xlsx("c:\\Users\\lubop\\Dropbox\\kursR\\zarodky.xlsx", sheet = "zarodky", startRow = 1, colNames = TRUE, rowNames = FALSE,detectDates = FALSE, skipEmptyRows = TRUE,rows = NULL, cols = NULL,check.names = FALSE)
head(zarodky1)

library(readxl)
zarodky2 <- read_excel("c:\\Users\\lubop\\Dropbox\\kursR\\zarodky.xlsx", sheet = "zarodky")
head(zarodky2)


path = "c:\\Users\\lubop\\Dropbox\\kursR\\"
file.names <- dir(path, pattern =".txt"); file.names

RD <- function(X){M <- read.delim(paste("c:\\Users\\lubop\\Dropbox\\kursR\\",X,sep=""))
return(M)}
listt = lapply(file.names,RD)
listt[[1]]
listt[[2]]
listt[[4]]
listt[[3]]

```


Export dat

```{r echo=FALSE, message=FALSE, warning=FALSE}

# txt, ascii

write.table(listt[[3]], file="c:\\Users\\lubop\\Dropbox\\kursR\\slinutypr2.txt", sep='\t')


# csv

write.csv(listt[[3]], "c:\\Users\\lubop\\Dropbox\\kursR\\slinutypr.csv", row.names=FALSE)

library(readr)
write_csv(listt[[4]], "c:\\Users\\lubop\\Dropbox\\kursR\\zarodky.csv")
library(data.table)
fwrite(listt[[2]], "c:\\Users\\lubop\\Dropbox\\kursR\\pneu.csv")


# Excel

library(openxlsx)
write.xlsx(listt[[1]], "c:\\Users\\lubop\\Dropbox\\kursR\\cyklamaty1.xlsx", asTable = FALSE, overwrite = TRUE)

library(writexl)
write_xlsx(listt[[1]], "c:\\Users\\lubop\\Dropbox\\kursR\\cyklamaty2.xlsx")

```


Čísla dle Chemical Abstracts Service (CAS)

```{r echo=FALSE, message=FALSE, warning=FALSE}

library(erah)

findComp(name = "caffeine", id.database = mslib, CAS = NULL,chem.form = NULL)
findComp(name = "proline", id.database = mslib, CAS = NULL,chem.form = NULL)

findComp(name = NULL, id.database = mslib, CAS = "58-08-2",chem.form = NULL)
findComp(name = NULL, id.database = mslib, CAS = "50-78-2",chem.form = NULL)


library(httk)

chem.physical_and_invitro.data

CAS.checksum(CAS.string="50-78-2") # Aspirin
CAS.checksum(CAS.string="58-08-2") # Caffeine

```


BCPC Compendium of Pesticide Common Names https://pesticidecompendium.bcpc.org
     formerly known as 
Alan Woods Compendium of Pesticide Common Names
http://www.alanwood.net/pesticides

```{r echo=FALSE, message=FALSE, warning=FALSE}

library(webchem)

# use names

bcpc_query("DEET", type = 'commonname', verbose = TRUE)

bcpc_query("Fluazinam", type = 'commonname', verbose = TRUE)$fluazinam$formula[1]

bcpc_query('Parathion', from ='name')

out = bcpc_query(c('Fluazinam','Diclofop'), from ='name')
out


# use CAS-numbers

bcpc_query("79622-59-6", from ='cas')

bcpc_query("51-03-6", from = 'cas', verbose = TRUE)
# from = c("name", "cas")


```


ChemicalIdentifierResolver(CIR)
http://cactus.nci.nih.gov/chemical/

```{r echo=FALSE, message=FALSE, warning=FALSE}

library(webchem)

cir_query("piperonyl butoxide", representation = "smiles", resolver = NULL, first = FALSE, verbose = TRUE)
cir_query("51-03-6", representation = "smiles", resolver = NULL, first = FALSE, verbose = TRUE)

# SMILES
cir_query('Imidacloprid', representation = 'smiles')
cir_query('Aspirin', 'smiles')
cir_query('Triclosan', 'smiles')
cir_query("3380-34-5", 'smiles')

# CAS
cir_query('Imidacloprid', representation = 'cas')
cir_query('DEET', 'cas', first = TRUE)
cir_query('Triclosan', 'cas')
cir_query("3380-34-5", 'cas', first = TRUE)
cir_query("3380-34-5", 'cas', resolver = 'cas_number')

# InChIKey
cir_query('Imidacloprid', representation = 'stdinchikey')

# Molecular weight
cir_query('Imidacloprid', representation = 'mw')

# number of rings
cir_query('Imidacloprid', representation = 'ring_count')

# formula
cir_query("3380-34-5", 'formula')

# name
cir_query("3380-34-5", 'names')


cir_query("3380-34-5", 'pubchem_sid')
cir_query("3380-34-5", 'chemnavigator_sid')


name = 'Triclosan'
cir_query(name, 'mw')
cir_query(name, 'formula')
cir_query(name, 'monoisotopic_mass')
cir_query(name, 'heteroatom_count')
cir_query(name, 'hydrogen_atom_count')


comp <- c('Triclosan', 'Aspirin')
cir_query(comp, 'cas')
cir_query(comp, 'cas', first = TRUE)
cir_query(comp, 'smiles')
cir_query(comp, 'mw')


cir_img("CCO", dir = "c:\\Users\\lubop\\Dropbox\\kursR\\") # SMILES

query = c("Glyphosate", "Isoproturon", "BSYNRYMUTXBXSQ-UHFFFAOYSA-N")
cir_img(query, dir = "c:\\Users\\lubop\\Dropbox\\kursR\\", bgcolor = "transparent", antialising = 0)

query  = "Triclosan"
cir_img(query,dir = "c:\\Users\\lubop\\Dropbox\\kursR\\",format = "png",width = 600,height = 600,linewidth = 2,symbolfontsize = 30,bgcolor = "white",antialiasing = FALSE,atomcolor = "black",bondcolor = "black",csymbol = "all",hsymbol = "all",hcolor = "black",header = "",footer = "",frame = 1,verbose = getOption("verbose"))

```


ChemicalIdentifierResolver(CIR)
https://cactus.nci.nih.gov/chemical/structure

```{r echo=FALSE, message=FALSE, warning=FALSE}

library(MSbox)

describe('Triclosan', "formula", info = TRUE) 

describe('malic acid', "formula", info = TRUE) 
describe('malic acid', "mw", info = FALSE) 
describe('malic acid', "hydrogen_atom_count", info = FALSE) 
describe('malic acid', "heteroatom_count", info = FALSE) 

describe(c('malic acid', 'citric acid', 'tartaric acid'), "smiles")

describe('glyphosate', "formula", info = FALSE) 
describe('glyphosate', "mw", info = FALSE)
describe('glyphosate', "smiles", info = FALSE) 
describe('glyphosate', "stdinchikey", info = FALSE) 

```


Chemical Translation Service (CTS)
http://cts.fiehnlab.ucdavis.edu/

```{r echo=FALSE, message=FALSE, warning=FALSE}

library(webchem)

out <- cts_compinfo("XEFQLINVKFYRCS-UHFFFAOYSA-N", verbose = TRUE)
str(out) 
out[[1]][1:5]

inchikeys <- c("XEFQLINVKFYRCS-UHFFFAOYSA-N","BSYNRYMUTXBXSQ-UHFFFAOYSA-N" ) 
out2 <- cts_compinfo(inchikeys) 
str(out2)

sapply(out2, function(y) c(y$formula,y$molweight))


cts_convert('XEFQLINVKFYRCS-UHFFFAOYSA-N', 'inchikey', 'Chemical Name')
# 'Chemical Name','InChIKey','PubChem CID', 'ChemSpider', 'CAS'

comp <- c('XEFQLINVKFYRCS-UHFFFAOYSA-N', 'BSYNRYMUTXBXSQ-UHFFFAOYSA-N') 
cts_convert(comp, 'inchikey', 'CAS')

# cts_convert(query, from, to, first = FALSE, verbose = TRUE)

```


PubChem 
https://pubchem.ncbi.nlm.nih.gov/
CompoundID (CID) for a search query using PUG-REST https://pubchem.ncbi. nlm.nih.gov/

```{r echo=FALSE, message=FALSE, warning=FALSE}

# get_cid(query, from = "name", first = FALSE, verbose = TRUE, arg = NULL)

comp <- c('Triclosan', 'Aspirin') 
get_cid(comp)
# from = 'name'(default),'cid','sid','aid','smiles', 'inchi', 'inchikey'

pc_prop(5564, properties = NULL, verbose = TRUE)


pc_synonyms('Aspirin') 
pc_synonyms(c('Aspirin', 'Triclosan')) 
pc_synonyms(5564, from = 'cid') 
# from = 'name'(default),'cid','sid','aid','smiles', 'inchi', 'inchikey'



```


ETOX: Information System Ecotoxicology and Environmental Quality Targets 
https:// webetox.uba.de/webETOX/index.do 

```{r echo=FALSE, message=FALSE, warning=FALSE}

comps <- c('Triclosan','Glyphosate', 'DEET') 
get_etoxid(comps, match = 'all')

ids <- c("20179", "9051", "2001")
etox_basic(ids)

comp <- c('Triclosan', 'Aspirin') # nefunguje
etox_basic(comp)


id <- get_etoxid("fluazinam", match = 'best') 
etox_tests(id)
etox_basic("98976")


```


Wikidata Item ID

```{r echo=FALSE, message=FALSE, warning=FALSE}

get_wdid('Triclosan', language = 'de') 
get_wdid('DDT') 
get_wdid('DDT', match = 'all')
# match = c("best", "first", "all", "ask", "na")

comps <- c('Triclosan', 'Glyphosate') 
get_wdid(comps)

id <- c("Q408646")
wd_ident(id, verbose = TRUE)
# 'smiles', 'cas', 'cid', 'einecs', 'csid', 'inchi', 'inchikey', 'drugbank', 'zvg', 'chebi', 'chembl', 'unii' and source_url

```


Flavor percepts 
http://www.flavornet.org

```{r echo=FALSE, message=FALSE, warning=FALSE}

fn_percept("123-32-0", verbose = TRUE)

CASs <- c("75-07-0", "64-17-5", "109-66-0", "78-94-4", "78-93-3") 
fn_percept(CASs, verbose = TRUE)

```


ChemIDPlus
http://chem.sis.nlm.nih.gov/chemidplus
http://cts.fiehnlab.ucdavis.edu/

```{r echo=FALSE, message=FALSE, warning=FALSE}

library(webchem)

ci_query('WSFSSNUMVMOOMR-UHFFFAOYSA-N', from ='inchikey')

y2 <- ci_query('WSFSSNUMVMOOMR-UHFFFAOYSA-N', from ='inchikey')
y2[[1]]$name

y2 <- ci_query('50-00-0', from ='rn')
y2[[1]]$name

comps <- c("50-00-0", "64-17-5")
ci_query(comps, from = "rn")

y2 <- ci_query('50-00-0', from = 'rn') 
y2[['50-00-0']]$inchikey
y2[['50-00-0']]$name
y2[['50-00-0']]$physprop
y2[['50-00-0']]$smiles
y2[['50-00-0']]$cas
y2[['50-00-0']]$synonyms
y2[['50-00-0']]$toxicity

y1 <- ci_query('50-00-0', from ='rn')
y1[['50-00-0']]$name
# extract log-P
sapply(y1, function(y){if (length(y) == 1 && is.na(y))
  return(NA)
  y$physprop$Value[y$physprop$`Physical Property`=='log P (octanol-water)']})

```


Query the OPSIN (Open Parser for Systematic IUPAC nomenclature) web service 
http://opsin.ch.cam.ac.uk/instructions.html

```{r echo=FALSE, message=FALSE, warning=FALSE}

library(webchem)

opsin_query('Cyclopropane', verbose = TRUE) 

opsin_query(c('Cyclopropane', 'Octane'), verbose = TRUE) 

```


Acute toxicity data from U.S. EPA ECOTOX

```{r echo=FALSE, message=FALSE, warning=FALSE}

library(webchem)

lc50
lc50[,1]

tnm = "67485-29-4"
nam = cir_query(tnm, 'names', first = FALSE)
lc50[which(lc50[,1]==tnm),2]

```



```{r echo=FALSE, message=FALSE, warning=FALSE}

library(PesticideLoadIndicator)

products.path()
products = products.load()
check_products_column_names(products)

substances = substances.load()

compute_pesticide_load_indicator(substances, products)


# Organic plant protection products in the river Jagst (Germany) in 2013
library(webchem)
jagst
unique(jagst[,"substance"])


library(ChemmineR)
pubchemSmilesSearch(smile)


library(CHNOSZ)
iCH <- info("SO2")
info(iCH)

```


```{r echo=FALSE, message=FALSE, warning=FALSE}

# library(rJava)
library(rcdk)

formula <- get.formula('NH4', charge = 1)
formula
formula@mass
formula@charge
formula@isotopes
formula@string


anle138b = parse.smiles("C1OC2=C(O1)C=C(C=C2)C3=CC(=NN3)C4=CC(=CC=C4)Br")[[1]]
anle138b = parse.smiles("c1ccccc1CC(=O)C(N)CC1CCCCOC1")[[1]]


get.depictor(width = 500, height = 500, zoom = 1.3, style = "cow", annotate = "off", abbr = "on", suppressh = TRUE, showTitle = FALSE, smaLimit = 100, sma = NULL) 

rcdkplot = function(molecule){
  par(mar=c(0,0,0,0)) # set margins to zero since this isn't a real plot
  temp1 = view.image.2d(molecule, depictor = NULL) # get Java representation into an image matrix. set number of pixels you want horiz and vertical
  plot(NA,NA,xlim=c(1,10),ylim=c(1,10),xaxt='n',yaxt='n',xlab='',ylab='') # create an empty plot
  rasterImage(temp1,1,1,10,10) # boundaries of raster: xmin, ymin, xmax, ymax. here i set them equal to plot boundaries
}
rcdkplot(anle138b)


todepict <- function(mol,pathsd){# raalizadeh, https://github.com/CDK-R/cdkr/issues/61
  result = tryCatch({
    factory <- .jnew("org.openscience.cdk.depict.DepictionGenerator")$withAtomColors()
    factory$withSize(1000,1000)#$getStyle("cow")
    temp1 <- paste0(pathsd)
    result<-factory$depict(mol)$writeTo(temp1)
  }, warning = function(w) {
    result=NULL
  }, error = function(e) {
    result=NULL
  })
  return(result)
}

library(MSbox)
smile <- as.character(describe('camptothecin', "smiles", info = FALSE) )
mol<-parse.smiles(smile)[[1]]

todepict(mol,'c:\\Users\\lubop\\Dropbox\\kursR\\camptothecin.png')

```





```{r}


as.character(3.14)
as.character(pi)

data <- c(-11, 21, 1.5, -31)
as.character(data)


## number of strings
length("BaCrO4")
length("How many characters?")
length(c("How", "many", "characters?"))

## number of charaters
nchar("BaCrO4")
nchar("How many characters?")
nchar(c("How", "many", "characters?"))

library(stringr)
str_length("BaCrO4")
str_length("How many characters?")
str_length(c("How", "many", "characters?"))

some_text = c("one", "two", "three", NA, "five")
str_length(some_text)
nchar(some_text)

some_factor = factor(c(1, 1, 1, 2, 2, 2), labels = c("good", "bad"))
some_factor
str_length(some_factor)
nchar(some_factor)


# Usporadani

set11 = c("today", "produced", "example", "beautiful", "a", "nicely")
# sort (decreasing order)
sort(set11)
# sort (increasing order)
sort(set11, decreasing = TRUE)


library(stringi)
stri_reverse("dna")
stri_reverse(set11)


### Spojovani retezcu

toString(17.04)
toString(c(17.04, 1978))
toString(c("Bonjour", 123, TRUE, NA, log(exp(1))))


## paste

paste("This is",  "out of",   "examples.")
paste0("This is",  "out of",  "examples.") 
paste0("This is",  " out of",  " examples.")

a <- "acetic"
b <- "acid"
c <- "anhydride"

d1 <- paste(a, b, c); d1
d2 <- paste(a, b, c, sep = "-"); d2

paste("I", "love", "R", sep = "-")


str <- paste(c(1:3), "4", sep = ":")
print (str)

str <- paste(c(1:4), c(5:8), sep = "--")
print (str)

paste("X", 1:5, sep = ".")

paste(1:3, c("!", "?", "+"))
paste(1:3, c("!", "?", "+"), sep = "")
paste0(1:3, c("!", "?", "+"))
paste(1:3, c("!", "?", "+"), sep = "", collapse = "")
paste0(1:3, c("!", "?", "+"), collapse = "")

paste("The value of pi is", round(pi,3), "and value of e is", round(exp(1),3),".")


df <- data.frame(cation=c('sodium','mercury','iron','calcium'),
                 anion=c('acetate','sulphate','dioxide','oxalate'),
                 purity=c(0.99, 0.9, 0.999, 0.985))
df
df$name = paste(df$cation, df$anion)
df

library(stringr)
str_c("May", "The", "Force", "Be", "With", "You")


library(stringr)
str_c("May", "The", "Force", NULL, "Be", "With", "You", character(0))
paste("May", "The", "Force", NULL, "Be", "With", "You", character(0))

str_c("May", "The", "Force", "Be", "With", "You", sep = "_")

# str_join("May", "The", "Force", "Be", "With", "You", sep = "-") 
# analogicka fce k predchozi


## cat - pouze vypisuje retezec

cat("learn", "code", "tech", sep = ":")
str <- cat("learn", "code", "tech", sep = ":") # nelze ulozit do promenne
print (str) 

my_string = c("learn", "code", "tech")
cat(my_string, "with R")
cat(my_string, "with R", sep = " =) ")

cat(1:10, sep = "-")
cat(month.name[1:4], sep = " ")

cat(c(1:5), file ='sample.txt')
cat(my_string, "with R", file = "output.txt")
cat(11:20, sep = '\n', file = 'temp.csv')
readLines('temp.csv') # read the file temp.csv

cat("The value of pi is", round(pi,3), "and value of e is", round(exp(1),3),".")


## print - vypisuje vsechny formaty

print(df)
df

my_value <- 8235.675324 
my_value
print(my_value) 
print(my_value, digits = 5) 

print(c("learn", "code", "tech"))
paste(c("learn", "code", "tech"))
paste(c("learn", "code", "tech"), collapse=" ")
cat(c("learn", "code", "tech"))

my_string <- "This is \nthe example string" 
print(my_string)  
cat(my_string) 


### 

library(stringr)

str_dup("hola", 3)
str_dup("adios", 1:3)

words = c("lorem", "ipsum", "dolor", "sit", "amet")
str_dup(words, 2)
str_dup(words, 1:5)


####

format(c("A", "BB", "CCC"), width = 5, justify = "centre")
format(c("A", "BB", "CCC"), width = 5, justify = "left")
format(c("A", "BB", "CCC"), width = 5, justify = "right")
format(c("A", "BB", "CCC"), width = 5, justify = "none")

library(stringr)
str_pad("hola", width = 7)
str_pad("adios", width = 7, side = "both")
str_pad("hashtag", width = 8, pad = "#")
str_pad("hashtag", width = 9, side = "both", pad = "-")


##### editace ciselnych retezcu

## sprintf

# '%f' indicates 'fixed point' decimal notation
sprintf("%f", pi)
sprintf("%f", 123.45)
sprintf("%f", 123.456789)
# decimal notation with 3 decimal digits
sprintf("%.3f", pi)
sprintf("%.3f", 123.456789)
# 1 integer and 0 decimal digits
sprintf("%1.0f", pi)
sprintf("%1.0f", 123.456789)
# decimal notation with 3 decimal digits
sprintf("%5.1f", pi)
sprintf("%05.1f", pi)
sprintf("%6.1f", 123.456789)
sprintf("%06.1f", 123.456789)
# print with sign (positive)
sprintf("%+f", pi)
sprintf("%+f", 123.456789)
# prefix a space
sprintf("% f", pi)
sprintf("% f", 123.456789)
# left adjustment
sprintf("%-10f", pi)
sprintf("%-10f", 123.456)
# exponential decimal notation 'e'
sprintf("%e", pi)
sprintf("%e", 123.456789)
# exponential decimal notation 'E'
sprintf("%E", pi)
sprintf("%E", 123.456789)
# number of significant digits (6 by default)
sprintf("%g", pi)
sprintf("%g", 123.456789)


## format

format(pi)
format(123.45)
format(123.456789)

format(123.45, nsmall = 5)
format(12.3456789, nsmall=2)
format(12.3456789, nsmall=7)
format(12.3, nsmall=3)

format(12.3456789, digits=2)
format(12.3456789, digits=5)
format(c(6, 13.1), digits = 2)

format(12.3456789, digits=5, nsmall = 6)
format(c(6, 13.1), digits = 2, nsmall = 2)

format(1/1:5, digits = 2)
format(format(1/1:5, digits = 2), width = 6, justify = "centre")


format(12345678, big.mark = ",") # oddeleni tisicu
format(1230, big.mark = ",")


## uvozovky ve vypisu retezce

my_string = "programming with data is fun"
print(my_string)
print(my_string, quote = FALSE)

noquote(my_string)

no_quotes = noquote(c("some", "quoted", "text", "!%^(&="))
no_quotes
no_quotes[2:3]

noquote(paste("I", "love", "R", sep = "-"))
noquote(cat("The value of pi is", round(pi,3), "and value of e is", round(exp(1),3),".")
)


dQuote(my_string)
sQuote(my_string)

x <- "2020-05-29 19:18:05"
dQuote(x)
sQuote(x)


########

substr(month.name, 1, 3)

substring(month.name, 1, 3)

strtrim(month.name, 3)


rs <- ("This is First R String Example")
strsplit(rs, split = " ")

rs <- ("This&is&First&R&String&Example")
strsplit(rs, split = "&")

a <- "Alabama-Alaska-Arizona-Arkansas-California"
strsplit(a, split = "-")

str = "Splitting sentence into words"
strsplit(str, " ")
unlist(strsplit(str, " "))


rs <- ("C21H22N2O2") # strychnin

strsplit(rs, split = "[0-9]+")[[1]]

strsplit(rs, split = "[A-Z]+")[[1]][-1]
strsplit(rs, "\\D+")[[1]][-1]
regmatches(rs, gregexpr("[[:digit:]]+", rs))
library(stringr)
str_extract_all(rs,"[0-9]+")[[1]]
library(strex)
str_extract_numbers(rs,decimals = FALSE)

rs <- ("C21H22N2O2")
strsplit(rs, split = "")

string_date<-c("2-07-2020","5-07-2020","6-07-2020",
               "7-07-2020","8-07-2020")
ssp = strsplit(string_date,split = "-"); ssp


# extract 'bcd'
substr("abcdef", start=2, stop=4)

substring("ABCDEF", 2, 4)

# extract each letter
substring("ABCDEF", 1:6, 1:6)


library(stringr)
lorem = "Lorem Ipsum"
substring(lorem, first = 1, last = 5)
str_sub(lorem, start = 1, end = 5)

str_sub("adios", 1:3)

resto = c("brasserie", "bistrot", "creperie", "bouchon")
substring(resto, first = -4, last = -1)
str_sub(resto, start = -4, end = -1)

str_sub(lorem, seq_len(nchar(lorem)))
substring(lorem, seq_len(nchar(lorem)))

str_sub(lorem,-2) 


### orezani mezer na koncich retezce

trimws(" This has trailing spaces.  ")

bad_text = c("This", " example ", "has several   ", "   whitespaces ")
trimws(bad_text)
library(stringr)
str_trim(bad_text, side = "left")
str_trim(bad_text, side = "right")
str_trim(bad_text, side = "both")


## replace
chartr(old = "All", new = "aLL", "All ChaRacterS in Upper Case") 
chartr("a", "A", "This is a boring string")
chartr("a", "0", "This is a bad example")

crazy = c("Here's to the crazy ones", "The misfits", "The rebels")
chartr("aei", "#!?", crazy)


x = c("may", "the", "force", "be", "with", "you")
substr(x, 2, 2) <- "#"
x
y = c("may", "the", "force", "be", "with", "you")
substr(y, 2, 3) <- ":)"
y

z = c("may", "the", "force", "be", "with", "you")
substr(z, 2, 3) <- c("#", "@")
z

text = c("more", "emotions", "are", "better", "than", "less")
substring(text, 1:3) <- c(" ", "zzz")
text


library(stringr)
lorem = "Lorem Ipsum"
str_sub(lorem, -1) <- "Nullam"
lorem

lorem = "Lorem Ipsum"
str_sub(lorem, 1, 5) <- "Nullam"
lorem

lorem = "Lorem Ipsum"
str_sub(lorem, c(1, 7), c(5, 8)) <- c("Nullam", "Enim")
lorem


## to lower case
tolower("BaCrO4")
tolower(c("aLL ChaRacterS in LoweR caSe", "ABCDE"))
casefold("aLL ChaRacterS in LoweR caSe")

## to upper case
toupper("BaCrO4")
toupper(c("All ChaRacterS in Upper Case", "abcde"))
casefold("All ChaRacterS in Upper Case", upper = TRUE)


### filtrovani

startsWith(month.name, "J")
endsWith(month.name, "ember")

myStrings <- paste(1:3, month.name, sep = ". ")
myStrings
# Is a pattern present (returns a logical vector)?
grepl("ember", myStrings)
# In which elements is a pattern present (returns indices)?
grep("ember", myStrings)
# In which elements is a pattern present (returns the values)?
grep("ember", myStrings, value = TRUE)

x1<-c("R is a programming language and programming software environment",
      "R is freely available under the GNU General Public License",
      "This programming language was named R")
grep("programming",x1,fixed=TRUE)


# Srovnani 2 retezcu
message1 <- "Pro"
message2 <- "Pro"
message3 <- "pRO"
message1 == message2
message1 == message3

# Hledani retezce v jinem retezci
str <- "Hello World!"
grepl("H", str)
grepl("Hello", str)
grepl("X", str)
grepl(message1, message2)
grepl(message1, message3)

identical(message1, message2)
identical(message1, message3)
identical(tolower(message1), tolower(message3))

message1[message1 %in% message2]
message1[message1 %in% message3]  
message1[tolower(message1) %in% tolower(message3)] 

vector1 <- c("hey", "hello", "greetings")
vector2 <- c("hey", "hello", "hi")
vector1[vector1 %in% vector2]


###

library(stringr)

change = c("Be the change", "you want to be")
# extract first word
word(change, 1)
# extract second word
word(change, 2)
# extract last word
word(change, -1)
# extract all but the first words
word(change, 2, -1)

word(change,start=1,end=2,sep=fixed(" "))


data <-  c('Ab_Cd-001234.txt','Ab_Cd-001234.txt')

gsub('.*-([0-9]+).*','\\1','Ab_Cd-001234.txt')
x <- c('Ab_Cd-001234.txt','Ab_Cd-001234.txt')
sub('.*-([0-9]+).*','\\1',x)

library(stringr)
regexp <- "[[:digit:]]+"
str_extract(data, regexp)

library(qdap)
genXtract("Ab_Cd-001234.txt", "-", ".txt")
x <- c('Ab_Cd-001234.txt','Ab_Cd-001234.txt')
genXtract(x, "-", ".txt")

library(tools)
sub(".*-", "", file_path_sans_ext(x))

library(gsubfn)
strapplyc(x, "-(\\d+)\\.", simplify = TRUE)
strapply(x, "-(\\d+)\\.", as.numeric, simplify = TRUE)


x <- c("a very nice character string")  
library(stringr)
str_replace(x, "c", "xxx")
str_replace_all(x, "c", "xxx")

x <- "aaabbb" 
sub("a", "c", x)  
gsub("a", "c", x)
sub("a|b", "c", x)
gsub("a|b", "c", x)  

x <- c("d", "a", "c", "abba") 
grep("a", x)
grepl("a", x)
grep("a|c", x)
grepl("a|c", x)

regexpr("a", x)
gregexpr("a", x)
regexec("a", x) 

x <- "example_xxx_string"
library(stringr)
str_sub(string = x, start = 8, end = 12)
str_sub(string = x, start = 8, end = 12) <- " character "  # Replace substring
x  

x <- "xxxxyxxyxaaaaaay"
x 
sub("y", "NEW", x) 
gsub("y", "NEW", x)

library(stringr)
str_replace(x, "y", "NEW")
str_replace_all(x, "y", "NEW")

```


Kvadraticke a kubicke rovnice


Velikost výslednice dvou navzajem kolmých sil je 34 N. Jaká je velikost skládaných sil, je-li jedna z nich o 14 N větší než druha?

```{r echo=FALSE, message=FALSE, warning=FALSE}

# Pythagorova veta: x^2 + (x + 14)^2 = 34^2      
library(Ryacas)
eq <- "x^2 + (x + 14)^2 - 34^2" 
yac_str(paste0("Simplify(", eq, ")"))  # zjednodusení výrazu

# diskriminant
dc = c(1,14,-480)
D = dc[2]^2 - 4*dc[1]*dc[3]
if (D == 0) {cat("Kvadraticka rovnice ma dva sobe rovne realne koreny (dvojnasobny koren).")}
if (D > 0) {cat("Kvadraticka rovnice ma dva ruzne realne koreny.")}
if (D < 0) {cat("Kvadraticka rovnice nema zadny koren v oboru realnych cisel. V oboru komplexnich cisel ma dva imaginarni komplexne sdruzene koreny.")}

# Descartes rule
sum(diff(sign(dc)) != 0)
cat("Pocet kladnych korenu:", sum(diff(sign(dc)) != 0)) # pocet kladnych korenu

library(sfsmisc)
nr.sign.chg(dc)
cat("Pocet kladnych korenu:", nr.sign.chg(dc)) # pocet kladnych korenu


fun <- function (x) {x^2 + (x + 14)^2 - 34^2}
uniroot(fun, c(-1, 0),extendInt = "yes", tol = 1e-9)  # base
uniroot(fun, c(0, 1),extendInt = "yes", tol = 1e-9)
# uniroot(fun, c(-1, 1),extendInt = "yes", tol = 1e-9)
F1 <- uniroot(fun, c(0, 100),extendInt = "yes", tol = 1e-9) 
F1$root

fun <- function(x){x^2 + 14*x - 480}
uniroot(fun, c(-1, 0),extendInt = "yes", tol = 1e-9)  # base
uniroot(fun, c(0, 1),extendInt = "yes", tol = 1e-9)
F1 <- uniroot(fun, c(0, 100),extendInt = "yes", tol = 1e-9)
F1$root 


rr = polyroot(c(-480, 14, 1)) # base
Re(rr)


library(pracma)
rr = roots(c(1, 14, -480))
rr

## graficke reseni
xx = seq(-50,50,1)
yy = abs(xx^2 + (xx + 14)^2 - 34^2)
plot(xx,yy,type="l")
abline(h=0,col=2)
xx[which(yy==0)]
xx[yy==0]

## graficke reseni
xx = seq(-50,50,1)
yy = xx^2
zz = -14*xx + 480
plot(xx,yy,type="l")
abline(480,-14,col=2)

plot(xx,yy,type="l",xlim = c(10,20),ylim=c(0,500))
abline(480,-14,col=2)


```


Jake pH má roztok kyseliny mravenčí o koncentraci 8.5 x 10-4 mol/l?

```{r echo=FALSE, message=FALSE, warning=FALSE}

pKA = 3.752
KA = 10^-pKA; KA
Kw = 10^-14
cA = 8.5e-4 # [mol/l ] 


# H = sqrt(KA*cA)
H <- sqrt(KA*cA)
pH = -log10(H); pH 


# [H+]^2 + KA*[H+] + KA*cA = 0
CE = c(1,KA,-KA*cA)
fun <- function (x) CE[1]*x^2 + CE[2]*x + CE[3]
uniroot(fun, c(-1e-1, 0),tol = 1e-9)
uniroot(fun, c(0, 1e-1),tol = 1e-9)
H <- uniroot(fun, c(0, 1e-1),tol = 1e-9)$root  # base
pH = -log10(H); pH

library(rootSolve)
rootSolve::uniroot.all(fun, c(-1e-1, 0), tol = 1e-9)
rootSolve::uniroot.all(fun, c(0, 1e-1), tol = 1e-9)
H <- rootSolve::uniroot.all(fun, c(-1e-1, 1e-1), tol = 1e-9)
pH = -log10(H); pH 

library(Rmpfr)
Rmpfr::unirootR(fun, lower=-1e-1, upper=0, tol = 1e-9)
Rmpfr::unirootR(fun, lower=0, upper=1e-1, tol = 1e-9)
H <- Rmpfr::unirootR(fun, lower=0, upper=1e-1, tol = 1e-9)$root
pH = -log10(H); pH 



# [H+]^3 + KA*[H+]^2 - [H+]*(KA*cA + Kw) - KA*Kw = 0
CE = c(1,KA,-(KA*cA + Kw),-KA*Kw)

library(RConics) 
x0 = cubic(CE); x0
H = Re(x0[which(Im(x0)==0)])
H = Re(x0[which(Re(x0)>=0)])
pH = -log10(H); pH 


fun <- function (x) CE[1]*x^3 + CE[2]*x^2 + CE[3]*x + CE[4]
uniroot(fun, c(-1e-1,0),tol = 1e-9)
uniroot(fun, c(0, 1e-1),tol = 1e-9)
H <- uniroot(fun, c(0, 1e-1),tol = 1e-9)$root  # base
pH = -log10(H); pH 


library(rootSolve)
rootSolve::uniroot.all(fun, c(-1e-1, 0),tol = 1e-9)
rootSolve::uniroot.all(fun, c(0,1e-1),tol = 1e-9)
H <- rootSolve::uniroot.all(fun, c(-1e-1, 1e-1),tol = 1e-9)
pH = -log10(H); pH 


library(Rmpfr)
Rmpfr::unirootR(fun, lower=-1e-1, upper=0, tol = 1e-9)
Rmpfr::unirootR(fun, lower=0, upper=1e-1, tol = 1e-9)
H <- Rmpfr::unirootR(fun, lower=0, upper=1e-1, tol = 1e-9)$root
pH = -log10(H); pH 

```


Tlakova lahev s oxidem uhlicitym obsahuje 10.0 kg plynu. Jaký objem zaujíma stlaceny plyn, kdyz pri teplote 30 °C je tlak v lahvi 13.17e6 Pa? Vypocet provedte pomoci van der Waalsovy rovnice.

```{r echo=FALSE, message=FALSE, warning=FALSE}

# (p + a/Vm^2)(Vm - b) = R*T     
# [Vm = 0.075 m3/kmol, n = 0.2273 kmol, V = 0.0171 m3]

library(measurements)
p = 13.17e6 # [Pa]
m = conv_unit(10.0, from="kg", to="g")
t = conv_unit(30, from="C", to="K") 
R = 8.3141  # [J / mol K]
R = R*1000  # [J / kmol K]
Mr = 44.01  # [g/mol]
n = m/Mr    # [mol]
n = n/100   # [kmol]


# vypocet pro idealni plyn
# p*Vm - R*T = 0  
Vm = R*t/p
V = Vm*n; V  # [m3]


# vypocet pro realny plyn
a = 0.365e6 # [m6 Pa / kmol2]
b = 0.0428  # [m3 / kmol]
# Vm**3 - (b + R*t/p)*Vm**2 + (a/p)*Vm - a*b/p 

# realne i komplexni koreny
library(RConics) 
CE = c(1,-(b + R*t/p),a/p,-(a*b/p))
x0 = cubic(CE); x0
Vm = Re(x0[which(Im(x0)==0)])  # [m3 / kmol]
Vm
V = Vm*n; V  # [m3]

# jen realne koreny
fun <- function (x) CE[1]*x^3 + CE[2]*x^2 + CE[3]*x + CE[4]
#curve(fun(x),-4,4)
#abline(h = 0, lty = 3)
Vm <- uniroot(fun, c(-4, 4))$root  # base
V = Vm*n; V  # [m3]

library(rootSolve)
Vm <- rootSolve::uniroot.all(fun, c(-4, 4))
V = Vm*n; V  # [m3]

library(Rmpfr)
Vm <- Rmpfr::unirootR(fun, lower=-4, upper=4, tol = 1e-9)$root
V = Vm*n; V  # [m3]

## graficke reseni
# CE = c(1,-(b + R*t/p),a/p,-(a*b/p))
xx <- seq(-4,4, by=0.01)
yy <- CE[1]*xx^3 
zz <- -CE[2]*xx^2 - CE[3]*xx - CE[4]
plot(xx,yy,type="l", col=2)
points(xx,zz,type="l", col=4)
plot(xx, yy, type="l",col=2,xlim=c(0.05,0.1),ylim=c(0,0.001))
points(xx, zz, type="l",col=4)

```


### soustavy linearnich rovnic ###


Ze dvou slitin s 60% a 80% obsahem mědi se ma získat 40 kg slitiny se 75% obsahem mědi. Kolik kg každé slitiny je třeba použít?  [10 a 30 kg]

```{r}

library(rootSolve)
model <- function(x){
  F1 <- 0.6*x[1] + 0.8*x[2] - 30
  F2 <- x[1] + x[2] - 40
  c(F1 = F1, F2 = F2)}
ss <- multiroot(f = model, start = c(1, 1))
ss$root

### graficke reseni
# 0.6*m1 + 0.8*m2 = 40*0.75 => m1 = 40*0.75/0.6 - 0.8/0.6 * m2  => m1 = 50 - 1.33 * m2 
# m1 + m2 = 40  => m1 = 40 - m2
xx = seq(0,50,0.1)
yy = 50 - 1.33*xx
zz = 40 - xx
plot(xx, yy, type="l",col=2)
points(xx, zz, type="l",col=4)
plot(xx, yy, type="l",col=2,xlim=c(25,35),ylim=c(0,20))
points(xx, zz, type="l",col=4)

```


Do bazenu natece prutokem A za 3 h a prutokem B za 4 h celkem 2150 hl vody. Prutokem A za 4 h a prutokem B za 2 h by nateklo 1700 hl vody. Kolik hl vody natece prutokem A a kolik prutokem B za 1 hodinu?      A 250 hl, B 350 hl

```{r}

library(rootSolve)
model <- function(x){
  F1 <- 3*x[1] + 4*x[2] - 2150
  F2 <- 4*x[1] + 2*x[2] - 1700
  c(F1 = F1, F2 = F2)}
ss <- multiroot(f = model, start = c(1, 1))
ss$root

### graficke reseni
# 3*m1 + 4*m2 = 2150 => m2 = 2150/4 - 3/4 * m1  => m2 = 537.5 - 0.75 * m1
# 4*m1 + 2*m2 = 1700 => m2 = 1700/2 - 4/2 * m1 => m2 = 850 - 2 * m1
xx = seq(0,500,1)
yy = 537.5 - 0.75*xx
zz = 850 - 2*xx
plot(xx, yy, type="l",col=2)
points(xx, zz, type="l",col=4)
plot(xx, yy, type="l",col=2,xlim=c(200,300),ylim=c(300,400))
points(xx, zz, type="l",col=4)

```


Ze dvou druhu caje v cene 160 Kc a 220 Kc za 1 kg je treba pripravit 20 kg smesi v cene 205 Kc za 1 kg. Kolik kg kazdeho caje je treba smichat?   5 kg levnejsiho a 15 kg drazsiho 

```{r}

library(rootSolve)   ### opravit zadani
model <- function(x){
  F1 <- 160*x[1] + 220*x[2] - 4100
  F2 <- x[1] + x[2] - 20
  c(F1 = F1, F2 = F2)}
ss <- multiroot(f = model, start = c(1, 1))
ss$root

### graficke reseni
# 160*m1 + 220*m2 = 4100 => m1 = 4100/160 - 220/160 * m2  => m1 = 25.625 - 1.375 * m2
# m1 + m2 = 20 => m1 = 20 - m2
xx = seq(0,20,0.1)
yy = 25.625 - 1.375*xx
zz = 20 - xx
plot(xx, yy, type="l",col=2)
points(xx, zz, type="l",col=4)
plot(xx, yy, type="l",col=2,xlim=c(10,20),ylim=c(0,10))
points(xx, zz, type="l",col=4)

```


Kolik g 60% a kolik g 30% roztoku NaCl je treba smichat pri priprave 100 g 40% roztoku? 20 g 60% a a 80 g 35%

```{r}

library(rootSolve)
model <- function(x){
  F1 <- 0.6*x[1] + 0.3*x[2] - 40
  F2 <- x[1] + x[2] - 100
  c(F1 = F1, F2 = F2)}
ss <- multiroot(f = model, start = c(1, 1))
ss$root

### graficke reseni
# 0.6*m1 + 0.3*m2 = 100*0.4 => m1 = 40/0.6 - 0.3/0.6 * m2  => m1 = 66.67 - 0.5 * m2 
# m1 + m2 = 100  => m1 = 100 - m2
xx = seq(0,100,0.1)
yy = 66.67 - 0.5*xx
zz = 100 - xx
plot(xx, yy, type="l",col=2)
points(xx, zz, type="l",col=4)
plot(xx, yy, type="l",col=2,xlim=c(65,70),ylim=c(30,40))
points(xx, zz, type="l",col=4)

### matice

B = c(0.40*100,100) # [mg]
names(B) = c("60%","30%")
r1 = c(0.60,1) # [mg]
r2 = c(0.30,1) # [mg]
A = cbind(r1,r2)
colnames(A) = c("60%","30%")
rownames(A) = c("r30","r3")
det(A) # matice je regularni n = h
library(matlib)
c(R(A), R(cbind(A,B)))          # show ranks
all.equal(R(A), R(cbind(A,B)))  # consistent?
showEqn(A, B)
matlib::Solve(A, B)
limSolve::Solve(A, B)
#
library(limSolve)
G <-matrix(ncol = 2, byrow = TRUE, data = c(1, 0, 0, 1)) 
H <- c(0, 0)
ldei(A, B, G = G, H = H)$X
#
library(cmna) 
gdls(A, B, alpha = 0.05, tol = 1e-06, m = 1e+05) #  least squares with graident descent
jacobi(A, B, tol = 1e-06, maxiter = 100)  # iterativematrix
gaussseidel(A, B, tol = 1e-06, maxiter = 100) # iterativematrix
solvematrix(A, B) # refmatrix

```


Ze dvou kovu o hustotach 7.4 g/cm3 a 8.2 g/cm3 je treba pripravit 0.5 kg slitiny o hustote 7.6 g/cm3. Kolik g kazdiho z kovu je k tomu potreba? 375 g lehciho a 125 g tezsiho

```{r}

library(rootSolve)
model <- function(x){
  F1 <- 7.4*x[1] + 8.2*x[2] - 3800
  F2 <- x[1] + x[2] - 500
  c(F1 = F1, F2 = F2)}
ss <- multiroot(f = model, start = c(1, 1))
ss$root  # [kg]

### graficke reseni
# 7.4*m1 + 8.2*m2 = 0.5*7.6 => m1 = 3800/7.4 - 8.2/7.4 * m2  => m1 = 513.5 - 1.108 * m2 
# m1 + m2 = 500  => m1 = 500 - m2
xx = seq(0,500,1)
yy = 513.5 - 1.108*xx
zz = 500 - xx
plot(xx, yy, type="l",col=2)
points(xx, zz, type="l",col=4)
plot(xx, yy, type="l",col=2,xlim=c(100,150),ylim=c(350,400))
points(xx, zz, type="l",col=4)

### matice
B = c(7.6,1) # [mg]
names(B) = c("kov1","kov2")
r1 = c(7.4,1) # [mg]
r2 = c(8.2,1) # [mg]
A = cbind(r1,r2)
colnames(A) = c("kov1","kov2")
rownames(A) = c("7.4","8.2")
det(A) # matice je regularni n = h
library(matlib)
c(R(A), R(cbind(A,B)))          # show ranks
all.equal(R(A), R(cbind(A,B)))  # consistent?
showEqn(A, B)
rr = matlib::Solve(A, B)
read.table(text = rr[1], fill = TRUE)[[3]]*500 # [g]
read.table(text = rr[2], fill = TRUE)[[3]]*500 # [g]
rr = limSolve::Solve(A, B)
rr*500 # [g]
# 
library(limSolve)
G <-matrix(ncol = 2, byrow = TRUE, data = c(1, 0, 0, 1)) 
H <- c(0, 0)
rr = ldei(A, B, G = G, H = H)$X
rr*500 # [g]

```


V tepelné elektrárne mají zásobu uhlí, která vystací na 24 dní, bude-li v cinnosti pouze první blok, na 30 dní, bude-li v provozu pouze 2. blok a na 20 dní, bude-li v provozu pouze 3. blok. Na jak dloho vystací zásoba, budou-li v provozu vsechny bloky najednou?

```{r}

# x/24 + x/30 + x/20 = 1

library(Ryacas)
vr <- ysym("x/24 + x/30 + x/20 - 1") 
solve(vr, "x") 

fun <- function (x) x/24 + x/30 + x/20 - 1
uniroot(fun, c(0, 1),extendInt = "yes", tol = 1e-9)$root

```
