###########################################
#                                         #
#  Cvičení č. 3 - Komplexní exponenciála  #
#                                         #
###########################################

install.packages("calculus")
library("calculus")

# Definice fce taylor.sin() musí proběhnout ve třech krocích:
# Pomocí příkazu taylor() získáme v textové podobě předpis fce.
# Pomocí paste0() z něj vytvoříme kód pro definici fce.
# Pomocí příkazů eval() a parse() definici spustíme. 
taylor.sin.text<-taylor("sin(x)","x",order=6)$f
taylor.sin.func<-paste0("taylor.sin<-function(x) {",taylor.sin.text,"}")
eval(parse(text=taylor.sin.func))

# Definice proměnné x (jedna perioda v úholvé míře od minus pí do pí)

# Vykreslení do grafu společně se skutečnou funkcí sin().
plot(x,sin(x),type="l",lwd=3,col="brown")
lines(x,taylor.sin(x),lwd=3,col="forestgreen")


# Obdobně pro cos().
taylor.cos.text<-taylor("cos(x)","x",order=6)$f
taylor.cos.func<-paste0("taylor.cos<-function(x) {",taylor.cos.text,"}")
eval(parse(text=taylor.cos.func))

plot(x,cos(x),type="l",lwd=3,col="cornflowerblue")
lines(x,taylor.cos(x),lwd=3,col="gold")


# Obdobně pro exp().
taylor.exp.text<-taylor("exp(x)","x",order=6)$f
taylor.exp.func<-paste0("taylor.exp<-function(x) {",taylor.exp.text,"}")
eval(parse(text=taylor.exp.func))

plot(x,exp(x),type="l",lwd=3,col="gray")
lines(x,taylor.exp(x),lwd=3,col="violet")


# Pomocí fce taylor.exp() nadefinujeme fci taylor.exp.fi,
# která pro zadaný úhel fi vrátí hodnotu komplexní exponenciály.
taylor.exp.fi<-function(fi) {taylor.exp(1i*fi)}

# Srovnání reálné části
plot(x,Re(taylor.exp.fi(x)),type="l",lwd=3,col="cornflowerblue")
lines(x,taylor.cos(x),lwd=3,col="gold")

# Srovnání imaginární části
plot(x,Im(taylor.exp.fi(x)),type="l",lwd=3,col="brown")
lines(x,taylor.sin(x),lwd=3,col="forestgreen")







