In Fortran, le funzioni matematiche possono coinvolgere variabili singole, doppie o addirittura triple. A seconda della complessità del problema da risolvere, è possibile definire funzioni di uno o più argomenti, a cui si può accedere tramite chiamate dirette nel programma principale. Analizziamo alcuni esempi per comprendere come vengono gestite le funzioni di più variabili e l'utilizzo dei sottoprogrammi.
Nel primo esempio, abbiamo due funzioni di due variabili:
Il programma principale richiede all'utente di inserire i valori di e . Successivamente, calcola i valori delle funzioni e a specifici punti, come , e . Il codice Fortran per calcolare questi valori è il seguente:
L'output risultante può essere qualcosa di simile al seguente:
Nell'esempio, vediamo che , e rappresentano i valori delle funzioni calcolate in vari punti. Inoltre, viene effettuata una combinazione dei risultati delle funzioni tramite una semplice operazione aritmetica.
Le funzioni di tre variabili sono ancora più complesse. Un esempio potrebbe essere la funzione che calcola il valore di , dove , e sono le variabili. La funzione viene definita come segue:
In questo caso, per calcolare il valore della funzione , il programma principale legge i valori delle variabili, calcola i risultati necessari e li stampa:
L'output in questo caso potrebbe essere:
Un altro aspetto importante da comprendere è il concetto di sottoprogrammi in Fortran. Quando una funzione diventa troppo complessa da definire con una semplice espressione aritmetica, è possibile utilizzare un sottoprogramma che esegue il calcolo e restituisce il risultato al programma principale. Un sottoprogramma di funzione è una parte indipendente del codice che accetta variabili (argomenti) e restituisce un singolo valore. La sintassi di un sottoprogramma di funzione è la seguente:
Un esempio semplice di sottoprogramma potrebbe essere il calcolo delle potenze di un numero. Supponiamo di voler calcolare , , e . Il sottoprogramma per il calcolo di è definito come:
Nel programma principale, la funzione viene chiamata come segue:
L'output risultante sarà:
Tuttavia, se si modifica la funzione in modo da includere una dichiarazione di scrittura (write), come nel seguente codice:
Si otterrà un errore di esecuzione. Fortran non consente dichiarazioni di I/O (input/output) all'interno di una funzione di sottoprogramma, poiché l'unico scopo di una funzione è calcolare e restituire un valore.
È cruciale comprendere che le funzioni di Fortran sono molto più che semplici espressioni aritmetiche: l'interazione tra variabili, funzioni e sottoprogrammi permette di risolvere problemi complessi con un approccio modulare e flessibile. Tuttavia, è fondamentale seguire con attenzione la sintassi e le regole di esecuzione, evitando operazioni non consentite all'interno delle funzioni per evitare errori durante il runtime.
Come eseguire il "Curve Fitting" con il metodo dei minimi quadrati in Fortran
Il "Curve Fitting" è una tecnica utilizzata per trovare la relazione tra due variabili, in modo da adattare i dati sperimentali a una funzione matematica. Il metodo dei minimi quadrati è uno degli approcci più comuni per questo scopo. L'obiettivo di questo metodo è minimizzare la somma dei quadrati delle differenze tra i valori osservati e quelli predetti dalla funzione di adattamento. Nel contesto del linguaggio di programmazione Fortran, esistono implementazioni efficienti per l’esecuzione di questo tipo di calcoli.
Il codice che esploreremo qui di seguito è un esempio di adattamento di una curva esponenziale tramite il metodo dei minimi quadrati. La funzione che si vuole adattare ai dati è di tipo esponenziale , dove e sono i parametri da determinare.
Iniziamo con la lettura dei dati sperimentali. La variabile rappresenta il numero di punti dati, mentre e contengono i valori delle variabili indipendente e dipendente. Una volta acquisiti i dati, il codice prosegue trasformando il valore in , permettendo una linearizzazione del problema. Questa trasformazione consente di adattare i dati a una retta del tipo , che può essere risolta con una semplice regressione lineare.
Il calcolo dei parametri e avviene tramite il sistema di equazioni normali. Vengono calcolate diverse somme: (somma dei valori ), (somma dei valori ), (somma dei quadrati dei valori ), e (somma dei prodotti ). Con questi valori, i coefficienti e vengono determinati tramite le seguenti espressioni:
dove è il determinante della matrice dei coefficienti. Una volta calcolati, i valori di e vengono utilizzati per calcolare i valori predetti della variabile , che vengono poi confrontati con i valori originali, calcolando le residui (differenze tra valori osservati e predetti).
Alla fine, il programma calcola anche il residuo quadratico totale (Sum Squared Residue, SSR) e il residuo quadratico medio (Root Mean Square Residual, RMS), che forniscono una misura della qualità dell’adattamento. Un SSR più basso indica una migliore adattabilità del modello ai dati sperimentali.
Aggiunte utili per il lettore
Quando si lavora con il metodo dei minimi quadrati, è fondamentale capire che il modello scelto (in questo caso esponenziale) deve riflettere effettivamente la natura del fenomeno in esame. Ad esempio, se la crescita dei dati non segue una legge esponenziale, il metodo potrebbe non produrre risultati soddisfacenti. È quindi cruciale fare una scelta accurata della funzione di adattamento.
Inoltre, il valore del residuo quadratico medio (RMS) è un buon indicatore della bontà dell'adattamento. Un valore di RMS vicino a zero suggerisce che il modello si adatta molto bene ai dati, mentre valori più elevati indicano un adattamento povero. Tuttavia, è importante ricordare che un valore basso di RMS non garantisce sempre la correttezza del modello, specialmente in presenza di rumore nei dati.
Un altro aspetto da considerare è che il metodo dei minimi quadrati presuppone che i dati siano affetti da errori in (la variabile dipendente), ma non considera gli errori nei dati . In alcuni casi, se anche i dati contengono errori significativi, potrebbero essere necessarie tecniche di regressione più avanzate, come la regressione totale dei minimi quadrati (Total Least Squares, TLS).
Infine, nel caso di applicazioni più complesse, come il fitting di curve polinomiali di ordine elevato, la scelta di un ordine troppo alto per il polinomio potrebbe portare a un fenomeno noto come "overfitting", dove il modello si adatta troppo strettamente ai dati, perdendo la capacità di generalizzare a nuovi dati. Per evitare ciò, è consigliato utilizzare metodi di validazione incrociata per determinare l'ordine ottimale del polinomio.
Quali metodi numerici sono più efficaci nella risoluzione di equazioni differenziali e nell'analisi di dati complessi?
Nel contesto delle analisi numeriche, l'utilizzo di metodi come la Regola di Simpson e la Regola del Trapezio per calcolare l'integrale di funzioni è fondamentale per ottenere risultati approssimativi ma precisi quando la soluzione analitica non è facilmente ottenibile. Questi metodi sono particolarmente utili nell'analisi dei dati sperimentali e nella modellazione di fenomeni fisici, dove la precisione dei calcoli è essenziale per la comprensione di comportamenti complessi.
La Regola di Simpson, ad esempio, fornisce una stima molto più precisa dell'integrale rispetto alla Regola del Trapezio, soprattutto quando si aumenta il numero di sottointervalli. Se si considera una funzione come , l'integrale ottenuto tramite Simpson converge rapidamente al valore teorico di , mentre la Regola del Trapezio tende a stabilizzarsi a valori leggermente inferiori a quello esatto. In un altro esempio, l'integrale di per il quale si calcola un'area sotto la curva del cerchio unitario, la Regola di Simpson fornisce una stima che si avvicina molto al valore , un risultato che si ottiene con un buon grado di precisione.
Questi metodi numerici sono particolarmente utili quando si cerca di calcolare aree sotto curve complesse, come nel caso del calcolo dell'area del ciclo di isteresi B-H in un materiale magnetico. La procedura consiste nel determinare i valori di per un insieme di valori di , e successivamente applicare le tecniche di integrazione numerica per calcolare l'area sottostante, che rappresenta l'energia immagazzinata nel materiale. Dopo aver spostato opportunamente l'origine dei dati nel primo quadrante, l'area sotto la curva può essere trovata sottraendo l'area della curva negativa (ADB) da quella della curva positiva (ACB).
Per quanto riguarda la ricerca di un elemento all'interno di un grande set di dati ordinato, il metodo di ricerca binaria rappresenta un altro strumento cruciale nell'analisi numerica. La ricerca binaria è particolarmente efficiente in set di dati ordinati, in quanto riduce notevolmente il numero di confronti necessari per trovare un valore target. Il processo consiste nel confrontare il valore cercato con l'elemento centrale dell'array; se il valore è minore o maggiore, la ricerca si restringe alla metà inferiore o superiore dell'array, continuando finché non viene trovato l'elemento desiderato. Un programma scritto in Fortran per implementare questa tecnica mostra come iterare su una serie di confronti per ottenere la posizione esatta del valore, se presente.
Un altro ambito significativo di applicazione riguarda la risoluzione numerica di equazioni differenziali, in particolare le equazioni differenziali ordinarie di primo ordine. Il metodo di Runge-Kutta è uno dei più utilizzati per risolvere questi sistemi di equazioni. Ad esempio, nel caso di un sistema accoppiato di equazioni differenziali del tipo:
dove le condizioni iniziali per e sono date, il metodo di Runge-Kutta permette di calcolare le soluzioni di e per un intervallo di tempo specificato. Utilizzando un incremento di passo , i valori di e sono calcolati iterativamente attraverso la somma ponderata di incrementi e derivati dalle derivate della funzione al passo successivo. Questo metodo, pur essendo relativamente semplice, fornisce una soluzione di alta precisione ed è ampiamente utilizzato in fisica, ingegneria e scienze applicate.
In un esempio pratico, considerando il sistema:
con condizioni iniziali , , l'implementazione numerica tramite Runge-Kutta consente di approssimare la soluzione in un intervallo di tempo [0, 0.2] con passo . Le soluzioni analitiche di queste equazioni differenziali, come per e per , possono essere utilizzate per confrontare gli errori di calcolo e verificare la precisione delle soluzioni numeriche ottenute.
In un altro esempio, il sistema accoppiato:
con condizioni iniziali per e valori di variabili, viene risolto numericamente su un intervallo di [0, 15], dimostrando l'adattabilità dei metodi numerici a una vasta gamma di problemi pratici.
Quando si utilizzano questi metodi, è importante tenere a mente che l'accuratezza della soluzione dipende fortemente dal passo scelto. Un passo troppo grande può portare a risultati imprecisi, mentre un passo troppo piccolo può aumentare il tempo di calcolo senza migliorare significativamente la precisione. Inoltre, l'analisi dell'errore è cruciale per determinare l'affidabilità dei risultati ottenuti, specialmente quando si confrontano soluzioni numeriche con soluzioni analitiche conosciute.
Qual è il ruolo delle funzioni iperboliche e come utilizzarle nei programmi?
Le funzioni iperboliche sono una generalizzazione delle funzioni trigonometriche per il caso iperbolico e hanno applicazioni in numerosi campi, inclusa la matematica avanzata, l’ingegneria e la fisica. Le funzioni più comuni includono il seno iperbolico (sinh), il coseno iperbolico (cosh) e la tangente iperbolica (tanh). Queste funzioni sono strettamente legate alle funzioni esponenziali e si esprimono generalmente come segue:
Quando ci si occupa di calcoli numerici, è utile implementare queste funzioni all'interno di un programma che le utilizzi per risolvere vari problemi. Ad esempio, nel contesto della programmazione in Fortran, le funzioni iperboliche possono essere utilizzate per calcolare il valore del seno, coseno e tangente per angoli espressi in radianti.
Un esempio di programma in Fortran per calcolare i valori di seno, coseno e tangente per angoli di 0, 30, 45 e 60 gradi è il seguente:
Questo programma mostra l’utilizzo della libreria di funzioni per calcolare il seno, coseno e tangente degli angoli convertiti in radianti. In Fortran, la conversione da gradi a radianti è fondamentale, poiché le funzioni trigonometriche predefinite operano esclusivamente su radianti. Se i valori sono già espressi in radianti, non è necessaria alcuna conversione.
Il valore di pi greco () viene calcolato nel programma utilizzando la funzione arctangente, che restituisce il valore di come il quadruplo dell'arcotangente di 1. Questo approccio, seppur semplice, è estremamente utile in ambienti di programmazione dove il valore di non è predefinito.
Il risultato dell'esecuzione di questo programma per vari angoli è il seguente:
Le funzioni iperboliche, similmente alle trigonometriche, trovano applicazione anche in problemi più complessi, come la determinazione delle radici di numeri reali. Per esempio, per calcolare la radice ennesima di un numero, un programma Fortran può essere utilizzato come segue:
Qui, la radice ennesima di un numero viene calcolata tramite l'operazione . Se si usasse anziché il calcolo con un esponente decimale, il risultato sarebbe errato, poiché con numeri interi il calcolo per risulterebbe sempre 0.
Un altro esempio interessante riguarda le funzioni MOD, MAX e MIN, che permettono rispettivamente di calcolare il resto di una divisione, il massimo e il minimo tra un insieme di numeri. Un semplice programma per utilizzare queste funzioni può essere scritto come segue:
Il risultato dell'esecuzione di questo programma mostra come la funzione MOD calcoli il resto della divisione tra due numeri. Inoltre, MAX e MIN restituiscono il valore massimo e minimo, rispettivamente, tra una serie di numeri.
Un’altra caratteristica di Fortran è l’utilizzo della dichiarazione DATA, che consente di assegnare valori iniziali alle variabili. Questo approccio è utile quando si desidera evitare l'uso di istruzioni READ per l'input di valori. Un esempio di programma che usa la dichiarazione DATA è il seguente:
Qui, la variabile AGE è inizializzata con il valore 28, HEIGHT con 6.1 e NAME con 'Pran'. La dichiarazione DATA è estremamente utile per inizializzare variabili in modo rapido e senza necessità di input interattivo.
Oltre all'uso delle funzioni di libreria e delle tecniche di dichiarazione delle variabili, un altro importante aspetto da considerare quando si scrivono programmi numerici è l’utilizzo dei comandi di controllo, che permettono di gestire il flusso di esecuzione del programma in modo condizionale o in modo iterativo. Le istruzioni di controllo, come IF, DO e GOTO, consentono di cambiare il flusso normale del programma, saltando o ripetendo determinate sezioni in base a condizioni specifiche.
È importante che il lettore comprenda come questi strumenti possano essere usati per ottimizzare l’esecuzione e risolvere problemi matematici o fisici compl

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