Jump to content
Fórum Script Brasil
  • 0

Ajudem um iniciante em python


zondak
 Share

Question

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 to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      149.9k
    • Total Posts
      646.8k
×
×
  • Create New...