Author Archives: admin

Le Procedure di Modulo nel Fortran


FORTRANAbbiamo imparato ad usare i moduli nel Fortran, e ne abbiamo apprezzato l’enorme utilità quale deposito di variabili e costanti a cui ogni unità di programma può attingere. Ma i moduli sono ben altro e ci consentono di definire al proprio interno delle vere e proprie procedure che ogni unità di programma che accede al modulo potrà in questo modo utilizzare, facendo uso dell’istruzione USE.

Ricordiamo a tal proposito che un modulo di programma è reso accessibile alle varie unità di programma attraverso l’istruzione USE. Tali procedure vengono, pertanto, chiamate procedure di modulo nel Fortran e vengono compilate come parte del modulo.

 Le procedure che si trovano all’interno di un modulo devono essere posizionate dopo le dichiarazioni dei dati e devono essere precedute dall’istruzione CONTAINS. Questa istruzione indica al compilatore che le istruzioni successive rappresentano delle procedure di modulo.

Di seguito si riporta un programma che fa uso di una procedura di modulo per calcolare il prodotto di una matrice per un vettore.

module OperazioniMatriceVettore
integer, parameter :: N = 3 ! costante globale.
contains

function moltiplicazioneMatriceVettore ( A, b ) result( c )
implicit none
! Definizione delle dimensioni di A e b.
real, dimension( :, : ), intent( in ) :: A
real, dimension( : ), intent( in ) :: b
real, dimension( size( b ) ) :: c
integer N
integer i
N = size( b )
c = 0.0
do i = 1, N
c = c + b( i ) * A( :, i )
end do
end function moltiplicazioneMatriceVettore

end module OperazioniMatriceVettore

program MatriceVettore
use OperazioniMatriceVettore
implicit none
real, dimension( N, N ) :: A
real, dimension( N ) :: b, c
! Riempie A è  b with con numeri random.
call random_number( A )
call random_number( b )
! Calcola il prodotto matrice * vettore, A*b.
c = moltiplicazioneMatriceVettore ( A, b )
print *, ‘Prodotto matrice vettore = ‘, c
end program MatriceVettore

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

I moduli nel Fortran


FORTRANNelle applicazioni di programmazione ingegneristiche, si incontra spesso il caso di parametri, variabili e sottoprogrammi che devono essere ripartiti in diverse unità di programma. Per risolvere tale problema si possono utilizzare i moduli nel Fortran che rappresentano un’unità  speciale di programma che raccoglie le collezioni di dichiarazioni e di subprograms in modo da poterle importare in altre unità di programma.

La funzionalità dell’unità modulo è simile a quella dell’archivio di intestazione di C. I Moduli semplici vengono definiti attraverso al seguente struttura:

MODULE name
        corpo
END MODULE name

Si noti che questa è la forma più semplice dell’unità del modulo. Esistono forme più generali che ci permettono l’inclusione dei subprograms e delle procedure. Richiameremo soltanto la forma più semplice dell’unità del modulo .

Un modulo di programma è reso accessibile alle varie unità di programma attraverso l’istruzione USE. Per meglio comprendere l’utilizzo dei moduli nel Fortran consideriamo il seguente programma che usa un modulo nel calcolo dell’area d’un cerchio:

MODULE Circle
!---------------------------------------------------------------------
! ! Modulo che contiene le definizioni delle variabili necessarie per 
! il calcolo dell'area di un cerchio noto il raggio !
!---------------------------------------------------------------------
    REAL, PARAMETER :: Pi = 3.1415927
    REAL :: radius
END MODULE Circle
PROGRAM Area
!---------------------------------------------------------------------
! ! Questo programma calcola l'area di un cerchio noto che sia il raggio  
! Uses: MODULE Circle ! FUNCTION Area_Circle (r) !
!---------------------------------------------------------------------
USE Circle, ONLY : radius IMPLICIT NONE
INTERFACE
   FUNCTION Area_Circle (r)
      REAL, INTENT(IN) :: r
   END FUNCTION Area_Circle
END INTERFACE
! Prompt user per il valore del raggio 
write(*, '(A)', ADVANCE ="NO") "Digita il valore del raggio: " 
read(*,*) radius
! Scrive l'area utilizzando la function call 
write(*,100) "Area del cerchio di raggio", radius, " e", &
Area_Circle(radius)
100 format (A, 2x, F6.2, A, 2x, F11.2)
END PROGRAM Area
!-----Area_Circle----------------------------------------------------
! ! Funzione per il calcolo dell'area del cerchio !
!---------------------------------------------------------------------
FUNCTION Area_Circle(r) USE Circle, ONLY : Pi
   IMPLICIT NONE REAL :: Area_Circle REAL, INTENT(IN) :: r
   Area_Circle = Pi * r * r
END FUNCTION Area_Circle

In questo esempio, definiamo un modulo che dichiara il tipo delle due variabili reali pi e raggio. In più, in questo modulo, dichiariamo il valore del parametro pi. Per usare il modulo nel programma principale, impieghiamo l’istruzione USE.

Usiamo poi una forma speciale dell’ istruzione USE che specifica che siamo soltanto interessati al valore del raggio nel programma principale, cioè nel programma del modulo viene utilizzato un solo componente. Similmente, usiamo soltanto il parametro pi nel subprogram Area_Circle attraverso l’istruzione USE che compare in quella procedura.

L’istruzione USE deve comparire all’inizio della parte di dichiarazione dell’unità di programma che usa il modulo!! Deve comparire anche prima dell’istruzione IMPLICIT NONE!

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Il comando path in Matlab

MATLAB
Il comando path in Matlab ci permette di visualizzare il percorso di ricerca all’interno dell’ambiente Matlab. Infatti MATLAB utilizza un percorso di ricerca, come un elenco ordinato di directory per determinare come eseguire le funzioni chiamate.

Quando cioè si chiama una funzione standard, MATLAB esegue la prima funzione contenuta
nel primo M-file con quel nome che troverà sul percorso di ricerca di default. Per visualizzare il percorso di ricerca impostato, possiamo utilizzare il seguente comando:

path

che mostra appunto il percorso di ricerca su qualsiasi piattaforma. Per modificare il percorso di ricerca impostato, possiamo utilizzare il seguente comando:

path(‘nuovopath’)

cambia il percorso di ricerca in nuovopath, dove nuovopath è un string array contenente tutte le cartelle che fanno aprte del percorso di ricerca.

matlab

Il comando:

path (path, ‘nuovopath’)

aggiunge la cartella nuovopath alla fine del percorso di ricerca. Se nuovopath è già nel percorso di ricerca, esso viene spostato alla fine del percorso di ricerca. Il comando:

path (‘nuovopath’, path)

aggiunge la cartella nuovopath nella parte superiore del percorso di ricerca. Se nuovopath è già nel percorso di ricerca, esso viene spostato nella parte superiore del percorso di ricerca. Per aggiungere più cartelle in una sola dichiarazione, é possibile utilizzare il comando addpath. Il comando:

a = path

attribuisce il percorso di ricerca alla variabile di tipo stringa a.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Il comando SAVE in Matlab

MATLAB
Il comando SAVE in Matlab salva i contenuti del workspace in un file con estensione .mat che può essere letto attraverso il comando LOAD in una sessione successiva di MATLAB. Per esempio scrivendo la seguente istruzione al prompt di Matlab:

save sessione

si salva il workspace intero nel file sessione.m. In realtà volendo si può salvare solamente una certa variabile specificando il nome dopo aver specificato filename. Di default, la variabile è salvata in una configurazione binaria che può essere letta rapidamente e accuratamente da MATLAB.

Se si vuole accedere a questi file al di fuori di MATLAB, si può specificare una configurazione alternativa, ad esempio una delle seguenti:

  • -ascii Use 8-digit text format.
  • -ascii-double Use 16-digit text format.
  • -ascii-double -tabs Delimit array elements with tabs.
  • -v4 Create a file for MATLABversion 4.
  • -append Append data to an existing MAT-file.

Quando si salva il workspace in configurazione testo, si dovrebbe salvare una sola variabile alla volta. Se invece si salva più di una variabile, MATLAB creerà il file di testo, ma non sarà capace di caricarlo in MATLAB.

matlab

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Il workspace di Matlab

MATLAB

Il workspace di Matlab rappresenta l’area di memoria accessibile dal prompt di MATLAB. Il workspace di Matlab quindi rappresenta in sostanza la nostar area di lavoro, un’interfaccia utente grafica che consente di visualizzare e gestire il contenuto del lavoro eseguito nella sessione corrente di MATLAB.

Il Workspace inoltre visualizza e aggiorna i calcoli statistici per ciascuna variabile, che è possibile scegliere di mostrare o nascondere automaticamente.

I due comandi who e whos, mostrano i contenuti correnti del workspace. Il comando who in particolare fornisce un elenco corto del suo contenuto, mentre whos fornisce anche dimensioni e informazioni delle varibili in esso definite.

Di seguito è mostrata il risultato prodotto dal comando whos su un workspace che contiene risultati di alcuni degli esempi in questo tutorial.

whos
Name Size Bytes Class
A 4x4 128 double array
D 5x3 120 double array
M 10x1 3816 cell array
S 1x3 442 struct array
h 1x11 22 char array
n 1x1 8 double array
s 1x5 10 char array
v 2x5 20 char array
Grand total is 471 elements using 4566 bytes.

È possibile modificare un valore direttamente nel browser Workspace per piccole matrici numeriche e di caratteri. Per visualizzare e modificare variabili più grandi e per altre categorie, fare doppio clic sulla variabile nel browser Workspace.

matlab

Si aprirà in questo modo il display variabili nell’editor variabili, dove sarà possibile visualizzare l’intero contenuto e apportare modifiche. Per cancellare tutte le variabili esistente dal workspace, utilizzare il comando clear.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Documentazione su Matlab

MATLAB

Per reperire della documentazione su Matlab davvero esauriente è necessario visitare il sito della Mathworks, società distributrice ufficiale del software ala seguente url:

http://www.mathworks.it/it/help/matlab/

A partire dalla pagina principale sarà possibile consultare una serie davvero ricca di documenti che abbracciano i più svariati argomenti, di seguito ne riporto solo una lista sintetica:

  • Getting Started with MATLAB
  • MATLAB Examples
  • Release Notes
  • Functions
  • Language Fundamentals
  • Mathematics
  • Graphics
  • Programming Scripts and Functions
  • Data and File Management
  • GUI Building
  • Advanced Software Development
  • Desktop Environment

Tutta la documentazione è proposta in lingua inglese e si può consultare con il browser online oppure scaricabile in formato pdf per la consultazione offline o per la stampa.

matlab

Ogni argomento viene trattato in modo semplice ed esaustivo con un corredo davvero significativo di esempi per meglio comprendere i concetti appena introdotti.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Cercare file e cartelle in Matlab

MATLAB
E’ possibile cercare file e cartelle in Matlab in modo semplice ed immediato, infatti se si conosce il nome del file che si desidera trovare, basterà iniziare a digitare i primi caratteri del nome nel browser della cartella corrente. Mentre si digita, il browser cartella corrente cerca verso il basso dalla parte superiore della finestra, guardando attraverso tutte le cartelle espanse.

In alternativa, per trovare una serie di caratteri in qualsiasi parte del nome di un file contenuto nel filesystem del computer potremo seguire le seguenti azioni:

  • Fare clic sul pulsante di ricerca nella barra degli strumenti della cartella corrente. La barra degli indirizzi diventa un campo di ricerca.
  • Digitare una parte del nome del file. Il carattere asterisco (*) è un carattere jolly. Ad esempio, per mostrare solo i nomi di file che iniziano con mat e hanno un’estensione .m, tipo mat * .m.
  • Premere Invio.

MATLAB allora visualizza tutti i file all’interno della cartella corrente (comprese le sue sottocartelle) che forniscono un match con il nome del file. Se è stato digitato il percorso completo di una cartella, la cartella diventa la cartella corrente.

matlab

Sarà possibile poi cancellare i risultati e visualizzare tutti gli elementi nella cartella corrente semplicemente premendo il tasto Esc.

Per aprire la cartella corrente nel browser, se non è già aperta, bisogna effettuare le seguenti operazioni:

  • nella scheda Home, nella sezione Environment, fare clic su Layout.
  • Poi, sotto Show, selezionare la cartella corrente.
  • Per mostrare e nascondere le colonne, o ordinare e raggruppare colonne basterà fare clic, e quindi selezionare un’opzione.

Se si rende necessario effetturae una ricerca avanzata per i file potremo utilizzare lo strumento Trova file che ci permette di:

  • Cercare una stringa specificata nei nomi di file e nei file
  • Includere o escludere tipi di file specificati dalla ricerca
  • Cercare in cartelle specificate
  • Escludere file di grandi dimensioni dalla ricerca

Per effettuare una ricerca avanzata per i file, aprire lo strumento Trova file. Nella scheda Home, nella sezione File, fare clic su Trova file. Inserire i criteri di ricerca nella finestra di dialogo che si apre ed il gioco è fatto.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Il comando lookfor in Matlab

MATLAB

Il comando lookfor in Matlab ci consente di cercare funzioni attraverso una keyword. Ad esempio, MATLAB non ha una funzione chiamata inverse. Così la risposta alla prossima istruzione sarà:

help inverse
inverse.m not found.

Invece digitando:

lookfor inverse

verrà effettuata una ricerca con una dozzina di matchs. Il risultato dipende da quanti toolboxes si è installato sul proprio computer, si otterrà ad esempio come risultato della ricerca qualcosa del tipo:

INVHILB Inverse Hilbert matrix.
ACOSH Inverse hyperbolic cosine.
ERFINV Inverseof the error function.
INV Matrix inverse.
PINV Pseudoinverse.
IFFT Inverse discrete Fourier transform.
IFFT2 Two-dimensional inverse discrete Fourier transform.
ICCEPS Inverse complex cepstrum.
IDCT Inverse discrete cosine transform.

dove ogni riga restituita rappresenta un link ad informazioni contenute nella documentazione di Matlab e basterà cliccarsi sopra per accedere alla risorsa. Aggiungendo l’opzione -all al comando lookfor, come indicato nella seguente istruzione:

lookfor -all

si ricercherà l’intero input,e non solo la prima linea indicata.

matlab

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

La Finestra Help in Matlab

MATLAB

In MATLAB è disponibile una finestra Help, attivabile su PCs e Macs selezionando l’opzione Help Window nel menu Help, o cliccando sul punto interrogativo sulla sbarra del menu. E’ anche disponibile su tutti i computer digitando:

helpwin

Per usare la finestra d’aiuto su un particolare tema, digitare:

helpwin topic

La finestra d’aiuto accede alle stesse informazioni come il comando HELP, ma l’interfaccia della finestra prevede collegamenti agli altri temi.

matlab

Attraverso la finsestra Help sarà possibile consultare tutta la documentazione chje viene fornita a corredo del software; in particolare sarà possibile consultare la documentazione relativa ad ogni toolbox installato sul nostro computer.

Inoltre, in coerenza con quanto fornito dal nostro sistema operativo, sarà possibile altresì effettuare delle ricerche per parola chiave, in modo da velocizzare la ricerca delle informazioni che ci necessitano.

Mentre come accade per ogni aiuto in linea sarà possibile consultare la documentazione cercando le informazioni dall’indice del menu.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Il comando Help in Matlab

MATLAB

Ci sono diversi modi diversi per accedere ad informazioni online sulle funzioni di MATLAB, uno di questi e forse quello più immediato è il comando Help in Matlab. Possiamo appunto avere informazioni sull’uso del software attraverso i seguenti servizi:

  • Il comando HELP
  •  La finestra di aiuto
  •  Il MATLAB Help Desk
  •  Le pagine online
  •  Il Comando Help

Il comando Help, come già anticipato,  rappresenta il modo più semplice per determinare la sintassi ed il comportamento di una particolare funzione in quanto le informazioni sono esposte direttamente nella finestra di comando. Per esempio digitando:

help magic

si ottiene il seguente risultato:

MAGIC Magic square.
MAGIC(N) is an N-by-N matrix constructed from
the integers 1 through N^2 with equal row,
column, and diagonal sums.
Produces valid magic squares for N = 1,3,4,5….

Il MATLAB help usa caratteri maiuscoli per i nomi di funzioni e variabili per fare si che siano messe in rilievo dal resto del testo. Quando si digita il nome di una funzione ,è  bene utilizzare sempre i corrispondenti caratteri minuscoli perchè MATLAB è case sensible e tutte le funzioni sono in lowercase.

Tutte le funzioni di MATLAB sono organizzate in gruppi logici, e la struttura dell’elenco di MATLAB è basata su questo raggruppamento. Per esempio, tutte le funzioni lineari algebriche risiedono nell’elenco matfun.

matlab

Per elencare i nomi di tutti le funzioni in quell’elenco, con una breve descrizione digitare:

help matfun

ottenendo in questo modo al prompt di matlab:

Matrix functions – numerical linear algebra.
Matrix analysis. norm – Matrix or vector norm. normest – Estimate the matrix
2-norm …

Digitando al prompt di Matlab il seguente comnado:

help

si ottiene l’elenco completo di tutte le funzioni inserite nella distribuzione di Matlab, con una descrizione della categoria della funzione.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Visualizzazione di una funzione in due variabili in Matlab

MATLAB

Per visualizzare una funzione di due variabile in Matlab, ad esempio la funzione z = f (x,y), è necessario innanzitutto generare due matrici X e Y costituite di righe e colonne ripetute, rispettivamente, sul dominio della funzione.

Poi bisogna utilizzare queste matrici per valutare e tracciare la funzione. La funzione meshgrid trasforma nel dominio specifico, un singolo vettore o due vettori x e y in matrici X e Y per usarle nella valutazione della funzione di due variabili.

Le righe di X sono copie del vettore x e le colonne di Y sono copie del vettore y. Per valutare la funzione bidimensionale sin(r)/r, lungo le due direzioni x e y si procede nel modo seguente:

[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
mesh(X,Y,Z)

matlab

In questo esempio, R rappresenta la distanza dall’ origine che è al centro della matrice. Aggiungere il valore eps evita l’indeterminato 0/0 che altrimenti si verrebbe a verificare all’origine.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO: