04/12/2019, 21:35
# ESERCIZIO:
# definizione della funzione di ricerca per bisezione
# cerca zeri (approssimati a n cifre decimali) di una funzione
# nell'intervallo [a,b]
def CercaZero(f, a, b, n=2):
if a >= b:
return 'deve essere a < b!'
if f(a)*f(b) >= 0:
return 'usa degli a e b per cui f(a)*f(b) < 0'
if f(a) == 0:
return a
if f(b) == 0:
return b
m = (a+b)/2
if f(m) == 0:
return m
if b-a < 0.5*10**-n:
return int(10**n*m)/10**n
if f(a)*f(m) < 0:
return CercaZero(f, a, m)
else:
return CercaZero(f, m, b)
>>> from math import exp
>>> CercaZero(lambda x: exp(x)+x, -1, 0)
-0.56
>>> CercaZero(lambda x: exp(x)+x, -1, 0, n=4)
-0.56
04/12/2019, 23:28
CercaZero(lambda x: exp(x)+x, -1, 0, n=4)
, ma bensì CercaZero(lambda x: exp(x)+x, -1, 0, 4)
. Dovrebbe funzionare!
04/12/2019, 23:45
05/12/2019, 06:23
05/12/2019, 13:39
if f(a)*f(m) < 0:
return CercaZero(f, a, m, n)
else:
return CercaZero(f, m, b, n)
05/12/2019, 17:12
print('Grazie!')
Skuola.net News è una testata giornalistica iscritta al Registro degli Operatori della Comunicazione.
Registrazione: n° 20792 del 23/12/2010.
©2000—
Skuola Network s.r.l. Tutti i diritti riservati. — P.I. 10404470014.
Powered by phpBB © phpBB Group - Privacy policy - Cookie privacy
phpBB Mobile / SEO by Artodia.