Olá, comecei hoje com o python. Estou fazendo um algoritmo que retorna a raiz de um polinômio (2x -4) pelo método da bissecção:
Os métodos que vou utilizar na função principal (bisseccao)
def temRaiz(intervalo) :
if ((2*intervalo[0] - 4)*(2*intervalo[1] - 4) < 0):
return True
else:
return False
Os métodos abaixo são para diminuir o intervalo pela metade, deslocando apenas um ponto.
def cortaIntervaloA(intervalo, ptmedio) :
intervalo[0] = ptmedio
return intervalo
def cortaIntervaloB(intervalo, ptmedio) :
intervalo[1] = ptmedio
return intervalo
Aqui eu recebo os valores do intervalo inicial e logo após a função principal.
intervalo = []
intervalo.append(float(input('Digite o primeiro valor do intervalo:')))
intervalo.append(float(input('Digite o segundo valor do interalo:')))
def bisseccao(intervalo) :
while abs(intervalo[1]-intervalo[0]) > 0:
acumuladorMedia = (intervalo[1]+intervalo[0])/2
print(intervalo)
if temRaiz(cortaIntervaloB(intervalo,acumuladorMedia)):
cortaIntervaloB(intervalo,acumuladorMedia)
else:
print(intervalo)
cortaIntervaloA(intervalo,acumuladorMedia)
print(intervalo)
return acumuladorMedia
print(bisseccao(intervalo))
O problema parece estar na estrutura if, a instrução nela é executada mesmo quando a condição retorna False e logo após o else também é executado. (Coloquei as funções print para ajudar a identificar onde estava o erro)
Exemplo (input: 1,6)
[1.0, 6.0]
[1.0, 3.5]
[1.0, 3.5]
[1.0, 2.25]
[1.0, 2.25]
[1.0, 1.625] # ** Quando a condição retorna False o ponto B ainda é deslocado
[1.625, 1.625] # ** else executado em seguida
1.625
Aucun commentaire:
Enregistrer un commentaire