Você está na página 1de 3

#################################################################################

################## Resolu��o de equa��es ######################################


#################################################################################

####### M�TODO DA BISSEC��O (OU DICOTOMIA)

Bissec = function(f,m,M,n_max,prec)
{

Tab = NULL
iter = 0

alpha = 0.5*(m+M)

while((f(alpha-prec)*f(alpha+prec)) > 0 && iter < n_max)


{
alpha = 0.5*(m+M)
iter = iter + 1
linha = c(iter, m,M, alpha,f(alpha))

if(f(alpha)*f(m) < 0 || f(alpha)*f(m) == 0 ) # verifica se a ra�z est� no


intervalo [m, mid]
{
M = alpha
}
if(f(alpha)*f(m) > 0) # verifica se a ra�z est� no intervalo [mid, M]
{
m = alpha
}

Tab = rbind(Tab,linha)

}
Tab = as.matrix(Tab)
colnames(Tab, do.NULL = TRUE, prefix = "col")
colnames(Tab) <- c("NumIter","m","M", "alpha","f(alpha)")

return(Tab)
}

####### M�TODO DA FALSA POSI��O

# Nesse m�todo, a nova aproxima��o escolhida alpha � obtida pela intersec��o da


reta que liga os pontos
# (m,f(m)) e (M,f(M)) e o eixo x (reta de equa��o y = 0).

FalsaPosit = function(f,m,M,n_max,prec)
{

Tab = NULL
alpha = 0.5*(m+M)
iter = 0

while((f(alpha-prec)*f(alpha+prec)) > 0 && iter < n_max) # o crit�rio de parada


com base no tamanho de intervalo de busca
{ # n�o funciona bem para esse m�todo, uma
vez que o ponto alpha escolhido n�o necessariamente
# � o ponto m�dio do intervalo. Dessa
forma, n�o h� como garantir que a dist�ncia entre m e M
# fique cada vez menor.

alpha = (m*f(M) - M*f(m))/(f(M) - f(m))


iter = iter+1

linha = c(iter,m,M, alpha,f(alpha))

if(f(alpha)*f(m) < 0) # verifica se a ra�z est� no intervalo [m, alpha]


{
M = alpha
}
if(f(alpha)*f(m) > 0) # verifica se a ra�z est� no intervalo [alpha, M]
{
m = alpha
}

Tab = rbind(Tab,linha)

}
Tab = as.matrix(Tab)
colnames(Tab, do.NULL = TRUE, prefix = "col")
colnames(Tab) <- c("NumIter","m","M", "alpha","f(alpha)")

return(Tab)

#################################################################################
################################## Testes ######################################
#################################################################################

# TESTE 4

f = function(x){return(3*x^3-2*x^2+3*x-2)}

prec = 10^-6
m = 0.6
M = 1
n_max = 1000

Bissec(f,m,M,n_max,prec)
FalsaPosit(f,m,M,n_max,prec)

# TESTE 5

m = -7
M = 5
prec = 10^-6
Bissec(f,m,M,n_max,prec)
FalsaPosit(f,m,M,n_max,prec)

# TESTE 6
f = function(x){return(sin(x)-cos(x))}

prec = 10^-6
m = 0
M = 2

Bissec(f,m,M,n_max,prec)
FalsaPosit(f,m,M,n_max,prec)

# observe as diferen�as entre as performances dos m�todos nos Testes 5 e 6

#################################################################################
############################## Fim Testes ######################################
#################################################################################

Você também pode gostar