Nel linguaggio di programmazione Fortran, l'uso dei cicli DO è fondamentale per eseguire operazioni ripetitive e gestire i dati in modo efficiente. Tuttavia, è essenziale comprendere bene il comportamento dei cicli e le dichiarazioni di formato per evitare errori e ottenere il risultato desiderato.
Un ciclo DO in Fortran permette di ripetere un blocco di istruzioni un numero determinato di volte. Un esempio classico è il programma che calcola tutti i fattori di un numero intero. Il codice seguente mostra come questo possa essere realizzato:
Questo programma legge un numero intero N e stampa tutti i suoi fattori. Il ciclo DO scorre i valori da 1 a N, calcolando il resto della divisione di N per ogni valore I tramite la funzione MOD. Se il resto è zero, significa che I è un fattore di N e viene stampato.
Quando si utilizzano i cicli DO, è essenziale prestare attenzione per evitare cicli infiniti. Ad esempio, il seguente codice crea un ciclo senza fine:
Questo programma esegue il ciclo I 1000 volte, ma poi il controllo passa al comando GOTO, che lo riporta all'inizio del ciclo DO. Di conseguenza, il ciclo si ripete all'infinito, richiedendo l'interruzione manuale del programma tramite la combinazione di tasti CTRL+C.
Un'altra forma avanzata di ciclo DO è il ciclo annidato, in cui un ciclo DO è inserito all'interno di un altro ciclo DO. Ad esempio, per stampare i numeri da 1 a 5, ripetendo ogni numero N volte, dove N è il valore del numero, si utilizza il seguente codice:
In questo programma, il ciclo esterno (I) esegue 5 iterazioni, e per ogni iterazione, il ciclo interno (J) stampa il numero I un numero di volte pari al valore di I stesso. Quando I=1, J esegue 1 iterazione, quando I=2, J esegue 2 iterazioni, e così via. Il risultato finale è una sequenza di numeri stampati come richiesto.
Per applicare i cicli DO a vari altri problemi, è importante comprendere anche la struttura delle dichiarazioni di lettura e scrittura dei dati, che in Fortran sono gestite tramite le istruzioni READ e WRITE. Queste dichiarazioni permettono di leggere e scrivere dati in modo formattato, utilizzando un numero di formato specificato.
La dichiarazione READ è utilizzata per leggere i dati da un dispositivo di input. Il formato generale di una dichiarazione READ è:
Dove N1 rappresenta il numero hardware del dispositivo di input (solitamente il tastiera, indicato con *), e N2 è il numero della dichiarazione FORMAT che specifica come i dati devono essere letti. I valori V1, V2, V3, … sono i variabili che si desidera leggere.
Analogamente, la dichiarazione WRITE è utilizzata per scrivere i dati su un dispositivo di output, come il monitor del computer. La sua forma generale è:
Dove N1 è il dispositivo di output (di solito * indica il monitor) e N2 è il numero della dichiarazione FORMAT per specificare come visualizzare i dati.
Le dichiarazioni di formato (FORMAT) sono essenziali per controllare la disposizione dei dati in output. Ad esempio, se si vuole che un numero intero venga visualizzato con una larghezza specifica, si può usare il formato I. Se si tratta di un numero reale, si utilizza F, mentre se il numero deve essere espresso in notazione scientifica, si utilizza E. La sintassi è la seguente:
-
I FORMAT: Per un numero intero con larghezza specifica. Esempio:
FORMAT(I4)per un intero con larghezza 4. -
F FORMAT: Per numeri reali con una larghezza e un numero specificato di decimali. Esempio:
FORMAT(F8.2)per un numero reale con larghezza 8 e 2 decimali. -
E FORMAT: Per numeri espressi in notazione scientifica. Esempio:
FORMAT(E10.3)per un numero in notazione scientifica con 3 decimali. -
X FORMAT: Per saltare un numero specifico di colonne.
Questi formati sono utilizzati per controllare l'output e garantirne la corretta visualizzazione. È fondamentale specificare la larghezza appropriata per evitare errori di visualizzazione, come l'allineamento errato dei numeri o l'errore di overflow.
Un altro aspetto importante è l’uso del controllo del carrello (carriage control). Quando si utilizza una stampante come dispositivo di output, il primo carattere dell’output viene perso. Per evitare che ciò influisca sulla leggibilità dell’output, il primo carattere deve essere uno spazio vuoto.
Oltre a questi concetti base, è utile familiarizzare con la gestione delle variabili dimensionali, poiché permette di utilizzare loop impliciti per operazioni più complesse, come la lettura di matrici o la gestione di array multidimensionali.
Come ottenere la derivata numericamente: differenze centrali e metodi con dati tabulati
La derivata di una funzione in un dato punto è una delle operazioni più fondamentali in analisi matematica. Tuttavia, in molte situazioni pratiche, non abbiamo a disposizione una funzione esplicita, ma solo un insieme di dati o una funzione che non possiamo derivare direttamente. In questi casi, le tecniche di differenziazione numerica diventano essenziali. Qui esploreremo due metodi di derivazione numerica: la formula delle differenze centrali, che richiede una funzione esplicita, e la formula delle differenze in avanti a tre punti, utilizzabile quando i dati sono tabulati.
Nel primo caso, supponiamo di conoscere la funzione. La formula delle differenze centrali per la derivata di una funzione è basata sull'espansione in serie di Taylor ed è data da:
dove è un piccolo passo incrementale attorno al punto . Questa formula fornisce un valore approssimato della derivata, poiché si è troncata la serie di Taylor a partire dal secondo termine della derivata. È importante notare che il risultato dipende dalla scelta del passo : se troppo grande, l'errore di calcolo aumenterà, ma se troppo piccolo, l'errore dovuto all'approssimazione numerica e agli errori di arrotondamento crescerà. Quindi, bisogna trovare un equilibrio ottimale tra il passo e l'accuratezza desiderata.
Ad esempio, consideriamo la funzione . Se vogliamo calcolare la derivata di questa funzione nel punto , possiamo utilizzare la formula delle differenze centrali con passi che variano da 0,01 a 0,1 in incrementi di 0,01. In questo caso, la derivata analitica è , e confrontando i risultati numerici con il valore esatto, si osserva che l'errore diminuisce man mano che il passo si riduce, ma a un certo punto l'errore di arrotondamento prende il sopravvento, come si può vedere dai dati numerici ottenuti.
Inoltre, se consideriamo un'altra funzione, come , anche in questo caso vediamo un errore simile che aumenta con il passo . La conclusione è che la formula delle differenze centrali è generalmente sufficientemente precisa per molte applicazioni, a condizione che il passo venga scelto con attenzione.
Nel secondo caso, quando non conosciamo la funzione ma solo un insieme di dati , dove rappresentano i valori di una funzione sconosciuta nei punti , possiamo applicare la formula delle differenze in avanti a tre punti. In questa situazione, la derivata di in un punto può essere approssimata dalla formula:
Questa formula utilizza i valori di in tre punti successivi , , e per calcolare un'approssimazione della derivata. Il vantaggio di questo metodo è che possiamo utilizzarlo quando i dati sono già tabulati, senza bisogno di conoscere esplicitamente la funzione. Se i dati sono equidistanti, il passo è costante e l'approssimazione della derivata diventa piuttosto semplice da calcolare.
Nel programma illustrato, vengono forniti i dati tabulati per la funzione, e viene richiesto di calcolare la derivata in un dato punto utilizzando i valori successivi di . La derivata è calcolata per ciascun punto usando la formula descritta e il risultato viene confrontato con i dati di ingresso, ottenendo errori molto piccoli. Questo metodo si dimostra sufficientemente preciso anche per funzioni complesse.
Tuttavia, è essenziale comprendere che la qualità della derivata numerica dipende dalla qualità dei dati tabulati. Se i dati sono affetti da errori di misura o imprecisioni, ciò si rifletterà inevitabilmente nei risultati derivati. Inoltre, come nel caso delle differenze centrali, l'accuratezza dipende anche dalla scelta del passo . Passi troppo grandi possono introdurre errori significativi, mentre passi troppo piccoli possono amplificare gli errori numerici legati all'arrotondamento.
In contesti più avanzati, quando si lavora con dati sperimentali o tabulati in applicazioni reali, è fondamentale considerare anche il rumore nei dati. La derivazione numerica può essere sensibile a piccole fluttuazioni nei dati, e metodi più sofisticati come il filtro di smoothing possono essere necessari per ridurre l'influenza del rumore. Inoltre, è utile fare attenzione a come i dati vengono acquisiti: errori sistematici possono compromettere l'accuratezza complessiva del calcolo.
Infine, è importante tenere presente che questi metodi numerici, pur essendo utili, hanno limiti. Sebbene siano potenti, la precisione di questi metodi dipende dalla qualità dei dati di ingresso, dalla scelta del passo , e dai potenziali errori di arrotondamento. Pertanto, un'accurata analisi dei risultati numerici è sempre essenziale per garantire che le approssimazioni ottenute siano sufficientemente precise per l'applicazione desiderata.
Come si esegue l'adattamento di una retta con il metodo dei minimi quadrati ponderati?
Nel capitolo XXI (Programma 134) abbiamo esaminato l'adattamento di una retta a un insieme di dati (xi, yi) utilizzando il metodo dei minimi quadrati. Tuttavia, spesso i dati yi contengono errori, il che implica che abbiamo un insieme di dati del tipo (xi, yi, σi), dove σi rappresenta l'incertezza associata a ciascun valore di yi. Un altro caso frequente riguarda i dati ponderati, in cui a ciascun punto di dato yi viene assegnato un peso wi, dove wi = 1/σ²i.
Un esempio di tale situazione si presenta quando i dati vengono acquisiti con errori e il grafico mostra i punti di dati accompagnati da barre di errore, con la retta di adattamento tracciata sopra di essi. Il compito, quindi, è adattare una retta ai dati che includono tali incertezze.
Il metodo per adattare la retta è simile a quello già discusso, ma con una differenza significativa. In questo caso, il residuo deve essere calcolato come , invece di . Se consideriamo l'equazione della retta come , le equazioni normali risultano:
Queste equazioni possono essere riscritte come:
Dove , , , e così via. Risolvendo il sistema di equazioni (ad esempio, con la regola di Cramer), si ottengono i valori per e :
Dove è il determinante. Inoltre, si possono calcolare gli errori nelle stime dei coefficienti e come segue:
Il programma riportato mostra come eseguire questi calcoli, ottenendo la retta di adattamento e i residui, e infine visualizzando il risultato. Vengono anche calcolati gli errori nei coefficienti e , che rappresentano l'incertezza associata all'adattamento della retta.
Il risultato dell'adattamento di una retta ai dati, dopo aver preso in considerazione gli errori nei dati stessi, permette di ottenere una rappresentazione più precisa dei dati misurati. È importante notare che il metodo dei minimi quadrati ponderati è particolarmente utile quando i dati sono soggetti a incertezze di diversa entità, e in queste circostanze fornisce un'approssimazione migliore rispetto a una semplice regressione lineare.
Inoltre, la somma dei residui quadrati e il residuo quadratico medio (RMS) vengono utilizzati come indicatori della qualità dell'adattamento. Un valore basso di RMS indica un buon adattamento ai dati, mentre un valore elevato suggerisce che la retta di adattamento non descrive bene i dati.
La stessa metodologia, applicata a un altro esempio, può riguardare il calcolo degli angoli di Bragg in un esperimento di diffrazione di raggi X. In un tale caso, è necessario calcolare gli angoli a cui si osservano le linee di diffrazione, utilizzando la famosa equazione di Bragg:
dove è la lunghezza d'onda della radiazione (ad esempio, la radiazione Cu Kα), è la distanza tra i piani reticolari, e è l'angolo di diffrazione. Nel contesto di cristalli con una struttura cubica a facce centrate (FCC), è fondamentale tenere conto delle condizioni di assenza sistematica, dove solo i valori di pari o dispari generano diffrazione. Il programma riportato calcola gli angoli di diffrazione per i vari indici di Miller (h, k, l), generando i valori di e per ciascun insieme di indici.
La combinazione delle tecniche di adattamento lineare ponderato con il calcolo degli angoli di Bragg offre una comprensione fondamentale di come analizzare i dati scientifici in presenza di errori misurabili, utilizzando metodi statistici robusti che permettono di ottenere stime più precise e affidabili.

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский