Archivio mensile:Marzo 2020

Frege

Gottlob Frege: la matematica diventa logica?

Nell’ultimo articolo della nostra serie abbiamo visto come George Boole riuscì a trattare la logica come un ramo della matematica. In questo modo fu finalmente possibile applicare la potenza dei metodi matematici a questa importantissima materia di studio, che fino ad allora apparteneva più che altro alla filosofia.

Viene naturale allora chiedersi se, viceversa, la matematica possa essere espressa unicamente mediante la logica, senza dunque far ricorso a ragionamenti “intuitivi”.

Sarebbe una scoperta strabiliante: significherebbe aver trovato finalmente il calculus ratiocinator sognato da Leibniz! Significherebbe essere in grado, data una qualsiasi domanda matematica ben formata, di dare una risposta affermativa o negativa senza alcun dubbio, esibendo come dimostrazione i passaggi logici che ci hanno portato a dare quella risposta!

Non sorprende dunque che dopo Boole furono diversi i tentativi in questa direzione.

Il più importante tra questi fu senza dubbio il sistema logico presentato da Gottlob Frege (1848-1925).

L’Ideografia di Frege

Con Boole si era scoperto che sarebbe stato possibile sviluppare la logica con i normali metodi matematici, ma tra questi è compreso, ovviamente, il ragionamento logico. Questa circolarità nell’usare la logica per sviluppare la logica stessa, per Frege era inaccettabile.

Il suo lavoro fu quello di cercare di dimostrare che tutta la matematica poteva essere basata sulla logica. Per farlo doveva trovare il modo di sviluppare la logica senza usare il ragionamento logico stesso.

A tal proposito Frege pubblicò nel 1879 un libretto di meno di cento pagine intitolato Begriffsschrift, termine coniato da lui stesso unendo i vocaboli tedeschi begriff, “concetto”, e schrift, “scrittura”, tradotto storicamente in italiano come Ideografia.

Al suo interno presentava la sua soluzione al problema della circolarità della logica: un linguaggio artificiale con regole grammaticali (sintattiche) estremamente precise.

La sintassi formale

Sviluppato questo linguaggio formale sarebbe stato possibile elaborare le deduzioni logiche come operazioni puramente meccaniche: le regole di inferenza.

Vediamone un esempio:

Siano $A$ e $B$ due qualsiasi enunciati della Begriffsschrift, se sono asseriti sia $A$ sia $(A § B)$, si asserirà automaticamente $B$.

Notiamo che non è affatto importante conoscere il significato del simbolo $§$!

Probabilmente i lettori più attenti avranno riconosciuto in questa regola di inferenza il modus ponens, e avranno quindi interpretato $§$ come “$\implies$”, ma non è assolutamente necessario farlo per poter applicare questa regola sintattica ogni volta che ci troveremo di fronte alle asserzioni $A$ e $(A § B)$ per ricavare $B$.

Fu proprio questa l’intuizione di Frege! Riuscì a trovare il modo di sostituire l’intuizione con delle ferree regole di sintassi.

Il suo linguaggio formale potrebbe essere considerato l’antenato di tutti gli odierni linguaggi di programmazione.

Il sistema logico sviluppato da Frege è quello che oggi viene insegnato nei primi anni dei corsi di matematica, informatica e filosofia come logica del primo ordine.

Vediamo quali sono i passi avanti rispetto ai sistemi logici precedenti.

Il problema della generalità multipla

Uno dei grandi problemi che Frege riuscì a fronteggiare fu quello della generalità multipla. Prima di lui la logica riusciva ad esprimere agevolmente i connettivi e, o, se…allora e non.

I problemi si presentavano quando occorreva maneggiare i quantificatori tutti e qualche, che nella logica tradizionale potevano essere descritti solo in modo molto artificioso.

Per esempio, è intuitivo che dall’enunciato “Qualche gatto è temuto da tutti i topi” segua logicamente “Tutti i topi temono un qualche gatto”.

La logica aristotelica, ma anche quella sviluppata da Boole, permetteva di esprimere essenzialmente solo quattro tipi di proposizioni:

  • Tutti gli $A$ sono $B$
  • Qualche $A$ è $B$
  • Nessun $A$ è $B$
  • Qualche $A$ non è $B$

Ognuna di queste contiene al massimo un quantificatore. Come possiamo dunque esprimere gli enunciati dei gatti e dei topi che presentano entrambi due quantificatori? (Tutti e qualche)

Il massimo che la logica tradizionale poteva fare era di incorporare il secondo quantificatore all’interno del secondo termine, in modo da ottenere, ad esempio “Qualche (gatto) è (temuto da tutti i topi)”, in modo da rispettare lo schema “Qualche A è B”.

Sembra parecchio scomodo vero? Non solo, non era nemmeno funzionale!

Vediamo infatti come sarebbe stata scritta la seconda proposizione, che dovrebbe essere una conseguenza logica della prima: “Tutti (i topi) temono (un qualche gatto)”. Volendo parafrasarla per rispettare lo schema “Tutti gli $A$ sono $B$” potremmo scrivere “Tutti (i topi) sono (intimoriti da un qualche gatto)”.

Abbiamo sostanzialmente due espressioni totalmente scollegate: “Qualche $A$ è $B$” e “Tutti gli $C$ sono $D$”. Non c’è alcun modo per mostrare meccanicamente che la seconda sia una conseguenza della prima.

Funzione-Argomento

Questi problemi secondo Frege erano imputabili al fatto che la logica aristotelica fosse basata sulla dicotomia soggetto-predicato. Per superare questo ostacolo propose di sostituirla con la dicotomia funzione-argomento, che riprende dalla matematica.

Analizziamo per esempio l’enunciato “$2+3=5$”.

Possiamo vedere l’espressione “$2+3$” come una funzione binaria “( )+( )” che associa ai due argomenti inseriti all’interno delle parentesi tonde la loro somma.

Analogamente, possiamo vedere l’enunciato “$2+3=5$” come una funzione a tre argomenti “( )+( )=( )”. Tale funzione, una volta saturata, restituirà un valore di verità ($V$ o $F$). Se saturiamo la funzione con i termini “$2$”,”$3$”,”$5$” restituirà $Vero$, se invece la saturiamo con “$2$”,”$3$”,”$8$” restituirà $Falso$.

I quantificatori

Per essere in grado di esprimere le nostre due proposizioni sui gatti e topi però ci manca ancora qualcosa. Dobbiamo trovare il modo di esprimere “tutti” e “qualche” in un modo non ambiguo e che ci permetta di maneggiare con efficacia i nostri enunciati.

L’idea di Frege fu quella dei quantificatori: il quantificatore universale $\boldsymbol{\forall}$, “tutti”, ed il quantificatore esistenziale $\boldsymbol{\exists}$, “esiste”.

Torniamo quindi al nostro enunciato: “Qualche gatto è temuto da tutti i topi”.

Se proviamo ora a tradurlo nella notazione di Frege scopriamo che non solo siamo finalmente in grado di farlo, ma che addirittura il linguaggio ideato da Frege è più espressivo e preciso del nostro! Dobbiamo infatti metterci d’accordo su cosa intendiamo con la nostra frase. Per come è scritta in italiano può avere due interpretazioni:

  • Ogni topo teme un qualche gatto:

$\forall t.(Topo(t) \implies \exists g.(Gatto(g) \land Teme(t,g)))$

  • Esiste un gatto che è temuto da tutti i topi:

$\exists g.(Gatto(g) \land \forall t.(Topo(t) \implies Teme(t,g)))$

Dove:

  • $Topo(x)$ è la funzione che restituisce $Vero$ se l’argomento $x$ è un topo
  • $Gatto(x)$ è la funzione che restituisce $Vero$ se l’argomento $x$ è un gatto
  • $Teme(x,y)$ è la funzione che restituisce $Vero$ se $x$ teme $y$

Nell’articolo su Boole avevamo accennato al fatto che la sua logica non fosse in grado di esprimere enunciati del tipo “Tutti gli $X$ sono $Y$ o $Z$”.

Proviamo ora ad esprimere una proposizione di questa forma, per esempio “Tutti i numeri sono pari o dispari”. Per il sistema di Frege non c’è nessun problema:

$\forall n.(Numero(n) \implies (Pari(n) \lor Dispari(n))).$

Ad onor del vero la notazione presentata da Frege era diversa e più scomoda dal punto di vista tipografico, quella che usiamo oggi è la notazione utilizzata nei lavori di Russell e Peano, sviluppata a partire dalle idee di Frege.

L’Ideografia e il sogno di Leibniz

La logica di Frege fu un progresso immenso rispetto alla logica di Boole.

Finalmente si aveva a disposizione un linguaggio formale in grado di abbracciare tutti i ragionamenti utilizzati normalmente dalla matematica.

Finalmente dato un insieme di premesse sarebbe stato possibile raggiungere, prima o poi, tutte le conseguenze logiche di quelle premesse, semplicemente applicando meccanicamente le regole di inferenza. Sembrava proprio finalmente realizzato il sogno di Leibniz, o quasi…

Ma come quasi? Cosa manca per sedersi a un tavolo e dire “Calcoliamo!” per decidere se un qualunque enunciato è vero o falso?

Ebbene, il problema sta proprio in quel “prima o poi”. Partendo dalle premesse e combinandole con le regole di inferenza è possibile tentare di raggiungere una determinata conclusione, ma se dopo qualche ora, qualche giorno, qualche anno non riuscissimo a raggiungerla? Forse semplicemente la conclusione desiderata non discende dalle premesse iniziali, o forse ci siamo fermati troppo presto nel cercare di raggiungerla. Non possiamo saperlo.

Questo è un problema molto profondo, alla base della teoria della calcolabilità, e degli sconcertanti risultati di Kurt Gӧdel, i teoremi di incompletezza. Ci torneremo nei prossimi articoli.

La lettera di Russell

Per Frege la logica era solo il primo passo verso il suo obiettivo finale di rifondare tutta la matematica.

Per farlo, doveva iniziare dai fondamenti dell’aritmetica, che Dedekind e Peano avevano dimostrato essere alla base di tutta la matematica. Pubblicò a tal proposito i due volumi de I Principi dell’Aritmetica in cui, sfruttando il linguaggio formale sviluppato nell’Ideografia, si proponeva di costruire, a partire da determinati assiomi, i numeri naturali e le loro proprietà.

Nel giugno del 1902, mentre il secondo volume era ancora in stampa, arriva a Frege una lettera da parte del trentenne Bertrand Russell, filosofo e matematico inglese.

Russell dice di “trovarsi completamente d’accordo su tutti i punti essenziali” ma anche che “c’è un solo punto in cui ho trovato una difficoltà” (potete trovare il testo integrale della lettera sulla pagina wikipedia dedicata a Frege).

Sfortunatamente non si trattava di una difficoltà di Russell, né di un punto non essenziale. Frege lo capì subito e si precipitò ad aggiungere al secondo volume, che era proprio in quel momento in stampa, un’appendice in cui presentava il problema esposto nella lettera, che iniziava con queste parole:

“Per uno scienziato non c’è niente di peggio che veder crollare i fondamenti del suo lavoro proprio quando questo è stato appena completato. Io sono stato messo in tale situazione da una lettera del signor Bertrand Russell”.

Diversi anni dopo, lo stesso Russell, scrisse di questo gesto di grande integrità intellettuale:

“Fu una cosa quasi sovrumana, una dimostrazione significativa di ciò di cui sono capaci gli uomini se è al lavoro creativo e alla conoscenza che si dedicano, e non all’impresa, tanto più grossolana, di emergere e farsi conoscere”.

L’antinomia di Russell

Ma perché la lettera di Russell scosse così profondamente il lavoro di Frege?

Abbiamo detto che Frege si proponeva di definire i numeri naturali in termini puramente logici, e ci riuscì partendo dalla teoria degli insiemi, sfruttando il concetto di corrispondenza biunivoca. Se sei curioso dei dettagli, l’articolo LA MATEMATICA CONTA: STORIA DEI PRIMI NUMERI presenta la costruzione dei numeri naturali di Russell, molto simile a quella di Frege.

La teoria degli insiemi poggiava su assiomi che a prima vista sembravano intuitivi e abbastanza innocui, ma uno di essi era in realtà un lupo travestito da agnello.

Si tratta del Principio di Astrazione, che essenzialmente afferma:

“Per ogni proprietà esiste l’insieme degli oggetti che soddisfano quella proprietà”.

Per esempio, data la proprietà “essere un numero primo” esiste l’insieme corrispondente dei numeri primi.

Ebbene, Russell si chiese cosa accadrebbe se costruissimo l’insieme corrispondente alla proprietà di non appartenere a se stessi. Cioè l’insieme $R=\{x | x \notin x\}$.

Se R appartenesse a se stesso, allora dovendo rispettare la proprietà che determina l’insieme, non dovrebbe appartenere a se stesso. Se invece R non appartenesse a se stesso, allora rispettando la proprietà, dovrebbe appartenere a se stesso. $R \in R \iff R \notin R$

Siamo caduti dunque in una contraddizione: un tale insieme non può esistere, mentre l’Assioma di astrazione ci garantiva la sua esistenza. (Potete trovare l’antinomia di Russell nella sua versione divulgativa: Il barbiere di Russell)

Se una dimostrazione matematica porta ad una contraddizione, significa che almeno una delle premesse da cui parte è falsa, questo è il principio alla base delle dimostrazioni per assurdo.

Ma la contraddizione esposta da Russell mostrava che erano insostenibili gli stessi assiomi su cui era fondata la costruzione di Frege.

Frege stesso commentò:

“Qui non è in causa il mio metodo di fondazione in particolare, ma la possibilità di una fondazione logica dell’aritmetica in generale.”

Si aprì così la crisi dei fondamenti della matematica, di cui vedremo gli sviluppi nei prossimi articoli.

Spazi di hilbert parte 2

Nel precedente articolo (che puoi leggere qui https://www.mathone.it/spazio-hilbert/) abbiamo introdotto il concetto di spazio di Hilbert da un punto di vista storico e abbiamo definito gli strumenti base che ci serviranno ora per fare un passo oltre, introducendo effettivamente da un punto di vista matematico cosa sia uno spazio di Hilbert.

Progettando un po’ l’articolo ho realizzato che diventerebbe troppo pesante e lungo se oltre alla definizione e alle prime proprietà andassimo a parlare di importanti teoremi in questo settore, per cui dedicheremo un’ultima puntata della “rubrica” a quei risultati.

Cos’è uno spazio vettoriale di dimensione infinita?

Nel precedente articolo abbiamo visto cos’è uno spazio vettoriale. Però ci siamo limitati a parlare del caso finito dimensionale. Tuttavia per parlare di spazi di Hilbert nella loro completezza dobbiamo lavorare su spazi a dimensione infinita.

Se non hai mai visto un corso di analisi funzionale o ragionato su questi spazi in precedenza, probabilmente ti è sorta una domanda: “Qual è l’esempio di uno spazio matematico che mi capita di usare ed abbia dimensione infinita?”.

Eccoti quindi accontentato, vediamo subito un esempio che poi prenderemo come esempio di riferimento nella costruzione di spazio di Hilbert che porteremo avanti nel corso dell’articolo.

Probabilmente hai già sentito parlare di funzioni reali ad una variabile continue giusto? Se non ti è ancora capitato per il momento ti consiglio di prendere questa definizione un po’ grossolana : “Una funzione $f:[a,b]\rightarrow\mathbb{R}$ è continua se possiamo tracciarne il grafico senza staccare la penna dal foglio, ovvero il grafico è una curva senza salti”.

Ottimo, ma cosa centrano queste funzioni con gli spazi di Hilbert? In realtà poco infatti vedremo che per arrivare a quella costruzione dovremo puntualizzare qualche proprietà, però queste sono un perfetto esempio di spazio vettoriale a dimensione infinita.

Infatti se definiamo l’operazione di composizione come $f\circ g (x):= f(g(x))$ otteniamo che lo spazio $(C^0([a,b]),\circ)$ dove $C^0([a,b]):=\{f:[a,b]\rightarrow\mathbb{R}: f \text{ è continua }\}$ è uno spazio vettoriale.

Perché ha dimensione infinita? Semplicemente perché possiamo trovare infinite funzioni continue linearmente indipendenti l’una dall’altra. Vediamo perché particolare famiglia di funzioni continue linearmente indipendenti è data dalle funzioni trigonometriche:

\[T =  \{ \cos{nx} : n\in\mathbb{N} \} \]

Questa è per esempio anche utile per definire una base dello spazio in analisi. Tuttavia siccome avendo la dimensione infinita il concetto di base è un bel po’ più complesso rispetto al caso finito-dimensionale, preferisco sorvolare su questo argomento per questo articolo. Se ti interessa approfondire cosa sia una base di uno spazio vettoriale a dimensione finita ecco un sito che ti aiuterà : https://it.wikipedia.org/wiki/Base_(algebra_lineare)

Cos’è uno spazio normato?

Prima di passare a definire gli spazi di Hilbert, partendo dalla nozione di spazio vettoriale (a dimensione finita o infinita che sia) dobbiamo definire il concetto di spazio di Banach. Per farlo ci serve una norma ben definita sul nostro spazio che in questo paragrafo chiameremo $B$.

Una norma è da pensare come una funzione che associa ad ogni elemento dello spazio $v\in B$ un numero reale e non negativo. Questo numero che andiamo ad associare può essere visto come una misura della distanza dell’elemento $v$ dall’elemento neutro dello spazio, lo $0$.

Per far sì che questa funzione $|| \cdot || : B\rightarrow \mathbb{R}^+$ definisca effettivamente una norma su $B$ è necessario chiedere che sia non degenere, ovvero che $||v||=0$ se e soltanto se $v=0$.

A questo punto possiamo definire la coppia $(B,||\cdot ||)$ uno spazio normato.

Gli spazi di Banach sono spazi normati con una proprietà ulteriore che fra poco vedremo, ma prima direi che è utile  vedere un paio di esempi di spazio normati.

Partiamo da uno semplice che di sicuro conosci, in cui andremo a lavorare su uno spazio vettoriale a dimensione finita: $\mathbb{R}^n$.

Su questo spazio Euclideo possiamo definire la norma classica che associa al punto $x=(x_1,…,x_n)$ il numero non negativo $||x|| = \sqrt{x_1^2+…+x_n^2}$. Questa funzione è non degenere infatti la norma è 0 se e soltanto se $x_1=x_2=…=x_n=0$ ovvero se $x=0$ (dove qui con 0 si intende lo zero di $\mathbb{R}^n$, il suo elemento neutro quindi, con un abuso di notazione, stiamo dicendo 0=(0,…,0) ).

Passando ora ad un esempio a dimensione infinita, possiamo definire l’importantissimo spazio di Lebesgue $\mathcal{L}^2$ come segue:

\[ \mathcal{L}^2(a,b)=\{f:[a,b]\rightarrow \mathbb{R} : \int_a^b f^2(x)dx<+\infty\}. \]

Un esempio di funzione che sta qui dentro sono le funzioni trigonometriche. Infatti si può vedere che

$\int_a^b cos^2(x)dx < b-a <+\infty$ quindi richiesta soddisfatta. Se l’intervallo $[a,b]$ è limitato, allora per esempio abbiamo anche che tutte le funzioni continue sull’intervallo appartengono a questo spazio dato che, per il teorema di Weierstrass, sugli intervalli chiusi e limitati le funzioni continue ammettono massimo $M$ e minimo $m$ per cui se $f$ è continua nell’intervallo allora si ha

\[

\int_a^b f^2(x)dx < max{m^2,M^2}(b-a)<+\infty.

\]

Per definire con $\mathcal{L}^2(a,b)$ uno spazio normato dobbiamo avere una norma, che è definibile naturalmente come \[||f||=\Big(\int_a^b f^2(x)dx\Big)^{\frac{1}{2}}.\] La coppia $(\mathcal{L}^2(a,b),||\cdot ||)$ così costruita è uno spazio normato.

Dopo vedremo che questo spazio sarà davvero interessante e ricco di sorprese 😊

Ma veniamo ora alla definizione di spazio di Banach.

Cos’è uno spazio di Banach?

Uno spazio di Banach è uno spazio normato completo.

Abbiamo già visto cosa sia uno spazio normato, ci manca la definizione di spazio completo. Se hai visto un corso di Analisi uno saprai senz’altro che la retta dei numeri reali è completa e avrai già sentito parlare di assioma di completezza.

Se non hai mai sentito questi termini non disperare, intuitivamente la retta dei numeri reali si dice completa perché non ha buchi, ovvero presi a caso due numeri nell’insieme dei reali ne esiste sempre un terzo tra essi contenuti.

Questa però non è una definizione troppo operativa o generalizzabile agli spazi normati in generale, vediamo quindi qualcosa di più pratico:

Uno spazio di dice completo se una successione converge se e soltanto se è di Cauchy.

Non parlerò nel dettaglio di successioni di Cauchy qui perché sarebbe troppo dispersivo, mi limito quindi a caratterizzare le successioni con questo carattere con la seguente definizione:

La successione $\{x_n\}_{n\in\mathbb{N}}$ è di Cauchy se e solo se $\forall\,\varepsilon>0$ esiste un $n_0\in\mathbb{N}$ per cui $\forall n,m>n_0$ si ha $||x_n-x_m||<\varepsilon$.

Ottimo, quindi ora abbiamo visto la definizione di spazio di Banach.

Chiudiamo la sezione con un esempio di spazio di Banach per poi passare, finalmente, al concetto di spazio di Hilbert.

Grazie all’assioma di completezza di $\mathbb{R}$, estensibile naturalmente anche ad $\mathbb{R}^n$, se definiamo su questi spazi Euclidei la norma classica come visto poco più sopra, otteniamo uno spazio di Banach a dimensione finita.

Un altro esempio di spazio di Banach è sempre dato dall nostro $(\mathcal{L}^2(a,b),||\cdot||)$.

Concludiamo quindi in bellezza questo breve ma intenso excursus nell’analisi funzionale con il concetto di spazio di Hilbert che da tanto stiamo tenendo sott’occhio.

Cos’è uno spazio di Hilbert?

Uno spazio di Hilbert è uno spazio vettoriale che generalizza la nozione di spazio Euclideo. Nello spazio euclideo abbiamo uno strumento molto utile a nostra disposizione: un prodotto scalare.

Di prodotto scalare e di proiezioni ne abbiamo parlato nello scorso articolo (lo trovi qui https://www.mathone.it/spazio-hilbert/ ) quindi in questo lo suppongo noto.

L’idea è quindi di definire gli spazi di Hilbert partendo da questo concetto. Formalmente abbiamo la seguente definizione di Spazio di Hilbert:

Uno spazio di Hilbert è una coppia $(H,\langle\cdot,\cdot\rangle)$ fatta da uno spazio vettoriale $H$ e un prodotto scalare su $H$. Inoltre la norma $||v||:=\sqrt{\langle v,v\rangle}$ naturalmente indotta dal prodotto scalare, definisce uno spazio di Banach $(H,||\cdot ||)$.

Bene, questa coppia $(H, \langle\cdot,\cdot\rangle )$ è una generalizzazione dello spazio euclideo dove si possono fare le stesse belle cose tra cui calcolare prodotti, proiettare, scomporre in serie di Fourier (generalizzate) e molto altro. Chiaramente non ce ne occuperemo nel dettaglio in questo articolo ma alcune proprietà interessanti tra queste le vedremo nel prossimo ed ultimo articolo della rubrica.

Chiudiamo però recuperando l’esempio $\mathcal{L}^2(a,b)$. Su questo possiamo infatti definire un prodotto scalare come segue:

$$ \langle f,g \rangle = \int_a^b f(x)g(x)dx\quad\forall f,g\in \mathcal{L}^2(a,b). $$

Nel prossimo articolo vedremo molti risultati su questo spazio, per ora ci fermiamo così che sono convinto che abbiamo già visto un bel po’ di concetti.

DIVULGAZIONE MATEMATICA? ECCO Perché leggere I libri divulgativi

Un paio di mesi fa ho visitato il museo oceanografico a Monaco. Girando al suo interno mi sono accorto che gran parte delle cose che leggevo e vedevo non le conoscevo e proprio per questo mi è piaciuto davvero molto.

Camminando poi mi è venuto in mente che questo è esattamente lo stesso motivo per cui mi piace e trovo utile leggere libri di divulgazione riguardo ad argomenti e temi che non conosco.

Prima di elencare 3 motivi per cui ti consiglio di leggere questa tipologia di libri e di suggerirti un paio di titoli da cui partire, nel caso tu fossi in alto mare, però ci tengo a specificare che in questo periodo io non ne sto leggendo nessuno.

Non perché non li trovi utili o interessanti, ma piuttosto perché leggo molti libri tecnici/didattici per l’universitá, poi leggo articoli per trovare idee per Mathone, capirai bene che quando poi trovo il tempo di leggere preferisco staccare dalla matematica e svagarmi con altro 😉

Comunque quando riesco a trovare periodi di pausa, magari durante l’estate, un paio riesco sempre a leggerli e ormai ne ho accumulati un bel po’ nel corso degli anni, magari potrei anche recensirne qualcuno in dei video o articoli dedicati se può interessarti.

Ma torniamo ai motivi per cui ti suggerisco di leggere libri di divulgazione:

  1. Non sono quasi mai letture pesanti, spesso all’interno ci sono delle storie, e ti permettono di vedere sotto una luce diversa ciò che magari hai già studiato a scuola o all’università.
  2. Sono utili per incuriosirsi ad argomenti sconosciuti. Se per esempio non hai mai provato a ragionare su cosa siano le dimensioni in geometria, o non hai mai studiato la geometria dello spazio, una prima lettura di Flatlandia di sicuro ti illuminerà e ti lascerà a tratti dubbioso.
  3. Riescono a rispondere a domande un po’ più profonde, che spesso quando si studia su libri tecnici si lasciano in disparte. Per esempio sono interessanti le domande: Che cos’è la matematica? Perché studiare e fare matematica? E oltre a queste ce ne sarebbero molte altre, ma ho citato loro perché voglio suggeriti due letture davvero interessanti a riguardo, che sono: Che cos’è la matematica e Apologia di un matematico.

Vedrai che questi due libri non ti deluderanno, magari parti dal secondo che è molto breve e diretto.

E ora voglio rispondere ad un’ultima domanda: ma a cosa serve incuriosirmi ad un argomento? Comunque quando finisco il libro non sapró molto su questo!

Sono d’accordissimo con te! Infatti, proprio come quando trovi qualcosa di interessante in una cittá nuova, in un museo o nei discorsi con i tuoi amici vai ad approfondire dopo il tutto su dei testi piú tecnici o siti di riferimento, anche con i libri di divulgazione é cosí!

Se trovi un argomento che ti interessa o ti appassiona grazie ad un libro di divulgazione hai fatto bingo! Peró poi sta a te proseguire con gli approfondimenti tecnici se ti interessa veramente.

A dirla tutta questo “servizio” di incuriosire a vari temi é proprio quello che provo a dare io nei video o negli articoli, non ho nessuna pretesa di spiegarti in termini didattici cosa sia un’equazione alle derivate parziali, peró posso provare a presentarti esempi, situazioni reali e suggerirti qualche strumentio per approfondire in maniera rigorosa 😉

Ottimo, direi che ci siamo dilungati fin troppo, grazie per la lettura e alla prossima!

Intanto se vuoi leggerti un articolo in cui consiglio 50 libri di divulgazione matematica eccoti servito: https://www.mathone.it/migliori-libri-sulla-matematica/

Magari con un video o articolo in cui faccio una recensione 🙂

Cosa sono le differenze finite

In questo articolo andremo a parlare di differenze finite. Questo sarà un articolo introduttivo all’argomento.

Oltre alla descrizione del metodo vedremo un paio di esempi molto semplici scritti con Matlab, dove andremo a risolvere l’equazione di Poisson su un intervallo $I\subset\mathbb{R}$ e una sua variante.

Se vuoi vedere anche un video che ho fatto su questo argomento lo trovi sul canale Youtube 😉

Di sicuro ti è stato detto o comunque hai studiato e letto da qualche parte che è davvero piccolo l’insieme di equazioni differenziali risolvibili in maniera analitica ed esatta. Molto poche ammettono una soluzione esprimibile tramite una funzione che ha una sua espressione precisa. Descrivibile in forma chiusa.

Per questo motivo è necessario trovare un’alternativa alla procedura analitica. La procedura esatta che ci permette di arrivare ad una soluzione delle equazioni è infatti spesso limitante.

Ok, è importante saper risolvere gli esercizi in cui viene chiesto di trovare un integrale generale di un’equazione differenziale, ma questi sono appunto esercizi. Spesso le equazioni che definiscono un modello matematico, una volta che si riesce a mostrare che una soluzione esista, sono trattati in termini numerici.

Infatti tutto quello che è presente nel mondo, nella realtà, è descritto da una variazione di certe quantità, di certe proprietà mentre il tempo scorre liberamente.

Quindi come possiamo descrivere tutti questi fenomeni? Beh, intanto dobbiamo necessariamente coinvolgere delle equazioni differenziali. Quindi chiaramente non possiamo fermarci davanti al fatto che non sia possibile risolvere un’equazione di questo tipo in maniera esatta, in forma chiusa.

Se a noi interessa fare previsioni su qualche modello, su qualche fenomeno, dobbiamo trovare comunque un modo per ottenere informazioni sulla soluzione. A questo punto si aprono due strade molto interessanti:

L’analisi qualitativa (di cui magari ci occuperemo in altri articoli e puoi trovare già un esempio in questo articolo https://www.mathone.it/pendolo-semplice/) ma puoi già trovare un mio video sull’argomento qui di seguito:

e l’approssimazione numerica della soluzione, argomento di cui inizieremo ad occuparci proprio in questo articolo.

Per questa prima introduzione parleremo di equazioni differenziali ordinarie, quindi del caso in cui compaiono solo derivate ordinarie e c’è una sola variabile. Non andiamo quindi a coinvolgere le equazioni alle derivate parziali anche perché in quel caso il metodo alle differenze finite è abbastanza limitante perché non è comodo per lavorare con domini di dimensioni di forma particolari perché è necessario avere delle griglie fatte in un certo modo (spesso in quel caso si usa il metodo degli elementi finiti).

Comunque di sicuro porterò qualche esempio riguardo al metodo applicato al caso delle derivate parziali perchè permette di analizzare, senza andare troppo nel complesso, sistemi che evolvono in spazio e tempo, ampliando così di molto la classe dei modelli che potremo analizzare.

Ma torniamo alle equazioni differenziali ordinarie. Questa tipologia di equazioni solitamente ci interessa risolverle in un certo dominio. Per poterle risolvere numericamente dobbiamo imporre un’importante condizione su questo dominio: deve essere limitato.

Numericamente infatti non possiamo direttamente risolvere un’equazione differenziale su tutta la retta reale, ma dobbiamo considerarne un sottodominio compatto della forma $[0,L]$ con $L<+\infty$.

Le differenze finite si prestano molto bene a risolvere equazioni differenziali ordinarie che descrivono fenomeni stazionari, ovvero nel caso le quantità non varino nel tempo ma nello spazio. Spesso ci si riferisce ad essi come problemi al bordo (boundary value problems o BVP). Per esempio parliamo dell’equazione di Poisson $$-\frac{d^2u(x)}{dx^2}= f(x)$$ con $x\in[0,L]$ ed $f:\mathbb{R}\rightarrow \mathbb{R}$ una funzione qualsiasi, con delle opportune condizioni al bordo $u(0)=a$ e $u(L)=b$.

Chiaramente vediamo subito che serve un minimo di regolarità per la funzione $f$ per poter dire di avere una soluzione classica in questo esempio, ovvero siccome dobbiamo calcolare la derivata seconda di $u$ si può richiedere di avere $u\in\mathcal{C}^2(\mathbb{R},\mathbb{R})$ e quindi segue naturalmente $f\in\mathcal{C}^0(\mathbb{R},\mathbb{R})$. Se hai già sentito parlare di soluzioni deboli sai che in realtà si può chiedere meno regolarità per $f$ in generale, ma non preoccupiamocene per questo articolo.

Andiamo quindi ad introdurci alle tecniche approsimative che ci porteranno a definire uno schema alle differenze finite per risolvere l’equazione differenziale precedente, che possiamo per esempio complicare anche passando a questa dove comprare anche la derivata prima :$$\frac{d^2u(x)}{dx^2}+\frac{du(x)}{dx}=f(x)$$ per ogni $x\in[0,L]$ e ancora delle buone condizioni al bordo.

La prima idea che dobbiamo avere per approcciare l’approssimazione di una derivata, perché è questo che vogliamo fare, con delle strategie alternative è quello di definire una discretizzazione del nostro dominio.

Cos’è una discretizzazione? Semplicemente vogliamo dividere il nostro intervallo $[0,L]$ in intervallini sufficientemente piccoli, la cui unione restituisce esattamente l’intero dominio:

Definiamo la discretizzazione $$\tau = \{x_1=0<x_2<…<x_{N-1}<x_N=L\}$$ in modo dale che $$\cup_{i=1}^{N-1} [x_i,x_{i+1}] = [0,L].$$

Questa discretizzazione può essere fatta in maniera uniforme o non uniforme nel senso che le distanze $$\Delta x_k = x_{k+1}-x_k$$ possono essere rispettivamente tutte uguali o diverse.

Per semplicità d’ora in poi nella trattazione e anche nel codice supporremo tale discretizzazione uniforme e chiamiamo quindi $\Delta x = x_{n+1}-x_n$.

Benissimo ora siamo pronti a fare lo step fondamentale dietro l’idea delle differenze finite.

Se ti ricordi un po’ come ti è stato introdotto il concetto di derivata, ti ricorderai senz’altro che è coinvolto il limite del rapporto incrementale

Infatti la derivata di una funzione $u:\mathbb{R}\rightarrow\mathbb{R}$ è definita come il limite del rapporto incrementale, qualora esso sia finito:

$$ u'(x) = \lim_{\Delta x\to 0}\frac{u(x+\Delta x)-u(x)}{\Delta x}. $$

Allo stesso modo si può definire anche la derivata seconda:

$$ u”(x) = (u'(x))’ = \lim_{\Delta x\to 0}\frac{u'(x+\Delta x)-u'(x)}{\Delta x}.$$

Introduciamo quindi l’ultima notazione: $u(x_k) \approx u_k$, ovvero noi quello che andremo a calcolare sarà $u_k$ che è l’approssimazione numerica della soluzione esatta in $x_k$.

Ottimo, ora possiamo finalmente fornire un’approssimazione alle differenze finite di queste due derivate. Per farlo basta la semplice idea: invece di passare al limite su $\Delta x$, definiamo una discretizzazione sufficientemente raffinata del dominio $[0,L]$, ovvero tale che gli elementi $x_k$ e $x_{k+1}$ distano sufficientemente poco.

Ecco quindi una prima approssimazione della derivata

$$ u'(x_k)\approx \frac{u_{k+1}-u_k}{\Delta x}.$$

Questa è però una stima un po’ rozza infatti si può mostrare, espandendo con i polinomi di Taylor, che $$|u'(x_k)-\text{questa approssimazione}|$$ va a zero con la stessa velocità con cui ci va $\Delta x$, quindi è un’approssimazione di ordine 1:

$$ u(x_{k+1}) = u(x_k) + u'(x_k)(x_{k+1}-x_k) + o(\Delta x^2) $$

$$\frac{1}{\Delta x}(u(x_{k+1})-u(x_k)) = \frac{1}{\Delta x} (u(x_k)+u'(x_k)\Delta x + o(\Delta x^2)-u(x_k))$$

$$ = u'(x_k) + o(\Delta x).$$

Un modo per ottenere un’approssimazione più precisa, del secondo ordine, è quello di procedere con una differenza finita centrata invece che in avanti come abbiamo visto prima. Ti chiedo di provare a verificare da solo che la prossima approzione è precisa al secondo ordine 😉

$$ u'(x_k) \approx \frac{u_{k+1}-u_{k-1}}{2\Delta x}. $$

Similmente, partendo dalla differenza finita in avanti vista prima, si può ottenere un’approssimazione accurata al secondo ordine della derivata seconda come segue:

$$ u”(x_k) \approx \frac{\frac{u_{k+1}-u_k}{\Delta x} – \frac{u_k-u_{k-1}}{\Delta x}}{\Delta x} $$

$$ = \frac{u_{k+1}-2u_k+u_{k-1}}{\Delta x^2}.$$

Ottimo, direi che con la “teoria” siamo a posto. Vediamo di applicare questi risultati alle due equazioni prima introdotte. Prima però è importante rimarcare il fatto che il risultato del metodo delle differenze finite sarà un vettore che corrisponde alle approssimazioni della soluzione dell’equazione analizzata nei nodi della discretizzazione. Otterremo quindi un vettore $\vec{u}\in\mathbb{R}^N$ definito come segue:

$$ \vec{u} \approx \begin{bmatrix} u(x_1) \\ u(x_2) \\ . \\ .\\ . \\ u(x_N) \end{bmatrix} $$

e solitamente quando rappresenteremo graficamente la soluzione ottenuta si costruisce un’interpolazione lineare di tali valori, ovvero negli intervalli $(x_k,x_{k+1})$ si congiungono i punti $(x_k,u_k)$ e $(x_{k+1},u_{k+1})$ con un segmento come puoi vedere qui sotto:

Ottimo direi che la parte introduttiva può dirsi chiusa, qui di seguito oltre ai codici che ho scritto per Matlab e che puoi scaricare cliccando sul link di GitHub, ti riporto l’idea in breve dietro l’implementazione. La cosa interessante da precisare per il codice è che l’ho scritto in forma matriciale. Ho definito quindi due matrici $D1$ e $D2$ in modo tale che la loro azione sul vettore $u$ permetta di ottenere rispettivamente l’approssimazione della derivata prima e della derivata seconda. Ecco qui cosa intendo:

$$D1\, u = \begin{bmatrix}
0& 0&0& \dots &\dots \\
-1/(2\Delta x)& 0& 1/(2\Delta x)&0&\dots\\
0& -1/(2\Delta x)& 0& 1/(2\Delta x)&0\\ 0&\ddots&\ddots&\ddots&\dots\\
\dots& \dots& \dots& 0& 0
\end{bmatrix} \begin{bmatrix} u_1 \\ u_2 \\ . \\ .\\ . \\ u_N \end{bmatrix} = \begin{bmatrix} 0 \\ \frac{u_3-u_1}{2\Delta x} \\ . \\ .\\ \frac{u_N-u_{N-2}}{2\Delta x}\\ 0 \end{bmatrix} $$

$$D2\, u = \frac{1}{\Delta x^2}\begin{bmatrix}
1& 0&0& \dots &\dots&\dots&\dots \\
1& -2& 1&0&0&0&\dots\\
0& 1& -2&1&0&\dots&\dots\\ 0&\ddots&\ddots&\ddots&\dots&\dots&\dots\\
\dots& \dots&\dots&\dots& \dots& 0& 1
\end{bmatrix} \begin{bmatrix} u_1 \\ u_2 \\ . \\ .\\ . \\ u_N \end{bmatrix} = \begin{bmatrix} \frac{u_1}{\Delta x^2} \\ \frac{u_3-2u_2+u_1}{\Delta x^2} \\ . \\ .\\ \frac{u_N-2u_{N-1}+u_{N-2}}{\Delta x^2}\\ \frac{u_N}{\Delta x^2} \end{bmatrix} $$

E quindi i due problemi si ridurranno semplicemente a risolvere un sistema lineare. Il problema

$$\begin{cases}-u”(x) = 1,\quad x\in(0,1) \\ u(0)=u(1)=0\end{cases} $$

diventa quindi

$$ -D2\, u = \begin{bmatrix} 0\\ 1 \\ . \\ .\\ 1\\ 0 \end{bmatrix} .$$

Ecco quindi cosa otteniamo, dove la soluzione analitica con cui ho comparato quella numerica è la seguente parabola $$u_{\text{esatta}} (x)= -\frac{1}{2}x(1-x).$$

Invece il secondo problema

$$\begin{cases}u”(x)+u'(x) = 0,\quad x\in(0,1) \\ u(0)=0,u(1)=1\end{cases} $$

diventa quindi

$$ (D2+D1)\, u = \begin{bmatrix} 0\\ 0 \\ . \\ .\\ 0\\ \frac{1}{\Delta x^2} \end{bmatrix} .$$

Ecco quindi cosa otteniamo, dove la soluzione analitica con cui ho comparato quella numerica è la seguente $$u_{\text{esatta}} (x)= \frac{e-e^{1-x}}{e-1}.$$