mercredi 23 octobre 2019

Passar uma função como condição if chama a mesma automaticamente?

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