Exercícios do Capítulo 9
#e^1 n = 4
1 + 1 + 1/factorial(2) + 1/factorial(3) + 1/factorial(4)
## [1] 2.708333
#e^3 n = 4
1 + 3 + 3^2/factorial(2) + 3^3/factorial(3) + 3^4/factorial(4)
## [1] 16.375
pol_exp = function(x,n){
if((n<0)||(n%%1 != 0)) stop("n tem que ser um natural")
if(!is.numeric(x)) stop("x tem que ser real")
soma = 1
for(i in 1:n){
soma = soma + x^(i)/factorial(i)
}
return(soma)
}
{plot(exp,-4,4)
grid()
segments(x0=0,y0=0,x1=0,y1=150,lty=2)
curve(pol_exp(x,n=2),add=T,col="violet")
curve(pol_exp(x,n=3),add=T,col="red")
curve(pol_exp(x,n=4),add=T,col="blue")
curve(pol_exp(x,n=5),add=T,col="green")}

pol_exp_delta = function(x,delta = 0.001){
if(!is.numeric(x)) stop("x tem que ser real")
soma = 1
for(i in 1:10){
soma = soma + x^(i)/factorial(i)
}
i = 11
while(TRUE){
incre = x^(i)/factorial(i)
if(abs(incre) < delta){
return(soma)
}else{
soma = soma + incre
}
i = i + 1
}
}
pol_exp_delta(1/2)
## [1] 1.648721
exp(1/2)
## [1] 1.648721
pol_exp_delta(7.3)
## [1] 1480.299
exp(7.3)
## [1] 1480.3
pol_exp_delta_n = function(x,delta = 0.001){
if(!is.numeric(x)) stop("x tem que ser real")
soma = 1
for(i in 1:10){
soma = soma + x^(i)/factorial(i)
}
i = 11
while(TRUE){
incre = x^(i)/factorial(i)
if(abs(incre) < delta){
return(list("Soma" = soma,
"Interações" = i))
}else{
soma = soma + incre
}
i = i + 1
}
}
data.frame("x" = c(1/2,7.3),
"exp" = c(exp(1/2),exp(7.3)),
"aprox_ex" = c(pol_exp_delta_n(1/2)[[1]],pol_exp_delta_n(7.3)[[1]]),
"interações" = c(pol_exp_delta_n(1/2)[[2]],pol_exp_delta_n(7.3)[[2]]))
## x exp aprox_ex interações
## 1 0.5 1.648721 1.648721 11
## 2 7.3 1480.299928 1480.298741 24
(1/10 - 1) - (1/10 -1)^2 / 2 + (1/10 -1)^3 / 3 - (1/10 - 1)^4 / 4
## [1] -1.712025
(3/5 - 1) - (3/5 -1)^2 / 2 + (3/5 -1)^3 / 3 - (3/5 -1)^4 /4
## [1] -0.5077333
(4 - 1) - (4 -1)^2 / 2 + (4 -1)^3 / 3 - (4-1)^4 / 4
## [1] -12.75
# A aproximação mais precisa é aquela que está mais próxima de x0 = 1. Então, temos mais precisão no ponto 3/5 = 0.6, comparado a 1/10 = 0.1 .
pol_ln = function(x,n){
if((n<0)||(n%%1 != 0)) stop("n tem que ser um natural")
if(!is.numeric(x)) stop("x tem que ser real")
soma = 0
for(i in 0:n){
soma = soma + (-1)^i * (((x-1)^(i+1))/(i+1))
}
return(soma)
}
{plot(log,0,4)
grid()
segments(x0=1,y0=-4,x1=1,y1=10,lty=2)
curve(pol_ln(x,n=2),add=T,col="violet")
curve(pol_ln(x,n=3),add=T,col="red")
curve(pol_ln(x,n=4),add=T,col="blue")
curve(pol_ln(x,n=5),add=T,col="green")}

pol_ln_delta = function(x,delta = 0.001){
if(x<=0) stop("X precisa ser maior que 0")
if(!is.numeric(x)) stop("x tem que ser real")
if(x>=2) return(-pol_ln_delta(1/x,delta))
soma = 0
for(i in 0:10){
soma = soma + ((-1)^i) * (((x-1)^(i+1))/(i+1))
}
i = 11
while(TRUE){
incre = ((-1)^i) * (((x-1)^(i+1))/(i+1))
if(abs(incre) < delta){
return(soma)
}else{
soma = soma + incre
}
i = i + 1
}
}
data.frame("x" = c(0.1,2,10,3.8),
"ln(x)" = c(log(0.1),log(2),log(10),log(3.8)),
"aprox_ln(x)" = c(pol_ln_delta(0.1),pol_ln_delta(2),
pol_ln_delta(10),pol_ln_delta(3.8)))
## x ln.x. aprox_ln.x.
## 1 0.1 -2.3025851 -2.2949338
## 2 2.0 0.6931472 0.6931092
## 3 10.0 2.3025851 2.2949338
## 4 3.8 1.3350011 1.3317614
aprox_ln_base = function(x,b,delta = 0.001){
return(pol_ln_delta(x,delta)/pol_ln_delta(b,delta))
}
aprox_ln_base(100,10)
## [1] 1.976117
aprox_sen = function(x,delta = 0.001){
if(x > pi) return(aprox_sen(x - 2*pi, delta))
if(x < -pi) return(aprox_sen(x + 2*pi, delta))
soma = 0
for(i in 0:10){
soma = soma + ((-1)^(i))*(x^(2*i + 1))/factorial(2*i + 1)
}
i = 11
while(TRUE){
incre = ((-1)^(i))*(x^(2*i + 1))/factorial(2*i + 1)
if(abs(incre) < delta){
return(soma)
}else{
soma = soma + incre
}
i = i + 1
}
}
data.frame("x" = c(2,25,50,pi/3),
"sen(x)" = c(sin(2),sin(25),sin(50),sin(pi/3)),
"aprox_sen(x)" = c(aprox_sen(2),aprox_sen(25),aprox_sen(50),aprox_sen(pi/3)))
## x sen.x. aprox_sen.x.
## 1 2.000000 0.9092974 0.9092974
## 2 25.000000 -0.1323518 -0.1323518
## 3 50.000000 -0.2623749 -0.2623749
## 4 1.047198 0.8660254 0.8660254
aprox_cos = function(x, delta = 0.001){
return(aprox_sen(x + pi/2, delta))
}
data.frame("x" = c(1,54,45,pi/3),
"cos(x)" = c(cos(1),cos(54),cos(45),cos(pi/3)),
"aprox_cos(x)" = c(aprox_cos(1),aprox_cos(54),aprox_cos(45),aprox_cos(pi/3)))
## x cos.x. aprox_cos.x.
## 1 1.000000 0.5403023 0.5403023
## 2 54.000000 -0.8293098 -0.8293098
## 3 45.000000 0.5253220 0.5253220
## 4 1.047198 0.5000000 0.5000000