Ir para conteúdo
Fórum Script Brasil
  • 0

Ajudem um iniciante em python


zondak

Pergunta

Fiz um codigo mas ainda não aprendi a ler e identificar onde estao os erros.

# coding: utf-8

import math

def l_bissecao(f, a, b, epsilon, maxIter=50):
        fa=f(a)
        fb=f(b)
    if fa*fb > 0:
        print("Erro! A funçao não muda de sinal.")
        return (True, None)

    print("k\t  a\t\t  fa\t\t  b\t\t  fb\t\t  x\t\t  fx\t\tintervX")
        intervX = abs(b-a)
        x = (a+b)/2
        fx = f(x)

    print("-\t%e\t%e\t%e\t%e\t%e\t%e\t%e"%(a, fa, b, fb, x, fx, intervX))

    if intervX <= epsilon:
        k = 1

    while k <= maxIter:
        if fa * fx > 0:
            a = x
            fa = fx
        else:
            b = x
            fb = fx
        intervX = abs(b-a)
        x = (a+b)/2
        fx = f(x)

        print("%d\t%e\t%e\t%e\t%e\t%e\t%e\t%e"%(k,a, fa, b, fb, x, fx, intervX))

        if intervX <= epsilon
            return(False, None)
        k = k+1
    print("O numero maximo de iteracoes foi atingido.")
    return (True, x)


if __name__ == "__main__":
    
    def f1(x):
        return 2*x*math.asinh(50/2*x)
    a = -0,5
    b = 0,5
    epsilon = 10**-8
    maxIter = 20
    print("Método da Bisseção")
    (houveErro, raiz) = bissecao(f1,a,b,epsilon,maxIter)
    if houveErro:
        print("O Método da Bisseção retornou um erro.")
    if raiz is not None:
        print("Raiz encontrada: %s"%raiz)

se puderem me ajudar a encontrar os erros desse codigo ficaria muito grato.

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Linhas 6 e 7 estão muito recuadas, isso faz a linha 8 ser acusada de identação errada

Linhas 13, 14, 15 sofrem do mesmo mau

Falta algo na linha 35

Linha 51 bissecao não foi definido

Linhas 46 e 47 virgula não é separador decimal 

Fazendo esta correções vai executar sem erros, porem o resultado vai ser

'''

Método da Bisseção

Erro! A funçao não muda de sinal.

O Método da Bisseção retornou um erro.

'''

 

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado pela resposta.

eu dei uma ajeitada no codigo ele roda mas fica com alguns erros ainda:

def l_bissecao(f, a, b, epsilon, maxIter=50):
    fa=f(a)
    fb=f(b)

    if fa*fb > 0:
        print("Erro! A funçao não muda de sinal.")
        return (True, None)

    print("k\t  a\t\t  fa\t\t  b\t\t  fb\t\t  x\t\t  fx\t\tintervX")

    intervX = abs(b-a)
    x = (a+b)/2
    fx = f(x)

    print("-\t%e\t%e\t%e\t%e\t%e\t%e\t%e"%(a, fa, b, fb, x, fx, intervX))

    if intervX <= epsilon:
        k = 1

    while k <= maxIter:

        if fa * fx > 0:
            a = x
            fa = fx
        else:
            b = x
            fb = fx

        intervX = abs(b-a)
        x = (a+b)/2
        fx = f(x)

        print("%d\t%e\t%e\t%e\t%e\t%e\t%e\t%e"%(k,a, fa, b, fb, x, fx, intervX))

        if intervX <= epsilon:
            return(False, None)
        k = k+1

    print("O numero maximo de iteracoes foi atingido.")
    return (True, x)


if __name__ == "__main__":
    
    def f1(x):
        return x**3-9*x+3
    a = 0
    b = 1
    epsilon = 10**-8
    maxIter = 20
    print("Método da Bisseção")
    (houveErro, raiz) = l_bissecao(f1,a,b,epsilon,maxIter)
    if houveErro:
        print("O Método da Bisseção retornou um erro.")
    if raiz is not None:
        print("Raiz encontrada: %s"%raiz)

diz que os erros são na linha 56 e 24

File "teste.py", line 56, in <module>
    (houveErro, raiz) = l_bissecao(f1,a,b,epsilon,maxIter)
  File "teste.py", line 24, in l_bissecao
    while k <= maxIter:
UnboundLocalError: local variable 'k' referenced before assignment

 

Link para o comentário
Compartilhar em outros sites

  • 0

Certo, o código possibilita um erro de logica

O problema esta na avariável 'k', veja de onde vem esta variável:

Linha 21 e 22:

if intervX <= epsilon:
        k = 1

A variável 'k' nunca existirá se intervX > epsilon

Logo o erro acontece na linha 24 onde  a variável 'k' é chamada mas não existe

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...