6.4. Examples: Lecture 6#
6.4.1. Bisection method#
bisezione.py
#!/usr/bin/python
def bisezione (
g, # funzione di cui trovare lo zero
xMin, # minimo dell'intervallo
xMax, # massimo dell'intervallo
prec = 0.0001): # precisione della funzione
'''
Funzione che calcola zeri
con il metodo della bisezione
'''
xAve = xMin
while ((xMax - xMin) > prec) :
xAve = 0.5 * (xMax + xMin)
if (g (xAve) * g (xMin) > 0.): xMin = xAve
else : xMax = xAve
return xAve
# ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
def bisezione_ricorsiva (
g, # funzione di cui trovare lo zero
xMin, # minimo dell'intervallo
xMax, # massimo dell'intervallo
prec = 0.0001): # precisione della funzione
'''
Funzione che calcola zeri
con il metodo della bisezione ricorsivo
'''
xAve = 0.5 * (xMax + xMin)
if ((xMax - xMin) < prec): return xAve ;
if (g (xAve) * g (xMin) > 0.): return bisezione_ricorsiva (g, xAve, xMax, prec) ;
else : return bisezione_ricorsiva (g, xMin, xAve, prec) ;
test_bisezione.py
#!/usr/bin/python
from bisezione import bisezione, bisezione_ricorsiva
import sys
from math import cos
def func (x) :
'''
Funzione di cui trovare lo zero
'''
return cos (x)
# ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
def main () :
'''
Funzione che implementa il programma principale
'''
args = len(sys.argv) - 1
print ('The name of this script is ' + sys.argv[0])
print ('Zero della funzione = ', bisezione (func, 0., 4.))
print ('Zero della funzione = ', bisezione_ricorsiva (func, 0., 4.))
# ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
if __name__ == "__main__":
main ()
6.4.2. Function drawing#
disegna_funzione.py
#!/usr/bin/python
# https://matplotlib.org/stable/index.html
import matplotlib.pyplot as plt
import numpy as np
def f(x):
'''
Funzione da disegnare
'''
return cos (x)
# ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
def main () :
'''
Funzione che implementa il programma principale
'''
# il tipo di una variabile è implicitamente definito
# dalla sua inizializzazione
tempo = 4
print ('tipo di tempo: ', type (tempo))
xMin = 0.
xMax = 4.
print ('tipo di xMax: ', type (xMax))
# questo metodo non funziona con i coseni a quanto pare,
# bisogna trovarne uno più generico (che schifo python)
# creazione di x
x = np.linspace(-5, 5, 1000)
# visualizzazione del tipo di x
print ('tipo di x: ', type (x))
# visualizzazione del contenuto di x
print (x)
# creazione di y
# - attenzione! bisogna usare il coseno di numpy, non di math!
y = np.cos (x)
# visualizzazione del contenuto di y
print (y)
# disegno della funzione
fig, ax = plt.subplots ()
# fig: la grafica dell'immagine
# axes: l'insieme delle informazioni che riguardano la rappresentazione dei dati
ax.plot (x, y, label='f(x)= cos (x)')
ax.set_title ('Plotting Functions in Matplotlib', size=14)
ax.set_xlim (-5, 5)
ax.set_ylim (-2, 2)
plt.show ()
# ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
if __name__ == "__main__":
main ()