Buscar

resumo p3

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

############################
# APROXIMACAO DE FUNCOES
############################
#options(digits = 21)
round(((0.47*4.2)+43.25), digits = 2)
# EXPONENCIAL
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)
# LN
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
 }
}
# LOG_A(B)
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)
# RECURSIVAMENTE SEM USAR A FUNCAO JA FEITA
# SEN(X)
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
 }
}
# COS(X)
aprox_cos = function(x, delta = 0.001){
 return(aprox_sen(x + pi/2, delta))
}
############################
# RAIZES DE FUNCOES REAIS
############################
# NAO RECURSIVO
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)
# RECURSIVO
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)
# COM ARRAY
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)
 }
 }
}
# RAIZ QUADRADA
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))
}
############################
# DERIVACAO NUMERICA
############################
# DOMINIO DA FUNCAO
f = function(x){
 if(!(x < -2 | x > 1)) return(FALSE) #Fora do domínio
 else return(log(x^2 + x - 2))
}
# USANDO ISSO NA DERIVACAO
DerivadaNumerica = function(x0,f,delta = 0.001){
 h = 1
 d1 = (f(x0+h) - f(x0-h))/(2*h)
 while(!d1){ #AQUI VAI RETORNAR F SE ESTIVER FORA DO DOMINIO
 h = h/2
 d1 = (f(x0+h) - f(x0-h))/(2*h)
 }
 
 while (TRUE) {
 h = h/2
 d2 = (f(x0+h) - f(x0-h))/(2*h)
 if(abs(d1-d2) < delta) return(d2)
 d1 = d2
 }
}
DerivadaNumerica(10,f)
############################
# INTEGRACAO NUMERICA
############################
# SOMA POR RETANGULOS
soma_ratangulo = function(n,inicio,fim){
 base = fim - inicio
 acrescimo = base/n
 vet = c()
 for(i in 1:n){
 vet = c(vet,i*acrescimo)
 }
 
 soma = f(inicio)*acrescimo
 
 for(i in vet[-length(vet)]){
 altura = f(i)
 base = acrescimo
 soma = base*altura + soma
 }
 
 return(soma)
}
# INTEGRAL
IntegralDominioReal = function(a,b,f,e = 0.001){
 n = 100
 
 while(TRUE){
 d = (b-a)/n
 A_S = 0 ; A_I = 0
 
 
 x = a
 
 while(x < b){
 A_S = A_S + d*max(f(x),f(x+d))
 A_I = A_I + d*min(f(x),f(x+d))
 x = x + d
 }
 if((A_S - A_I) < 2*e) return((A_S+A_I)/2) 
 else n = n + 10
 }
} 
IntegralDominioReal(a = 0, b = 5,f)
# INTEGRAL COM RECURSAO
IntegralDominioRealRec = function(f,a,b,e = 0.001, n = 100){
 
 d = (b-a)/n
 A_S = 0 ; A_I = 0
 
 x = a
 
 while(x < b){
 A_S = A_S + d*max(f(x),f(x+d))
 A_I = A_I + d*min(f(x),f(x+d))
 x = x + d
 }
 
 if((A_S - A_I) < 2*e) return((A_S+A_I)/2)
 else return(IntegralDominioRealRec(f,a,b,e,n+10))
}
IntegralDominioRealRec(f,a = 0,b = 5)

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando