Matematica Applicata e sue Applicazioni

con approccio rinnovato e modernizzato POST-2015

di: Simon Hasur (alias il Nerd degli Algoritmi)

Introduzione

Matematica: che roba è? Certamente qualcosa su cui, di fatto non basta più parlare senza menzionare ( e spesso anche approfondire ) le Applicazioni.


Le citazioni sono più caratteristiche della Letteratura che non della Matematica, ma oggi, possiamo di fatto affermare e provare che la Matematica può essere tanto poetica quanto la Letteratura, la Musica o le Arti Figurative. Quindi partiamo con due citazioni, presi una dalla prefazione, e una da un capitolo, di un libro dedicato ad una delle branche della matematica applicata : un libro del 2004 . Tanto per portare l'ardore dell'interessamento a temperature autogeniche.

questa:
Durante la risoluzione dei problemi, ci impegnamo a far luce sulle condizioni necessarie e sufficienti dei teoremi, presentare le procedure principali, e di volta in tanto facciamo riferimento alle possibili applicazioni pratiche.
Speriamo che il nostro libro raggiunga il suo scopo, e riesca a far conoscere al Lettore le basi dell'argomento, riesca inoltre a dare una mano nell'applicazione, e infine a suscitare il desiderio di raggiungere una comprensione più profonda.


e poi questa:
Con lo sviluppo delle tecnologie digitali, è sempre più frequente, che al posto della funzione f(t) con "t" continuo, siano dati solo i valori della funzione f(kt0), con "k" intero positivo.
( prese da: "Analisi Complessa" [2004] di Làszlò Hanka e Miklòs Zalai )


L'espandersi ed evolversi delle applicazioni della Matematica dopo gli anni '70, unitamente alla piena affermazione dell'Informatica e di conseguenza dell'Algoritmica su cui fa molta leva per sua natura, mi ha fatto render conto che dobbiamo rifondare la didattica della matematica, disegno tecnico, tutto ciò che c'entra.

C'è inoltre un'altra ragione per fare questo: il fatto che alcune cose della Matematica Applicata sono semplicemente troppo importanti e troppo profonde perché sia saggio affidarne la comprensione alla sola impalcatura teorica di essa e all'immaginazione di chi la usa o la studia. Sarebbe troppo poco garanziale.


Il tipo di approccio che ho scelto per questo "corso" (se così si può dire) di Matematica, è volto eccelsamente alla Matematica Applicata. Ciò nonostante, è privilegiata la comprensione profonda e non il mero studio a memoria: infatti questo intende essere un corso che è al passo coi tempi, post-2015 per dire ; dato che non siamo negli anni '70. Questo corso non intende infatti formare persone che ripetono cose a memoria o fanno le cose a mò di mera routine ; ma formare dei Bulldozer che risolvono problemi.

Qusto anche perché la comprensione profonda stimola l'intelligenza umana e l'immaginazione: che sono le risorse principali a nostra disposizione. Considerato anche che una maggiore intelligenza e forza di immaginazione, possono alzare sensibilmente la Qualità di Vita.


Dunque, come strategia di base, basta tener presente che nella Matematica Applicata non è importante riuscire ad afferrare alla perfezione ogni "capitolo" / "modulo" - diciamo così - subito : ma di ricordarsi che per eventuali dimenticanze o necessità di revisionare una certa cosa, basta riconsultare uno o l'altro "capitolo" / "modulo".
La cosa più importante infatti, è capire cosa serve a cosa. Cioé di ricordarsi e capire questo: quale strumento teorico permette di risolvere quale tipo di problematica. E anche l'inverso: per una data area di problematiche, quali strumenti teorici ci sono, i quali, se opportunamente combinati, forniscono un'impalcatura teorica, un framework, grazie cui, una volta inquadratoci il problema, si può risolvere il problema. E capire perché la soluzione è corretta.


Nozioni di base:

Evitando di fare uno schema che tanto non verrebbe bene e non a tutti piacerebbe, la racconto su a parole ; e dalle poche nozioni di base, uno, se vuole, può fare uno schema a proprio piacimento. Allora. Faccio un'elenco numerato di dichiarazioni, anche se l'ordine non importa.

1. La Matematica è una scienza teorica esatta, che si può applicare a varie cose pratiche, cioé sperimentali. Dove la possibilità di applicarla deriva dal fatto che essa permette di schematizzare, formalizzare, astrarre - diciamo così - problemi pratici, e da lì, poi, risolverli. Ciò è possibile làddove ci sono in gioco quantità oggettive, o qualità oggettive. Questa cosa delle quantità oggettive e qualità oggettive, vuol dire dire che la Matematica opera con cose di cui si presuppone che siano in qualche modo delle misure oggettive, o qualità che sono univocamente definite, e sono pertanto oggettive. Questa oggettività e l'operare con cose che in qualche modo devono essere univoche, fa sì che la logica e la deduzione logica, scrittura univoca e lettura univoca di dette scritture, sia ognipresente nella matematica. Pertanto, già che parlavamo di scrittura e lettura, di schematizzare e formalizzare cose, cioé di farne una sorta di descrizione astratta, beh... è doveroso dire che la matematica si configura per sua natura, anche come un linguaggio. Un linguaggio di comunicazione, che ha come qualità fondamentale l'oggettività... cioé lettura e scrittura assolutamente univoche. C'è l'interpretazione, ma il punto è che le interpretazioni si suddividono in intepretazioni assolutamente corrette o assolutamente sbagliate. C'è una certa librtà di scelta quindi, ma solo di scelta, non di interpretazione soggettiva.
Bene. Una affermazione è giusta se si riesce a produrne una dimostrazione, in cui, partendo da definizioni di base o da altri fatti già dimostrati, si fa una sequenza di deduzioni logiche, per arrivare alla fine a provare unanimemente che la cosa è logicmente giusta. Essendo la logica universale, il modo di operare con dimostrazioni siffatte, o perlomeno il fatto di appoggiarsi a dimostrazioni già fatte, rende la Matematica una scienza esatta.
Torniamo un'attimo alla storia che la Matematica è anche un linguaggio descrittivo. Quando si dice che è un linguaggio "universale", è perché è la Logica ad esserla prima di tutto. L'unica cosa è che nella matematica si cerca di fare un'uso quanto più avanzato della Logica. Ma la Logica, di per sé è semplicissima.
2. Essendo una scienza, per di più esatta, è per sua natura RICOSTRUTTIVA e non accumulativa. Nel senso che ad ogni nuovo fatto scoperto, virtualmente è necessario revisionare e riconsiderare tutto quanto si è scoperto fino a quel punto, per capire se dal nuovo punto di vista non si possono magari scoprire cose ulteriori. La ricostruzione così fatta è l'architettura di base della ricerca in Matematica E SUE APPLICAZIONI. Anche il tentativo di applicarla a qualcosa può naturalmente portare a scoperte nella matematica, ma alla fine non cambia molto: la forza portante della ricerca in questo campo è comunque il ragionamento e l'immaginazione.
3. Dai punti 1). e 2.) viene da sé che la Matematica, sebbene sia astratta (cioé teorica), ha un forte valore euristico. Che vuole dire esattamente? Vuol dire che alcuni strumenti teorici che vi si possono mettere a punto, non è che sono meramente utili per qualche cosa come costruire un disegno tecnico semplice o contare soldi, ma molto di più. Gli stumenti teorici messi a punto, permettono infatti di risalire a fatti circa il mondo reale, semplicemente manipolando espressioni simboliche, e facendo DEDUZIONI (deduzioni logiche). Chi più ne ha più ne metta ovviamente.
4. Una precisazione sul punto 3. : Esso, in teoria è vero in generale, o almeno così dicono in tanti. Motivo per cui facciamo una precisazione su una tendenza forte, tanto per avere qualcosa di concreto su cui andare a parare. Il punto 3 sussiste, essenzialmente perché il mondo lo vediamo in modo geometrico. Cioé se vogliamo analizzarlo e descriverlo, usiamo la geometria: un po' per cercare di misurare cose, soprattutto distanze ed angoli, un po' per progettare macchinari semplici. E Geometria sia: ma quella la possiamo infine trattare in modo puramente simbolico, analitico, e non di rado, anche addirittura in modo totalmente algoritmico ( cioé totalmente procedurale, totalmente meccanico ).

Misure, Quantità, Primitive Geometriche

e il tentativo di definirle e manipolarle in modo geometrico: con penna, riga e compasso

Partiamo con una illustrazione delle primitive geometriche: gli elementi più basilari che possono esistere in un piano 2D ideale.
Sono: il punto, la retta, la semiretta, il segmento, e la circonferenza: per un punto basta una penna, per la retta una penna e una riga, per la semiretta uguale, e pure per il segmento ; mentre per la circonferenza serve un compasso (che è dotato di una punta scrivente che funziona da penna: quindi nulla di che ).
Sotto è riportata una illustrazione che dà uno o più esempi per ciascuna delle suddette Primitive Geometriche.
[fig.1 missing]
Combinando questi elementi geometrici, possiamo costruire elementi più complessi. Vediamone una illustrazione, riportata sotto.
[fig.2 missing]
Questo giusto per mostrare che l'unica vera quantità che possiamo in qualche modo adoperare, è la lunghezza di un segmento. Mentre per le intersezioni di 2 linee (retta, semiretta o segmento che sia) o di una linea ed un tratto di circonferenza, o di 2 tratti di circonferenza, vengono fuori da sole ( non c'è nulla da "calcolare" ).

La costruzione di figure complesse come poligoni regolari con un dato numero di lati, e cose simili, non è tra gli obiettivi di questo testo, quindi per quello, consultare un comune manuale di disegno tecnico. Anche la famosa ricavazione di proprietà di varie costruzioni, di cui si occupa una cosa comunemente detta Geometria Euclidea o Geometria Sintetica, è lasciata da parte ( e non serve per la comprensione del resto di questo testo ).

Dunque, abbiamo capito che l'unica sorta di quantità oggettiva, di "misura" - per cosiddire - , che possiamo adoperare con penna, riga e compasso, è la lunghezza di un segmento. Vediamo cosa ci si può fare, anche per capire meglio cosa è una quantità oggettiva, una misura oggettiva.
Una distanza la si può copiare col compasso su una retta o semiretta: questo ci basta per cercare di definire tutte le operazioni più "utili" tra queste quantità ( quantità che sono, come ovvio, tutte dello stesso tipo ). Beh, definiamoli senza indugiare troppo a lungo.

La Somma (di distanze)

Col compasso si copia una distanza, e la si riporta su una retta o su una semiretta. Accavallando più tratti, si può ottenere la somma di più distanze (cioé di più "quantità").
Vediamo una illustrazione, riportata sotto.
[fig.3 missing]
La procedura da seguire è questa:

INIZIA
{
Disegna una semiretta con la riga.
}

PROCEDI
{
Step 1:
Campiona ciascuna lunghezza-di-segmento, come illustrato nella figura ; e copiala ad accavallamento, sulla semiretta.
Step 2:
Se ci sono ancora dei segmenti rimasti, ripeti lo Step 1 ; altrimenti, termina.
}

TERMINA



Fine.

La Sottrazione (di distanze)

Essenzialmente si riconduce alla copiatura di una distanza, ma puntando il compasso dalla parte opposta. Facciamo prima con una figura, riportata sotto.
[fig.4 missing]
Quello che si evince, è che sottraendo troppo, si finisce dall'altra parte dell'inizio della semiretta su cui copiamo le distanze: questa è una trovata che va valutata. Senza straspiegare, abbiamo scoperto che serve il "+" e il "-", che dicono da che parte della semiretta sta il risultato... o una singola misura. Infatti, volendo possiamo partire da una quantità negativa e sommarci quantità positive, e viceversa. Inutile dire che è tutto commutativo. Una cosa più sottile invece è il caso in cui il "risultato" di una serie di somme e sottrazioni, ci fa finire sul punto di inizio della semiretta: questa è la distanza nulla: è lo "0", lo "zero" geometrico.

La Moltiplicazione (di distanze)

Prendo, campiono, una distanza "a" col compasso, e la replico, la moltiplico, n volte, su una retta ; o su una semiretta. Come illustrato in figura, riportata sotto.

[fig.5 missing]

Si nota la difficoltà nel concepire una moltiplicazione per un numero non intero - per dirla così -, la moltiplicazione per una quantità che in qualche modo è continua. Già solo per il fatto di dover menzionare numeri (interi) e non distanze, il tutto traballa. Traballa perché l'approccio non è generale. Senza farlo apposta, ci siamo imbattuti in uno degli obiettivi e motivi portanti, della Matematica: la generalizzazione. Che è, in pratica, il tentativo di mettere a punto formalismi e metodi quanto più generali ed universali.
Però abbiamo scoperto che moltiplicare per 1, lo "1" geometrico, restituisce il moltiplicando, che è la distanza "a", inalterata. Indubbiamente notevole come cosa.
C'è inoltre un'altro fatto: si può concepire la moltiplicazione per 0, ed essa consiste nel copiare 0 volte la distanza "a"... consiste nel non copiarla affatto, ottenendo di fatto una distanza nulla, cioé ottenendo lo "zero" geometrico.

La Divisione (di distanze)

Basta vedere la figura riportata sotto ( fig.6 ).
[fig.6 missing]
Si nota la difficoltà nel concepire una divisione per un numero non intero. Già solo per il fatto di dover menzionare numeri (interi) e non distanze, il tutto traballa.
Per non dire che la costruzione geometrica da fare è complicata e laboriosa da fare. Quindi siamo già a 2 punti deboli dell'approccio geometrico con penna, riga, e compasso.
Però abbiamo scoperto che c'è un caso speciale che non bisogna sottovalutare: il fatto che dividendo una distanza "a" per sé stessa (cioé ancora una distanza "a"), si ottiene uno - lo "1" geometrico.
L'altra cosa notevole è che non si può concepire la divisione per 0 .

Conclusioni e commenti

Sulla somma e la sottrazione in modo geometrico, ci siamo. Ma sulla moltiplicazione e sulla divisione in modo geometrico, abbiamo concluso che il tutto traballa.
Il cuore del problema è la difficoltà nell'operare con quantità "continue" - diciamo così. Una quantità continua la possiamo o solo copiare, cioé campionare, o moltiplicarla n volte (dove pero n è un numero intero!), o dividerla d volte (dove pero d è un numero intero!). Si può cercare di aggirare il problema moltiplicando una distanza "a" per n e poi dividerla d volte ; ottenendo una sorta di divisione che dà una quantità che è la distanza "a" moltiplicata per una quantità contiua, cioé
a*(n/d) ,
ma ciò non può essere considerato il massimo della vita.

Per non dire che anche la costruzione della maggior parte dei poligoni regolari richiedono di sapere a memoria una costruzione speciale, perlopiù molto laboriosa da fare il più delle volte, etc. . Insomma, ci sono un sacco di problemi.

Da questo consegue che la geometria così com'è, fatta con penna, riga, e compasso, non può essere lo strumento teorico ultimo per descrivere e, soprattutto, trattare problemi pratici. Lasciamo pure perdere la risoluzione di problemi pratici... .
Semplicemente non basta. Bisogna indagare oltre nel campo degli strumenti teorici ; cioé, indagare oltre nella Matematica.

Viste le difficoltà appena descritte, la cosa più importante è indubbiamente la scoperta della possibilità di costruire un vero e proprio sistema di riferimento bidimensionale (2D intendo), metrizzato. Illustrato nella figura sotto ( fig.7 ).
[fig.7 missing]

La procedura la seguire per costruirla è fatta di 5 semplici passaggi, schematizzati sotto; dove il numero del passaggio è riportato sulla figura, con freccie che indicano l'elemento su cui ciascun passaggio opera.

COSTRUZIONE_SIS_DI_RIFERIMENTO_2D
{
Step 1:
Traccia una retta.
Step 2:
Costruiscici una retta perpendicolare.
Step 3:
Prendi il punto di intersezione dello Step 2, ed etichettalo "O"; questo il punto di Origine del piano 2D. Dai inoltre una nome alle 2 rette: ora non sono più rette qualsiasi, ma le 2 assi del sistema di riferimento.
Step 4:
Imposta una metrica su entrambe le assi. Tenendo la stessa unità di distanza su ciascuna.
Step 5:
Specifica che "u" è lo "1" geometrico: cosicché ci sbarazziamo di ogni sorta di unità di misura. Le unità di misura infatti, sono ora fuori dal nostro framework: se servono, possono essere specificate esternamente.
}

Abbiamo quindi costruito nientemeno che un Piano Cartesiano. Sperando di riuscire ad affidare il compito di operare con le quantità, a qualche strumento teorico che sia pratico per lo scopo. Appunto, serve uno strumento teorico più generale, più potente.

Abbiamo trattato la costruzione di un Piano Cartesiano: per esaltarne la struttura.
Ora trattiamone la tipica rappresentazione grafica, e le principali convenzioni sulle etichette.
Vediamone uno, con dentro un punto ( fig.8 ).

[fig.8 missing]

Dove le coordinate cartesiane del punto sono le sue proiezioni ortogonali su ciascuna asse del nostro piano cartesiano. Le frecce le ho messe io per mettere in risalto il concetto di proiezione ortogonale.

Un'altro esempio, con più punti ( fig. 9 ) .

[fig.9 missing]

Per le etichette delle singole coordinate cartesiane di un punto, è importantissimo separare bene l'indice del punto, e il nome della coordinata. Va bene una virgola, ma il trattino basso è meglio. Perché nella maggior parte dei linguaggi di programmazione, nel nome di una variabile non può esserci la virgola ; ma il trattino basso sì. Questo perché la virgola è generalmente riservata per la dichiarazione collettiva di più variabili... come nell'esempio sotto:

var p1_x , p1_y , p1_z ;
var p2_x , p2_y , p2_z ;

Il Piano Cartesiano è disegnato sempre allo stesso modo, ma ci possono essere differenze riguardo alle convenzioni sulle etichette: queste convenzioni dipendono, per lo più dal contesto. Ecco un' esempio in cui si usano convenzioni un po' diverse da quelle usate nei 2 esempi precedenti (fig. 10).

[fig.10 missing]

L'importante è usare un'insieme di convenzioni che esprimano in modo univoco e chiaro cosa è rappresentato, ed usare tale insieme di convenzioni, in modo coerente.

Eventuali dubbi si dissolveranno andando avanti. Infatti, veniamo ora ad una nota conclusiva, senza indugiare troppo.


Cosa ci si può fare col Piano Cartesiano, e perché è indispensabile soprattutto nel passare ad applicazioni pratiche che tra l'altro sono perlopiù spaziali (3D intendo), sarà delineato nel capitolo sulla Geometria Analitica.
Tuttavia, per non lasciare dubbi, una precisazione. Allora. Una presentazione dettagliata sul modo di interfacciare il nostro Piano Cartesiano e idea sottostante con misure dal mondo reale e loro specifiche unità di misura, sarà fatta nel capitolo su una delle applicazioni più importanti e utili della Matematica: la Meccanica Analitica. Bene.


Prima di concludere questa parte, è comunque importante menzionare alcune costruzioni che si possono fare facilmente con penna, riga e compasso:
A parte la circonferenza che è l'unico tipo di linea curva che figura tra le primitive geometriche, abbiamo qualche altra linea curva che si può costruire, almeno approssimativamente, con riga a compasso.
Da vedere su materiale esterno le seguenti 3 cose:
1. La costruzione dell'ellisse. Da notare che è possibile costruirne solo una approssimazione a poli-linea (chiamiamola pure approssimazione poligonale). Possiamo migliorare la fedeltà dell'approssimazione costruendo una approssimazione che ha più segmenti, ma è sempre una approssimazione. Su questo ci ritorneremo perché questa è una cosa da rivalutare con strumenti teorici più avanzati, proprio per la ricostruttività della Matematica.
2. La costruzione della parabola. Stessa storia.
3. La costruzione di una Curva di Bézier: sia quella sempliciotta (la cosiddetta quadratica ), che quella più comune e utile (la cosiddetta cubica). Stessa storia. Ma è doveroso osservare che la Curva di Bézier eccelle per le sue applicazioni, e guardacaso è stata scoperta negli anni '70 .

Misure, Quantità

e la loro definizione e manipolazione usando numeri: con l'aritmetica, e poi con l'algebra

Le 4 operazioni fondamentali ; somma, sottrazione, moltiplicazione, divisione: l'aritmetica

Volevamo giustamente affidare il compito di operare con le quantità, a qualche strumento teorico che sia pratico per lo scopo. In pratica, vorremmo che almeno la rappresentazione di numeri interi sia semplice, e in modo che l'esecuzione delle 4 operazioni di base, si possa comodamente affidare ai famosi algoritmi di somma, sottrazione, prodotto, divisione. Bene.
Un'algoritmo lavora su una struttura di dati: senza badare al contenuto che ci è stato messo.
Per i suddetti famosissimi algoritmi di somma, sottazione, prodotto e divisione, si può consultare un comune manuale di aritmetica. Sono procedure abbastanza semplici. Fatto questo, trattiamo più a fondo il concetto di numero intero... di quelli non-interi non ci interessa dato che dividendo un numero intero per un'altro, il gioco è fatto... basta ricamarci sopra un po', cosa che faremo dopo.

Pero dobbiamo riuscire a rappresentare un numero per poterci operare con quei 4 algoritmi suddetti. Il numero in sè è il contenuto: fissato un massimo di cifre oltre cui non si vuole andare, quello che contiene il nostro numero, è una struttura di dati. E qual'è? - è una base di numerazione.

La base di numerazione più importante è quella in base 2 : consultare materiale esterno.

Come esercizio, vedere come si possono automatizzare le 4 operazion di base con dei circuiti digitali relativamente semplici ; almeno darci un'occhiata... sono cose abbastanza semplici.
Per chi è particolarmente interessato, come esercizio, provare un comune chip ALU ( arithmetic logic unit ) a 4 bit, realizzando l'entrata con dei tipici bottoni a 2 stati, e visualizzando il risultato con delle lampadine LED (vedi foto n.1) .

[photo n.1 missing]

Con la rappresentazione e adoperazione di numeri interi, ci siamo: per le quantità continue, basta rifarsi al rapporto tra 2 numeri interi, della forma
n/d ,
scitta spesso anche come

n
d

già introdotta nella sezione dedicata all'interpretazione geometrica del concetto di moltiplicazione per un numero intero e divisione per un numero intero.

Intermezzo

Perché menziono la forma
n/d ,
alternativamente scritta anche

n
d

come ultima spiaggia? Perché essa riesce ad esprimere una quantità, che, in qualche modo, è continua. E così ci collega alla geometria o qualsiasi problema correlato, senza usare riga e compasso.

Bene.

Approfittiamo della risposta per parlare un po' della combinazione di moltiplicazioni e prodotti... così da non doverci pensare più.
Inutile dire che la moltilplicazione e la divisione sono collegati dal fatto che la divisione di una quantità n per una quantità d equivale alla moltiplicazione di una quantità n per una quantità 1/d . Allora. Vediamo un po' di equivalenze che ci daranno un'approccio generale.
Senza indugiare troppo, vediamo un'esempio, e la conclusione che sene trae, senza lasciare troppi dubbi su quale sia la legge ultima a riguardo.
Allora sulla sequanza di espressioni, si assume che diano tutte lo stesso risultato, anche se non compare il segno "=" (segno di uguale) nel modo in cui di solito esso compare. Questo per facilitare la redazione del testo in modo tale che sia facilmente disponibile a chi sene fruisce.

a*b*c*d
e*f

=

a*b*c*d*(1/e)*(1/f)

=

a*1/e*b*c*c*1/f*d

=

.
.
.

=

casino totale...

=

NUMERATORE
DENOMINATORE

=

è il tipo di risultato che si ottiene. SEMPRE!

=

un "Numero Razionelale" che si dice: un numero dell'insieme Q .


Bene. Ma proviamo a dire

Eh l'edicola più vicina dista
1389
23
metri da casa mia.
: è vagamente comprensibile sì, ma di difficile lettura.

I Numeri Razionali, infatti, non sono di facile lettura: essenzialmente perché ci può stare un pò di tutto sia al Numeratore che al Denominatore. In sostanza, il problema è che ci sono infinite forme equivalenti che si possono ottere moltiplicando il Numaratore e il Denominatore per uno stesso numero.

In formule ( formula cartacea n.1 ) :

[ hand-written formula n.1 missing ]

dove però non è detto che n e d non abbiano un divisore comune. Per accertarsene, bisognerebbe infatti fare la completa procedura di Scomposizione in Fattori Primi ( consultare materiale esterno su che cos'è e come è fatto ), sia di n che di d, per poi semplificare tutti gli eventuali fattori che essi hanno in comune ( formula cartacea n.2 ) .

[ hand-written formula n.2 missing ]

Per ottenere infine la forma normale del quoziente, la forma cioé, che non può essere semplificata oltre.
Dunque, qui ci sono 2 problemi.
1. Per eseguire la scomposizione in fattori primi, serve una tabella dei numeri primi, che è una informazione lessicale. Con questo intendo dire che sebbene, avendo tale lista la scomposizione in fattori primi si presenti come un'algoritmo a tutto diritto, proprio per la necesità di usare un dizinario lessicale esterno di grandezza non definita, non è un algoritmo a tutto diritto.
2. Tutto il discorso fatto finora era per dire che una scritta della forma n/d è utile sì, ma non è di scrittutra e lettura univoca, perché abbiamo una situazione come quella illustrata nello schema sotto ( formula cartacea n.3 ).

[ hand-written formula n.3 missing ]

L'essenza del problema è che un scritta del tipo n/d, cioé un numero razionale ( ne riparleremo ) così com'è, non forma una Struttura di Dati ( ne riparleremo ).

Generalizziamo l'aritmetica e giungiamo all'algebra

Bene... l'aritmetica ci ha garantito la possibilità di definire e scrivere, una quantità continua nella forma
n/d,
e va bene: è una quantità continua, e tutto. Da questo punto in poi, possiamo, a tutto diritto, rappresentare un numero con un semplice simbolo: nel più semplice dei casi, con un lettera. Per poi indicare, nella scrittura formale di una serie di operazini tra varie di queste quantità "continue", con lettere e i 4 simboli corrispondenti alle 4 operazioni fondamentali. Quello che stiamo per fare è comunemente chiamata "algebra".
Ma facciamo qualche precisazione prima di andare oltre: è bene poter trattare con quantità continue, senza addentrarsi troppo nella loro rappresentazione. Ma prima o poi, bisogna definire come si rappresentano. E una rappresentazione, scrittura ed immagazzinamento di tali quantità, non può farlo altro che una stuttura di dati adeguata a contenere questo tipo di informazione.

Vediamo dunque di delineare le regole, fatti, e convenzioni di base dell'algebra.

Prima di tutto vediamo come operare con le somme, sottrazioni, moltiplicazioni, e divisioni: per creare delle espressioni composte.

Le espressioni (algebriche)

Per una serie di somme e sottrazioni, nessun problema:

a + b + c + d

Per giusitificare che fin qui tutto ha un senso perfettamente ben-definito e che la scrittura la si può leggere in modo univoco e facile ( anche questo è un punto importante! - abbiamo bisogno di strumenti teorici pratici per essere pratici nella vita ), riscriviamola nelle forma imposta dalla definizione.
n1/d1 + n2/d2 + n3/d3 + n4/d4
A questo punto, revertiamo questa scrittura nella forma in cui ad un rapporto corrisponde un solo simbolo, ma usando indici numerici attaccati sempre allo stesso simbolo di base, facciamo che sia il simbolo x :

x1 + x2 + x3 + x4

Bene. Per non lasciare dubbi, è chiaro che possiamo usare qualsiasi simbolo come base, vediamo l'espressione di sopra usando la a come simbolo di base:

a1 + a2 + a3 + a4

La notazione è puramente convenzionale, ma è una cosa importante perché in contesti diversi ci possono essere notazioni diverse.


Focalizziamo sulle operazioni: le somme e le sottrazioni non danno problemi. Vediamo un'esempio di espressione in cui vi sono sia somme che sottrazioni:

a1 - a2 - a3 + a4

Non è complicato. Ma le moltiplicazioni e le divisioni? Torniamo alla definizione... :

n1/d1 + n2/d2 + n3/d3 + n4/d4

Delle divisioni vi figurano già! - ma andiamo con cautela. Dato che noi finora abbiamo lavorato con la convenzione secondo cui
ni/di = ai
in realtà ci ha suggerito implicitamente che se volessimo scrivere in modo quanto chiaro possibile, potremmo tenere la definizione e mettere parentesi intorno a ciascun tomo del tipo
ni/di
... facciamolo, e vediamo cosa sucede.
Succede, che la nostra espressione diventa:

( n1/d1) + ( n2/d2 ) + ( n3/d3 ) + ( n4/d4)

il che però suggerisce la possibilità di riscrivere la stessa cosa anche in altri modi, ad esempio come

1*( n1/d1) + 1*( n2/d2 ) + 1*( n3/d3 ) + 1*( n4/d4)

e quindi anche come

n1*( 1/d1) + n2*( 1/d2) + n3*( 1/d3) + n4*( 1/d4)

il che ci mette dentro anche il prodotto.

Benissimo.

Ma allora quali sono le regole per mettere le parentesi?
Dato che le parentesi definiscono in modo forzato l'ordine in cui fare i calcoli, bisogna approfondire le regole in cui le si possono mettere, senza che venga alterato il risultato finale una volta che l'espressione viene calcolata, viene valutata.
Il problema è che tra prodotti, divisioni, somme e sottrazioni, le parentesi non si possono mettere a caso. Qui la mia preparazione traballa, per cui consultare materiale esterno, ma la regola per mettere le parentesi consiste in una semplice regola: il prodotto e la divisione hanno priorità maggiore della somma e sottrazione ; ed una coppia di parentesi che delimitano una parte di un'espressione, ha PRIORITA' ASSOLUTA, cioé le parentesi hanno la priorità più alta (FONDAMENTALE!!).
E la stesura di parentesi, se si mettono, deve rispettare questo. Non velo so dimostrare in modo rigoroso, ma vi porto piuttosto 2-3 ragionamenti per fare almeno un minimo di luce sul perché della cosa, e il perché sta cosa delle priorità salta fuori.


L'argmento delle operazioni a-due-a-due: la valutazione di una espressione SI DEVE poter ridurre ad una sequenza di operazioni a-due-a-due ( a coppie, intendo ) perché le operazioni sono definite a-due-a-due. Dunque. Da questa richiesta del tutto legale e logicamente semplice, deriva che si deve poter eseguire sta riduzione. Ma questo è possibile solo se si dà priorià assoluta alle parentesi, priorità maggiore alla [ moltiplicazione , divisione ] , e priorità minore alla [ somma, sottrazione ].
Vediamo una sorta di dimostrazione per assurdo, che ho ideato io per Voi, cari Lettori, che cerca di essere anche un po' divertente. Allora.

a*b + d*e ; partiamo da una espressione che abbia sia somme che prodotti.

=

(a*b) + (d*e) ; prima di tutto, iniziamo a stilare delle parentesi, per isolare i monomi.
Speriamo almeno di fare giusta la commutatività della somma e della moltiplicazione, separatamente...
lì non c'è tanto da sbagliare, basta infatti applicare la definizione.

=

e ora, senza indugiare troppo, vediamo cosa viene fuori se mettiamo tra parensi la somma tra b e d .


a*(b + d)*e =
a*e*(b + d) ; qui abbiamo raccolto, ed è giusto. Facciamo il prodotto.
a*e*b + d*e*a Fin qui è giusto. Ora mettiamo (è sbagliato ma proviamo) tra parentesi il tomo "b + d" (è sbagliato ma proviamo)
a*e*(b + d)*e*a =
a*e*a*e*(b + d) =
a*e*a*e*b + d*a*e*a*e Ora mettiamo ancora le parentesi in modo sbagliato, e facciamo di questa cosa una routine e vediamo la fila di espressioni che vengono.
a*e*a*e*(b + d)*a*e*a*e ?
a*e*a*e*a*e*a*e*(b + d)*a*e*a*e*a*e*a*e ?
................*(b + d)*................ ?
?................*(b + d)*................? ?
A parte il fatto che le espressioni non si equivalgono, l'espressione cresce a dismisura.
E questo fatto proibisce la possibilità di arrivare mai ad una forma in cui la possiamo valutare.
ASSURDO: le espressioni SI DEVONO poter valutare.
Come volevasi dimostrare.

L'espressione cresce a dismisura... all'infinito. E ovuque compaia l'infinito o il sospetto di esso, mette in guardia. Perché làddove c'è l'infinito, è qualcosa che non forma una struttura di dati : non è pertanto di lettura e scrittura univoca. E questo non ci piace.




Come secondo argomento, diciamo che nella maggior parte delle applicazioni, si adoperano polinomi: cioé una somma di monomi. Dove, perlopiù i singoli monomi contengono anche elevamenti a potenze intere - che però pur sempre è una moltiplicazione. Il caso più semplice e comune, è:

k0 + k1*x1 + k2*x2 + k3*x3 + k4*x4 + ...

dove nel termine x1 ho lasciata inidicata la potenza 1, per enfatizzare che non è un'eccezione e non è un'errore di battitura, anche se x1 è uguale a x inquanto elevare alla potenza 1 è come lasciare l'elevando così com'è.

Dunque, la [ moltiplicazione , divisione ] ha un priorità maggiore della [ somma , sottrazione ] perché altrimenti la affermazione di sopra non sarebbe valida e regnerebbe il caos totale.

Certo, è vero che tutti i polinomi si riconducono ad una espressione del tipo menzionato poco prima, ma talvolta vengono scritte in modo leggermete diverso per enfatizzare questo o quello. Vediamo un'esempio ( polinomio che esprime una curva di Bézier, cubica - che poi verrà trattata meglio in un'altro capitolo ) ... prima una figura che illustra cosa sia grossomodo ( figura a grafica vettoriale n.1 ), e poi l'espressione algebrica corrispondente :

[ vector_graphics_image_n1 missing ]
figura a grafica vettoriale n.1

P1*(1-t)3 + P2*3*(1-t)2*t + P3*3*(1-t)1*t2 + P4*t3


Come esercizio, sviluppatelo e vedete che viene un polinomio come quello discusso prima. Se è troppo laborioso, provate con una curva di Bèzier più semplice, la quadratica ( figura a grafica vettoriale n.2 ).

[ vector_graphics_image_n2 missing ]
figura a grafica vettoriale n.2

P1*(1-t)2 + P2*2*(1-t)*t + P3*t2

Alla fine non stiamo mica facendo cose stratosferiche... .


C'è una nota importante da aggiungere all'espressione

k0 + k1*x1 + k2*x2 + k3*x3 + k4*x4 ...

Ed è che, nel caso di polinomi di questo tipo, vi è anche la frazione di 2 di essi:


n0 + n1*x1 + n2*x2 + n3*x3 + n4*x4 + ...

d0 + d1*x1 + d2*x2 + d3*x3 + d4*x4 + ...


Dove i moltiplicatori ni e di ( talvolta chiamati coefficienti ma fa niente... ) non sono affatto necessariamente interi, ma li ho scritti così per enfatizzare la forma

P
Q

Senza indugiare troppo con spiegazioni ulteriori, diciamo che questo tipo di espressione, perlomeno come forma, si è guadagnata una attenzione enorme dopo gli anni '70 grazie alla speriamentazione coi, e lo sviluppo e produzione industriale dei, filtri digitali.

Per polinomi che invece contengono più variabili, il caso della frazione di 2 di essi non ha alcun perticolare significato, che ne sappia.

Comunque sia, ne vedremo molti di quel tipo, nella sezione sulla Meccanica Analitica.

ESERCIZIO: Come esercizio, usando un programma che può disegnare il grafico di espressioni quali il polinomio e il rapporto tra 2 polinomi, fare della prove, possibilmente conservando l'esito. Basta variare il valore dei moltiplicatori... . Per il rapporto di 2 polinomi, provare anche a disegnarli in scala logaritmica: sia nel caso in cui è l'asse orizzontale ad essere in scala logaritmica, sia nel caso in cui entrambe le assi hanno una scala logaritmica. Per questo esercizio, è meglio adoperare un programma come wxMaxima, dato che i valori dei moltiplicatori si possono variare senza scrivere direttamente nell'espressione, ma semplicemente assegnando valori diversi a questi. Il programma wxMaxima fà anche i grafici: conservare le 'prove' in forma ti file-script tipo prova_polinomi_1.wxm per poterli riutilizzare. Sono utilissimi!

NOTA IMPORTANTE:
per ora, non tentate di graficare le espressioni corrispondenti a curve di Bézier, perché non vi verrano come nelle figure di esempio ; questo perché lì, quei coefficienti Pi non si comportano come dei semplici moltiplicatori, ma come qualcosa che tratteremo più in là (fra non molto). Ed è il motivo per cui li ho scritti in grassetto.


Mettiamo insieme le cose, e inquadriamo l'algebra

A questo punto, dopo aver imbastito un po' di cose, consultare un comune manuale di algebra, e fare una lista di argomenti.
Collezionare quindi il piccolo toolkit di strumenti teorici che l'algebra dà.
La possibilità di trovare la soluzione di un polinomio di secondo grado eguagliato a 0, è utile.

Per varie ragioni, saper trasformare una espressione in un'altra equaivalente prima di valutare anche 1 sola delle variabili, è anch'esso utile ed interessante.
( a + b )2 = ( a + b )*( a + b ) = a*( a + b ) + b*( a + b ) = a2 + b2 + 2*a*b =

 
 (   
     ( 
       (a*a) 
         + 
       (b*b) 
     )
  
     +

     (
       (2*a)
         *
        (a)
     ) 
 ) 
 

Ecco quindi l'espressione iniziale, preparata per la sequenzializzazione per operazioni a-due-a-due... per farVi contenti. Questo sarà approfondito in un'altro sottocapitolo, che verrà fra breve.

Una volta preparata una espressione per la sequenzializzazione, per valutarla, basta calcolare il valore dei singoli monomi, prendere questi valori, e pian piano sommare, accumulare questi valori. Non è male: lo vedremo meglio più in là. Una nota conclusiva: la cosa del
( a + b )2
la si può fare anche per potenze più elevate, anche se ciò è, che io ne sappia, interessante solo dal punto di vista teorico. Consultare materiale esterno a chi interessa.

Una cosa simile ma utile dal punto di vista pratico (vedremo il perché in un'altro capitolo), è questo:

( a + b + c + d + ... )2 = a2 + b2 + c2 + d2 + ... + 2*a*b + 2*a*c + 2*a*d + 2*b*c + 2*b*d + ...

C'è qualche altra cosa utile, come l'idea del raccoglimento, ma il sommo della cosa sono le sostituzioni: vedremo perché.

Intanto, diciamo: si evince che sono pochi gli strumenti teorici nel notro kit di strumenti. Però, ed ecco, l'idea della sostituzione di una variabile con un'altra espressione, ci porta all'idea di provare a risolvere un sistema di equazioni lineari. Quella è l'unica cosa veramente utile ; ed ognipresente nella Mateamtica Applicata, vedremo più in là il perché. Consultare materiale esterno per vedere un po' cosa è un sistema lineare: ci torneremo meglio dopo ; basta veramente solo un'occhiata quindi.

Misure, Quantità, Primitive Geometriche, Qualità

e la loro definizione con strutture di dati e la loro manipolazione con algoritmi

Le espressioni ( algebriche ) - ripresa

Partiamo da una espressione già stilata di parentesi. Stilata di parentesi in modo che esse riducano l'espressione ad una forma che è adatta alla valutazione sequenziale. Ad una valuetazione sequenziale tale che presenti esclusivamente operazioni a-due-a-due.

Partiamo da una espressione che soddisfa la richiesta precedente. Intendo usare come esempio, la seguente espressione:


(((a*b)*(c))+(d*e))


Da cui ora togliamo gli operandi ( rappresentati con lettere ) e anche gli operatori ( rappresentati coi simboli "*" ed "+" ).


(((   ) ( )) (   ))


Espressione fatta puramente di parentesi, da cui poi togliamo gli spazi vuoti, per avere una scritta fatta solo di parentesi.


((()())())


Espressione di cui ora presentiamo una interpretazione, la quale è schematizzata nella figura sotto (formula cartacea n.4)

[ hand-written formula n.4 missing ]


Questo esempio, introdotto gradualemente, commentato e corredatao di espressioni e figure, dovrebbe riuscire ad illustrare un po' l'idea di base. Quindi evito di stra-spiegare: ragionateci e vedrete che è abbastanza semplice.

Quindi... .

Una volta preparata una espressione per la sequenzializzazione ( o chiamiamola valutazione sequenziale ), la valutazione consiste nel percorrere l'albero binario corrispondente, tramite l'algoritmo di Percorrenza in Profondità ( in inglese si dice: Depth-First Search ), e una volta raggiunto un nodo-foglia dell'albero binario, prendere il valore che c'è lì, prendere l'operatore, ed eseguire l'operazione appena si arriva ad un prossimo valore. Da questo si evince, ecco ancora una volta il valore euristico della Matematica, che le parentesi sono mal-stilate in un'espressione, se la procedura non riesce a percorrere l'albero binario corrispondente.
Detto meglio, in una espressione, le parentesi sono stilate bene se nell'albero binario corrispondente, ciascun nodo ha 2 figli.

Fine! - semplice, vero?

ESERCIZIO ( opzionale... fatelo solo se Vi entusiasma, perché questo qua potrebbe risulare un po' noioso per alcuni ; potete sempre tornarci quando vi va ) :
Un'esercizio molto istruttivo, interessante e che dà un risultato molto utile in tantissimi contesti, è questo. Creare un piccolo programma che interpreta espressioni algebriche.

a) Prima, nell'assunzione che l'espressione sia già stilata con le parentesi, sia cioé preparata per la valutazione sequenziale.
b) Potenziare il programma ( tenendo separato nella propria libreria il programma di prima ) perché non richieda la stilatura completa delle parentesi.
c) Potenziare il programma del punto b) affinché, nel caso di espressioni con parentesi mal-stilate, dia messaggi di errore precisi, che indicano dov'è il primo errore ( tanto, prima di trovrne di altri, va trovato il primo, va corretto, e poi si deve ritentare ).



Con l'interpretazione, la lettura univoca e completamente meccanica, cioé algoritmica, di un'espressione agebrica, ci siamo. Bene.
La manipolazione di primitive geometriche con espressioni simboliche non manca ovviamente, ma verrà delineata nel capitolo sulla Geometria Analitica. Uno strumento teorico che applica l'uso di numeri, variabili generiche e la loro manipolazione algebrica, unitamente al concetto di equazione, alla geometria.


Riprendiamo un po' la cosa sulle stutture ad albero.

Le stutture ad albero - introduzione

Ci sono tante cose che mostrano una struttura che si può rappresentare con una struttura ad albero. In genere tutte le cose che in qualche modo hanno una struttura gerarchica, sono così.
Un pedigree ( detto anche albero genealogico ) e un'organigramma sono esempi immediati. Ma sono esempi molto vecchi. Vediamo qualcosa di più moderno... . Allora.

Un tipo molto importante di cosa che si può rappresentare con una struttura ad albero, è una suddivisione. Che sia di una linea o di una area. Vediamo 2 esempi di suddivisione di una area rettangolare.

a) [fig.11a missing] | b) [fig.11b missing]

Le due figure sono state create da un programmino che ho scitto io in C++, che si può scaricare da qui:

[METTERE LINK]

ESERCIZIO: Come esercizio, provarlo, e costruirci varie suddivisioni di un rettangolo 2D. Nota sull'uso: su qualsiasi sistema operativo si operi, è sufficiente installare un compilatore C++, compilare il programma in eseguibile, ed eseguire l'eseguibile ivi creato. Questo programmino infatti, usa solo la libreria standard del C++ : è stato concepito apposta, per aggirare problemi di compatibilità.


Un'altro esempio è un tipico menu ad apertura. Illustrato sotto ( fig.12 ).

[fig.12 missing]

Il programmino si può scaricare e provare in qualsiasi momento: è una browser-app, basta decomprimere il file *.zip scaricato, entrare nella cartella che si crea, ed aprire il file index.html con un internet-browser. Si può anche provare direttamente online. Ecco riportato sotto il link dove reperirlo:

http://gamejolt.com/games/graphical-user-interface-simulator/181853


Un sistema di cartelle è un'altro esempio. La figura sotto cerca di illustare la cosa ( figura n.13 ).

[FIG.]


ESERCIZIO:
Un'esercizio molto istruttivo e di cui il risultato è utilissimo per tante cose, può essere questo:
implementare una sorta di "simulatore" di navigazione in un sistema di cartelle virtuali. Inizialmente basta che una cartella possa contenere al massimo 2 sottocartelle. Sarà facile generalizzare. Tuttavia, prima di decidere se andare per la versione semplificata o per quella generale, leggete tutta quanta questa scheda di esecizi, perché la maggiore semplicità della versione con massimo 2 sottocartelle per ciascuna cartella, non è sempre vera.
Per chi è più creativo, o è orientato all'algoritmica, è meglio ancora se c'è la possibilità di creare cartelle e cancellare cartelle ( questa è più cattiva, perché prima di cancellarla va cancellato tutto il suo contenuto... se lo fate, ingegnatevi, o lasciate pardere e tornateci dopo che l'argomento è stato approfondìto nel capitolo dedicatoci ), come anche creare e cancellare file virtuali ( nel senso che alla fine non contengono nulla ) all'interno di una cartella. Il concetto è un po' come quello fatto da me sul sistema di menu.
Per tale scopo pero, consiglierei l'uso del linguaggio C e non il Javascript. Questo per due motivi: uno, è che un'output grafico è poco importante in questo caso e l'input/output di testo è facile col linguaggio C ; e due, la sintassi del C rende più facile la realizzazione della cosa.

Per chi vuole essere ancora più creativo, o è particolarmente orientato all'algoritmica, può implementarci anche la possibilità di cercare un file virtuale con un dato nome, usando un'algoritmo di attraversamento di una struttura ad albero.

Naturalmente è bene tenere separate le 3 varianti del programma, in modo da avere materiale che si può revisionare più facilemente, all'occorenza.


alternativa:
Per chi invece insiste nel lavorare col linguaggio JavaScript, naturalmente non lo lascio senza supporto. Ho infatti creato una cornice di programma che implementa un input/output di testo uguale a quello che fornisce la libreria standard del linguaggio C. Potete scaricarlo dal link riportato sotto.

http://gamejolt.com/games/extreme-cli-simulator/212810

Riporto una figura che illustra un po' il sodo di quello che questo programma fa, a colori falsi ( schermata di programma n.1 ).


Prima, provatelo : per vedere cosa fa... in cosa consiste, in poche parole una immissione/emissione di testo.
Dopo, consultate il codice sorgente, e, preferibilmente isolate la parte compresa tra il blocco "script" e "/script" in un file esterno (consultate riferimento esterno per vedere come si fà), e studiate un po' come funiona il programmino sui menu, per riversare la funzionalità di un sistema di navigazione tra cartelle, in quella struttura di software.
In alternativa, tenete lo index.html così com'è, e isolate in uno file sorgente esterno la ipotetica funziona Process_input(). Anche questa è una opzione buona ; come vantaggio rispetto al primo approccio, c'è che l'I/O di testo è separato dal resto. Dato che la I/O rimane nel file index.html, insieme alla struttura minima scritta in HTML, e tutto il resto sta in un file sorgente esterno che è puro JavaScript.



Un'altra cosa che, forse non la esibisce a prima vista ma che può essere rappresentata con una struttura ad albero, c'è un qualsiasi pannello di strumenti. Vedete la figura (figura).

[FIGURA]

Non è pura teoria a fine sé stessa. Nella libreria di simulazione di volo JSBSim, si usa questa rappresentazione astratta per definire il pannello-di-controllo di un generico aereo. E questa è una soluzione generale ed efficiente.

Come ultimo esempio, che sarà trattato nel capitolo sulla Meccanica Analitica, c'è l'architettura di base dei corpi articolati, cioé in altre parole, dei meccanismi... macchinari che hanno parti in movimento ( figura ).
[FIG.]