zondak
-
Total de itens
3 -
Registro em
-
Última visita
Posts postados por zondak
-
-
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 = 1while k <= maxIter:
if fa * fx > 0:
a = x
fa = fx
else:
b = x
fb = fxintervX = 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+1print("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 -
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 = 1while 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.
Metodo da Secante
em Python
Postado
def pi_secante (f, x0, x1, epsilon, iterMax=50):
if abs(f(x0)) <= epsilon:
return(False, x0)
print("k\t x.\t\t f(x)\t\t")
for k in range (1,iterMax+1):
x1 = x0-f(x0)/flin(x0)
print("%d\t%f\t%f"%(k,x1,f(x1)))
if abs(f(x1)) <= epsilon:
return(False, x1)
x0 = x1
print ("O numero Máx de interações foi atingido")
return(True,x1)
Eu sei que esse método é bem parecido com o do newton mas eu não encontro nenhum exemplo na internet da forma que eu quero, so resta alterar esse corpo do jeito certo para o método da secante. Se alguém poder me ajudar ficarei muito grato.