dedzworld Posted March 24, 2014 Report Share Posted March 24, 2014 Boa noite, no desenrolar de uma actividade prática, eu tinha de escrever um programa que usando o método iterativo simples calculasse um valor aproximado da raiz de F(x) = 0 que pertencesse a um determinado intervalo antes calculado, com erro absoluto inferior a um dado valor e que calculasse juntamente o número de iterações necessário para esse calculo. Desta forma, escrevi este programa : import math def raiz(fx,x0,e): x1 = fx(x0) erro = abs( x1 - x0 ) i = 1 while erro > e : x0 = x1 x1 = fx(x0) erro = abs( x1 - x0 ) i = i + 1 return(x1,i) onde x1 corresponde ao valor aproximado e i ao número de iterações. No entanto, ao fazer o print final print(raiz((math.sqrt(math.exp(1)/3)),0,5*10**-7)) dá-me este erro : Traceback (most recent call last):File "C:\Users\andre\Documents\EDA\exercicio2.py", line 15, in <module> print(raiz((math.sqrt(math.exp(1)/3)),0,5*10**-7)) File "C:\Users\andre\Documents\EDA\exercicio2.py", line 4, in raiz x1 = fx(x0) TypeError: 'float' object is not callable Já pesquisei sobre o erro em questão e não consigo perceber, assim gostaria de saber se alguém me poderia explicar a base do erro para tentar arranjar forma de o resolver. Obrigado desde já pela compreensão, cumprimentos dedzworld. Link to comment Share on other sites More sharing options...
Devexz Posted March 24, 2014 Report Share Posted March 24, 2014 (edited) isso o que estás a fazer a nível de matemática para mim é chinês 😄 , mas a nível de programação o erro parece que está nesta linha: x1 = fx(x0) Se meteres assim x1 = fx*(x0) Já funciona, mas não sei se é esse o resultado pretendido 😛 Edited March 24, 2014 by Devexz Contador de calorias: caloriaspordia.com Link to comment Share on other sites More sharing options...
dedzworld Posted March 26, 2014 Author Report Share Posted March 26, 2014 (edited) O resultado pretendido não é esse mas já consegui resolver o problema através de recursividade. import math def funcao(x): z = math.exp(x) / 3 y = math.sqrt(z) return y def raiz(x0,e): x1 = funcao(x0) erro = abs( x1 - x0 ) i = 1 while erro > e : x0 = x1 x1 = funcao(x0) erro = abs( x1 - x0 ) i = i + 1 return(x1,i) De qualquer forma obrigado pela disponibilidade e contributo, cumprimentos dedzworld. Edited March 26, 2014 by thoga31 Tags code + GeSHi Link to comment Share on other sites More sharing options...
Dr_Lion Posted May 6, 2014 Report Share Posted May 6, 2014 A questão era mesmo por causa da recursividade, tu estavas a tentar usar recursividade no primeiro post mas com o nome de uma variável "fx" que não era uma funcão. Já que descobriste o erro, agora podes marcar o tópico como resolvido 🙂 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now