Questa seconda lezione ci propone un contributo della docente Morena de Poli, che contribuirà alla stesura del corso/lezioni.

Chiunque sia interessato a proporre dei suoi contributo scriva ad alfonsodambrosio@yahoo.it

MATEMATICA E PYTHON: LE FUNZIONI

di Morena De Poli

Sono profondamente convinta che in Matematica tutto, o quasi tutto, possa essere descritto sotto forma di funzione; perciò cominciamo proprio da qui.

Definizione algebrica di funzione:

una funzione f è una relazione tra l’insieme A (dominio) e l’insieme B (codominio) che fa corrispondere ad ogni elemento di A uno ed uno solo elemento di B e si scrive

f: A → B

x → y = f(x)

Non mi dilungo sulla teoria delle funzioni, ogni docente potrà approfondire … ma vorrei osservare che gli insiemi A e B possono essere di vario tipo e a volte, nell’esplicitare un a funzione, non vengono nemmeno specificati perchè la natura stessa della funzione permette di individuarli; alcuni esempi:

  1. successivo x → y=x+1

  2. somma a,b → c=a+b

  3. parità x → y=vero oppure falso …

  4. soluzione equazione di primo grado a x = b

a,b → y=b/a oppure ‘indet’ oppure ‘infinite sol’

  1. costante -1 x → -1

  2. inverso x → y = 1/x con x ≠ 0

Come si può notare, in alcuni esempi il dominio è un insieme elementare (interi, reali), in altri casi può essere il prodotto cartesiano di due o più insiemi; il codominio può essere un insieme numerico oppure l’unione tra insiemi numerici e non come nel caso dell’esempio 4 in cui il codominio è l’insieme dei reali unito alle parole ‘indet’ e ‘infinite sol’!

Venendo alla programmazione con Python, ogni qualvolta si definisce una funzione Python mediante la parola chiave def è bene essere consapevoli che si sta applicando in tutto e per tutto la definizione algebrica di funzione appena vista, nella sua forma più ampia dove appunto dominio e codominio spesso non sono insiemi elementari.

Codificando con Python le funzioni proposte negli esempi si avranno i seguenti casi:

  1. def succ(x):

return x+1

  1. def somma(a,b):

    • return a+b

  1. def pari(x):

if x%2==0:

return ‘vero’

else:

return ‘falso’

  1. def soluz(a,b):

    if a==0:

    if b==0:

    return ‘indet’

else:

return ‘infinite sol’

else:

return b/a

  1. def meno1():

    return -1

  1. def inverso(x):

    if x==0:

    return ‘impossibile’

else:

return 1/x

Osservazioni:

  • E’ possibile costruire una funzione apparentemente ‘senza domino’ (nulla tra le parentesi tonde … che sono però obbligatorie!); si tratta si una funzione costante, cioè che assume lo stesso valore per tutti gli infiniti valori del suo dominio; ci viene così concesso di evitare la fatica di doverlo specificare.

  • Tra le parentesi tonde (obbligatorie) si scrivono i parametri, detti anche argomenti, della funzione; si tratta di variabili ‘locali’, nel senso che il loro nome viene riconosciuto solo all’interno della definizione della funzione, alle quali verranno passati i valori che la funzione dovrà elaborare fornendo un risultato; la funzione dovrà essere progettata in modo tale da verificare che il valore passato al parametro appartenga al dominio, in caso contrario dovrà restituire l’opportuna segnalazione (vedi es. 4 e 6)

  • La parola chiave return è quella che permette di specificare qual è il risultato restituito dalla funzione dopo la sua applicazione, in qualche caso il risultato è determinato da una semplice espressione algebrica, in altri casi può essere frutto di una elaborazione più complessa; rimane però vero che l’algoritmo che determina il risultato della funzione è costruito in maniera tale da eseguire una sola volta l’istruzione return.

Potrà accadere che sia necessario definire una funzione Python che restituisca due risultati, come nel seguente esempio:

cosa alquanto strana, dal punto di vista matematico, se si tiene conto della definizione algebrica data, a meno che non si consideri l’insieme codominio come un insieme di coppie.

Molti linguaggi di programmazione obbligano il programmatore a costruire funzioni che restituiscano un unico risultato, nel rispetto della definizione matematica, in questi casi la struttura che può essere utilizzata per restituire valori multipli è la lista (oppure l’array).

Python invece, come si evince dall’esempio, mette a disposizione una diversa struttura detta tupla la quale consente anche ad esempio l’insolita scrittura

a,b=1,2

dove ciascun elemento della tupla (1,2) viene assegnato rispettivamente alle variabili indicate (a assumerà il valore 1 e b il valore 2).

Quindi, si può affermare che mediante l’uso delle tuple Python permetta di riassumere in un’unica scrittura la definizione di due o più funzioni, elencando i risultati di ciascuna di esse in una tupla; i diversi elementi della tupla risultato potranno essere successivamente assegnati a diverse variabili.

Osservazioni:

  • la IDLE di Python usa i colori per distinguere le diverse tipologie di elementi che fanno parte del linguaggio e questo aiuta molto il principiante che si accinge a scrivere codice Python

  • iniziando una riga col simbolo # si comunica all’interprete di Python che si sta scrivendo un commento, cioè qualcosa che non fa parte del codice

Applicare, richiamare, o, in modo più raffinato, invocare una funzione lo si realizza scrivendo il suo nome seguito dalle parentesi tonde () tra le quali, se previsti, vanno specificati i valori dei parametri. L’invocazione di una funzione potrà essere utilizzata all’interno di una qualsiasi espressione algebrica o logica.

La seguente immagine mostra, sovrapposte, le due finestre aperte dalla IDLE di Python, una con la Shell e l’altra con l’ambiente di edit. Nella Shell si possono osservare i risultati dell’invocazione delle funzioni, mostrati a video mediante l’istruzione print.

Si può osservare come l’ultima istruzione print, che ci mostra il risultato dell’invocazione della funzione Python prima_dopo applicata al valore 5, fornisca nella shell il risultato rappresentato dalla tupla (4,6).

Penso che dal punto di vista matematico, ci siano molti elementi di riflessione e approfondimento; inoltre, costruire funzioni Python potrà aiutare lo studente a comprendere meglio il concetto di funzione in quanto sarà costretto prima a riflettere su tutti gli aspetti relativi alla sua progettazione (ricerca del dominio, analisi dell’insieme delle immagini, individuazione di casi particolari) e successivamente potrà effettuare molte prove di applicazione della funzione costruita, ovviamente molte più che non applicandola semplicemente con carta e penna.

per completezza la prima versione del seguente articolo appariva così

MATEMATICA E PYTHON: LE FUNZIONI

di Morena De Poli

Sono profondamente convinta che in Matematica tutto, o quasi tutto, possa essere descritto sotto forma di funzione; perciò cominciamo proprio da qui.

Definizione algebrica di funzione:

una funzione f è una relazione tra l’insieme A (dominio) e l’insieme B (codominio) che fa corrispondere ad ogni elemento di A uno ed uno solo elemento di B e si scrive

f: A → B

x → y = f(x)

Non mi dilungo sulla teoria delle funzioni, ogni docente potrà approfondire … ma vorrei osservare che gli insiemi A e B possono essere di vario tipo e a volte, nell’esplicitare un a funzione, non vengono nemmeno specificati perchè la natura stessa della funzione permette di individuarli; alcuni esempi:

  1. successivo x → y=x+1

  2. somma a,b → c=a+b

  3. parità x → y=vero oppure falso …

  4. soluzione equazione di primo grado a x = b

a,b → y=b/a oppure ‘indet’ oppure ‘infinite sol’

  1. costante -1 x → -1

  2. inverso x → y = 1/x con x ≠ 0

Come si può notare, in alcuni esempi il dominio è un insieme elementare (interi, reali), in altri casi può essere il prodotto cartesiano di due o più insiemi; il codominio può essere un insieme numerico oppure l’unione tra insiemi numerici e non come nel caso dell’ultimo esempio in cui il codominio è l’insieme dei reali unito alle parole ‘indet’ e ‘infinite sol’!

Venendo alla programmazione con Python, ogni qualvolta si definisce una funzione Python mediante la parola chiave def è bene essere consapevoli che si sta applicando in tutto e per tutto la definizione algebrica di funzione appena vista, nella sua forma più ampia dove appunto dominio e codominio spesso non sono insiemi elementari.

Codificando con Python le funzioni proposte negli esempi si avranno i seguenti casi:

  1. def succ(x):

return x+1

  1. def somma(a,b):

    • return a+b

  1. def pari(x):

if x%2==0:

return ‘vero’

else:

return ‘falso’

  1. def soluz(a,b):

    if a==0:

    if b==0:

    return ‘indet’

else:

return ‘infinite sol’

else:

return b/a

  1. def meno1():

    return -1

  1. def inverso(x):

    if x==0:

    return ‘impossibile’

else:

return 1/x

Osservazioni:

  • E’ possibile costruire una funzione apparentemente ‘senza domino’ (nulla tra le parentesi tonde … che sono però obbligatorie!); si tratta si una funzione costante, cioè che assume lo stesso valore per tutti gli infiniti valori del suo dominio; ci viene così concesso di evitare la fatica di doverlo specificare.

  • Tra le parentesi tonde (obbligatorie) si scrivono i parametri, detti anche argomenti, della funzione; si tratta di variabili ‘locali’, nel senso che il loro nome viene riconosciuto solo all’interno della definizione della funzione, alle quali verranno passati i valori che la funzione dovrà elaborare fornendo un risultato; la funzione dovrà essere progettata in modo tale da verificare che il valore passato al parametro appartenga al dominio, in caso contrario dovrà restituire l’opportuna segnalazione (vedi es. 4 e 6)

  • La parola chiave return è quella che permette di specificare qual è il risultato restituito dalla funzione dopo la sua applicazione, in qualche caso il risultato è determinato da una semplice espressione algebrica, in altri casi può essere frutto di una elaborazione più complessa; rimane però vero che l’algoritmo che determina il risultato della funzione è costruito in maniera tale da eseguire una sola volta l’istruzione return.

Potrà accadere che sia necessario definire una funzione che restituisca due risultati, come nel seguente esempio:

Osservazioni:

  • i due diversi risultati vengono scritti uno di seguito all’altro, separati da virgola, dopo la parola chiave return

  • la IDLE di Python usa i colori per distinguere le diverse tipologie di elementi che fanno parte del linguaggio e questo aiuta molto il principiante che si accinge a scrivere codice Python

  • iniziando una riga col simbolo # si comunica all’interprete di Python che si sta scrivendo un commento, cioè qualcosa che non fa parte del codice

Applicare, richiamare, o, in modo più raffinato, invocare una funzione lo si realizza scrivendo il suo nome seguito dalle parentesi tonde () tra le quali, se previsti, vanno specificati i valori dei parametri. L’invocazione di una funzione potrà essere utilizzata all’interno di una qualsiasi espressione algebrica o logica.

La seguente immagine mostra, sovrapposte, le due finestre aperte dalla IDLE di Python, una con la Shell e l’altra con l’ambiente di edit. Nella Shell si possono osservare i risultati dell’invocazione delle funzioni, mostrati a video mediante l’istruzione print.

Penso che dal punto di vista matematico, ci siano molti elementi di riflessione e approfondimento; inoltre, costruire funzioni Python potrà aiutare lo studente a comprendere meglio il concetto di funzione in quanto sarà costretto prima a riflettere su tutti gli aspetti relativi alla sua progettazione (ricerca del dominio, analisi dell’insieme delle immagini, individuazione di casi particolari) e successivamente potrà effettuare molte prove di applicazione della funzione costruita, ovviamente molte più che non applicandola semplicemente con carta e penna.

Vai alla barra degli strumenti