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 ()