Lista 10 Programação Estatística
1)
RaizBissecao = function(a,b,f,e){
if(f(a)*f(b) >= 0) stop("Não existe raiz no intervalo a,b")
while(TRUE){
m = (a+b)/2
if(f(m) == 0 | abs(b-m) < e) return(m)
if(f(a)*f(m) < 0){
b = m
}else{
a = m
}
}
}
RaizBissecao(0,3,f=function(x){x-1},0.000001)## [1] 0.9999997615814209
2)
RaizBissecaoRec = function(a,b,f,e){
if(f(a)*f(b) >= 0) stop("Não existe raiz no intervalo a,b")
m = (a+b)/2
if(f(m) == 0 | abs(b-m) < e) return(m)
if(f(a)*f(m) < 0) return(RaizBissecaoRec(a,m,f,e))
return(RaizBissecaoRec(m, b, f, e))
}
RaizBissecaoRec(0,3,f=function(x){x-1},0.000001)## [1] 0.9999997615814209
3)
RaizBissecaoArray = function(a,b,f,e){
if(f(a)*f(b) >= 0) stop("Não existe raiz no intervalo a,b")
aproximacoes = c()
while(TRUE){
m = (a+b)/2
if(f(m) == 0 | abs(b-m) < e) {
aproximacoes = c(aproximacoes,m)
return(aproximacoes)
}
if(f(a)*f(m) < 0){
b = m
aproximacoes = c(aproximacoes,m)
}else{
a = m
aproximacoes = c(aproximacoes,m)
}
}
}
{
saida = RaizBissecaoArray(0,3,f=function(x){x-1},0.000001)
plot(0,xlab="x",ylab="f(x)",xlim=c(0,3),ylim=c(-1,2),type="n")
grid()
abline(h=0)
abline(v=0)
curve(x-1,col="blue",add=T)
for(i in 1:length(saida)){
points(saida[i],0,col="red",pch=18,cex.lab=1)
text(saida[i],-0.2,i,col="red")
}
}RaizBissecaoArray_rec = function(a,b,f,e){
if(f(a)*f(b) >= 0) stop("Não existe raiz no intervalo a,b")
m = (a+b)/2
if(f(m) == 0 | abs(b-m) < e) return(m)
if(f(a)*f(m) < 0) return(c(m,RaizBissecaoArray_rec(a,m,f,e)))
return(c(m,RaizBissecaoArray_rec(m, b, f, e)))
}
{
saida = RaizBissecaoArray_rec(0,3,f=function(x){x-1},0.000001)
plot(0,xlab="x",ylab="f(x)",xlim=c(0,3),ylim=c(-1,2),type="n")
grid()
abline(h=0)
abline(v=0)
curve(x-1,col="blue",add=T)
for(i in 1:length(saida)){
points(saida[i],0,col="red",pch=18,cex.lab=1)
text(saida[i],-0.2,i,col="red")
}
}4)
a)
## [1] 5
## [1] -1
## [1] -5
b)
## [1] 0.86557769775390625
## [1] 0.86557769775390625
c)
raiz = RaizBissecao(a,b,f,0.00001)
{
plot(0,xlab="x",ylab="f(x)",xlim=c(-1,3),ylim=c(-2,2),type="n")
grid()
abline(h=0)
abline(v=0)
plot(f,add = T,xlim = c(-3,3))
points(RaizBissecao(a,b,f,0.00001),0,col = "red")
text(raiz,-0.2,raiz,col="red")
}#Observe que o ponto se aproxima bastante do 0 de f(x).
#Também podemos observar se o valor está correto aplicando a função no ponto encontrado.
f(raiz)## [1] 2.864966053395257e-05
5)
a)
{
plot(0, xlim = c(0, 1), ylim = c(0, 4), type = "n")
grid()
curve(1/x, add = T)
curve(exp, add= T)
}#Observe também o gráfico da função:
{
plot(0,xlab="x",ylab="f(x)",xlim=c(-10,10),ylim=c(-2,2),type="n")
grid()
abline(h=0)
abline(v=0)
plot(f,add = T,xlim = c(-10,10))
}## [1] -0.35127872929987181
## [1] 0.97554092849246787
b)
## [1] 0.56713562011718732
## [1] 0.56713562011718732
c)
raiz = RaizBissecao(a,b,f,0.00001)
{
plot(0,xlab="x",ylab="f(x)",xlim=c(-1,3),ylim=c(-2,2),type="n")
grid()
abline(h=0)
abline(v=0)
plot(f,add = T,xlim = c(-3,3))
points(RaizBissecao(a,b,f,0.00001),0,col = "red")
text(raiz,-0.2,raiz,col="red")
}#Observe que o ponto se aproxima bastante do 0 de f(x).
#Também podemos observar se o valor está correto aplicando a função no ponto encontrado.
f(raiz)## [1] -3.7371298406529974e-05
6)
b)
#Dependendo do intervalo escolhido, iremos achar uma raiz diferente, positiva ou negativa.
a = 0 ; f(a) ## [1] -3
## [1] 6
c)
## [1] 1.7320461273193359
## [1] 1.7320461273193359
d)
raiz = RaizBissecao(a,b,f,0.00001)
{
plot(0,xlab="x",ylab="f(x)",xlim=c(0,3),ylim=c(-2,2),type="n")
grid()
abline(h=0)
abline(v=0)
plot(f,add = T,xlim = c(-3,3))
points(RaizBissecao(a,b,f,0.00001),0,col = "red")
text(raiz,-0.2,raiz,col="red")
}#Observe que o ponto se aproxima bastante do 0 de f(x).
#Também podemos observar se o valor está correto aplicando a função no ponto encontrado.
f(raiz)## [1] -1.621283809072338e-05
# caso escolhessemos b = -3, observe:
raiz = RaizBissecao(a,-3,f,0.00001)
{
plot(0,xlab="x",ylab="f(x)",xlim=c(-3,0),ylim=c(-2,2),type="n")
grid()
abline(h=0)
abline(v=0)
plot(f,add = T,xlim = c(-3,3))
points(RaizBissecao(a,-3,f,0.00001),0,col = "red")
text(raiz,-0.2,raiz,col="red")
}7)
a)
#Podemos visualizar graficamente
{
plot(0,xlab="x",ylab="f(x)",xlim=c(-6,5),ylim=c(-2,2),type="n")
grid()
abline(h=0)
abline(v=0)
plot(f,add = T,xlim = c(-10,10))
}c)
## [1] -2.3333333333333375
## [1] -0.58333333333333326
## [1] -1.166666666666667
d)
## [1] -4.2618026733398438
## [1] -2.3398818969726562
## [1] 0.60167694091796875
e)
raiz2 = round(RaizBissecao(a2,b2,f,0.00001),3)
raiz1 = round(RaizBissecao(a1,b1,f,0.00001),3)
raiz3 = round(RaizBissecao(a3,b3,f,0.00001),3)
{
plot(0,xlab="x",ylab="f(x)",xlim=c(-6,5),ylim=c(-2,2),type="n")
grid()
abline(h=0)
abline(v=0)
plot(f,add = T,xlim = c(-6,5))
points(RaizBissecao(a1,b1,f,0.00001),0,col = "red")
text(raiz1,-0.2,raiz1,col="red")
points(RaizBissecao(a2,b2,f,0.00001),0,col = "red")
text(raiz2,-0.2,raiz2,col="red")
points(RaizBissecao(a3,b3,f,0.00001),0,col = "red")
text(raiz3,-0.2,raiz3,col="red")
}8)
{
plot(0,xlab="x",ylab="f(x)",xlim=c(0,4),ylim=c(-2,2),type="n")
grid()
abline(h=0)
abline(v=0)
plot(sin,add = T,xlim = c(-10,10))
}## [1] 3.141571044921875
9)
aproxRaiz = function(x0,e = 0.00000000001){
if(x0 < 0) stop("Não existe raiz de número negativo")
if(x0 == 1 | x0==0) return(x0)
if(x0 > 1) b = x0
else b = 1
return(RaizBissecao(0,b,function(x){x^2-x0},e))
}
aproxRaiz(2)## [1] 1.4142135623769718
## [1] 1.7320508075699763
## [1] 2.2360679774919845
10)
#Função da lista anterior
pol_exp_delta = function(x,delta = 0.001){
if(!is.numeric(x)) stop("x tem que ser real")
soma = 1
i = 1
while(TRUE){
incre = x^(i)/factorial(i)
if(abs(incre) < delta){
return(soma)
}else{
soma = soma + incre
}
i = i + 1
}
}
exp_raiz = function(x, e = 0.0000001){
pol_exp_delta(aproxRaiz(x,e),delta = e)
}
# Verificando com a função pronta do R
exp_raiz(3)## [1] 5.6522339753385893
## [1] 5.6522336740340915