Author Archives: admin

Le subroutine nel Fortran


FORTRANUna subroutine nel Fortran rappresenta un tipo di procedura, essa viene richiamata specificandone il nome attraverso l’istruzione CALL che riceve i valori di input e restituisce quelli di output attraverso una lista di argomenti.

Il costrutto nella sua forma generale per definire una subroutine è il seguente:

SUBROUTINE nome_subroutine [(lista_di_argomenti)]
 
    [definizione e dichiarazione delle variabili]
    [corpo della procedura]
[CONTAINS
    procedure interne]
[RETURN]
END [SUBROUTINE [nome_subroutine]]

 

Nella definizione della struttura è possibile identificare il nome della subroutine, che dovrà rispettare le regole per la scelta dei nomi nel Fortran, seguito dall’elenco delle varibili di scambio tra la procedura ed il programma chiamante.

Segue la definizione e la dichiarazione delle variabile che sono utilizzate all’interno della procedura, quindi segue il corpo della procedura cioè le istruzioni che dovrà eseguire nel momento in cui verrà chiamata dal programma principale.

Quando un programma chiama una subroutine, l’esecuzione del programma viene temporaneamente sospesa per consentire l’esecuzione della subroutine. Quando viene raggiunta l’istruzione RETURN o l’istruzione END SUBROUTINE l’esecuzione dell’unità chiamante riprende dalla riga successiva a quel la che ha effettuato la chiamata.

La chiamata avviene attraverso l’istruzione CALL, la cui sintassi è:

CALL nome_subroutine ([lista_di_argomenti])

 

Un esempio di soubroutine di fortran 90 è fornito di seguito:

!TRASFORMATA DI FOURIER DISCRETA
!________________________________
subroutine dft (A,N,E)
implicit none
17
integer :: N !numero di campioni
integer :: E !numero di campinature effettuate
integer :: i,j !indice di riga e di colonna della matrice
complex :: uim !unita' immaginaria
complex,dimension(0:1000,0:1000) :: A !matrice complessa

uim=(0,1)
do i=0, n-1
   do j=0, n-1
     A(i,j)=exp(-(2*3.14*uim*i*j)/n)
   end do
end do
E=N
end

Questa subroutine calcola le trasformate discrete di fourier dato un certo campione.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Le funzioni nel Fortran


FORTRANLe funzioni, nel Fortran, rappresentano un tipo di sottoprogrammi che, se necessario, possono essere richiamati più volte all’interno del programma principale per soddisfare una particolare esigenza ed effettuare degli opportuni calcoli.

Le funzioni definite dall’utente, a differenza delle funzioni standard già ingoblate nell’ambiente di programmazione, vengono scritte al fine di soddisfare uno specifico scopo che nessun altro strumento a disposizione del programmatore è in grado di soddisfare.

Le funzioni sono definite attraverso un costrutto del tipo:

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

È tramite il nome della funzione che si richiama la funzione all’interno del programma principale. Gli argomenti contenuti nelle parentesi tonde sono gli identificatori su cui la funzione opera.

Le funzioni lavorano sui valori memorizzati negli argomenti e restituiscono un risultato del tipo specificato. L’elenco degli identificatori costituisce un insieme di oggetti fittizi, ai quali, quando il sottoprogramma viene richiamato, vengono rimpiazzati i valori degli argomenti dell’istruzione chiamante.

Dopo la definizione della una funzione, csegue il blocco di istruzioni che costituiscono il sottoprogramma. Tra queste vi deve essere almeno un’istruzione di assegnazione con il nome della funzione a sinistra del segno di uguale, che assegna un valore a questa variabile e che viene quindi restituito al programma chiamante al termine della funzione, che come tutti i programmi deve terminare con END.

Vediamo come esempio un programma che richiama al suo interno una funzione:

MODULE Circle
!---------------------------------------------------------------------
! ! Modulo che contiene la definizione delle variabili necessarie
! per la computazione dell'area del cerchio di raggio r !
!---------------------------------------------------------------------
REAL, PARAMETER :: Pi = 3.1415927
REAL :: radius
END MODULE Circle
PROGRAM Area
!---------------------------------------------------------------------
! ! Questo programma computa l'area del cerchio dato il raggio !
! Uses: MODULE Circle ! FUNCTION Area_Circle (r) !
!---------------------------------------------------------------------
16
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 raggio del cerchio write(*, '(A)', ADVANCE =
"NO") "Digita il raggio del cerchio: " read(*,*) radius
! Write out area of circle using function call write(*,100) "Area
del cerchio con raggio", radius, " is", &
Area_Circle(radius)
100 format (A, 2x, F6.2, A, 2x, F11.2)
END PROGRAM Area
!-----Area_Circle----------------------------------------------------
! ! Funzione che calcola l'area del cerchio di raggio r !
!---------------------------------------------------------------------
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

Questo programma usa la funzione Area_Circle per computare l’area d’un cerchio di raggio r. La funzione compare dopo l’istruzione di fine programma della zona principale di programma, in modo da essere classificata come subprogram esterno. Poichè è una procedura esterna, il programma principale usa un INTERFACE BLOCK per definire tutti i parametri richiesti dalla funzione Area_Circle.

La versione in fortran 90 del subprogram funzione si comporta allo stesso modo del subprogram funzione presente nel fortran 77. Si noti che l’ unica differenza sostanziale qui è la capacità di dichiarare esplicitamente gli argomenti della funzione in se.Prendere la nota speciale del descrittore INTENT(IN) del tipo.

Questo attributo della variabile r nel subprogram di funzione identifica rigorosamente la variabile r come variabile di input. Tali variabili non possono essere modificati dal subprogram in modo involontario.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Sottoprogrammi nel Fortran


FORTRANCosì come già accadeva per il fortran 77, anche il nuovo formato fortran 90 ci consente di suddividere un programma principali in una serie di sottoprogrammi. tali sottoprogrammi possono essere di due tipi:

  1. funzioni
  2. subroutine

In entrambi i casi è poi possibile suddividere il sottoprogrammi in ulteriori due forme:

  1. sottoprogramma interno
  2. sottoprogramma esterno.

I sottoprogrammi interni sono quelle procedure che possono comparire nell’ambito del programma principale. mentre i  sottoprogrammi esterni sono quelli che compaiono in una sezione separata di programma dopo l’ istruzione principale END del programma.

Ciò è del tutto simile a quanto già si faceva nel fortran 77 trattandosi pur sempre di programmazione procedurale.  Inoltre, così come in fortran 77, i sottoprogrammi del tipo function, nel fortran 90, hanno un tipo esplicito e sono indirizzati a restituire un valore.

Mentre i sottoprogrammi del tipo subroutine, non hanno tipo esplicito e restituiscono il risultato o nessun valore con una chiamata del parametro CONTAINS(). Poichè porremo l’attenzione sui sottoprogrammi esterni, è essenziale l’utilizzo di una caratteristica del fortran 90 conosciuta come INTERFACE BLOCKS.

Questo blocco è una caratteristica di sicurezza che permette che i programmi principali ed i subprograms esterni si connettano giustamente. Un INTERFACE BLOCKS si accerta che il programma chiamante ed il subprogram abbiano il numero ed il tipo corretti di argomenti.

Ciò aiuta il compilatore a rilevare l’uso errato d’un subprogram . Un INTERFACE BLOCK consiste di:

1. numero di argomenti
2. tipo di ogni argomento
3. che tipo del value(s) ha restituito il subprogram

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Gli array bidimensionali in Fortran


FORTRANUn array bidimensionale, anche detto matrice, è una variabile strutturata tale che i suoi elementi sono tutti dello stesso tipo e il meccanismo di accesso diretto ai suoi elementi consiste di due espressioni intere dette indici.

In Fortran gli array bidimensionali e in generale multidimensionali possono essere dichiarati nel modo seguente:

REAL, DIMENSION(2,3) :: A
REAL, DIMENSION(0:1,0:2) :: B
INTEGER,DIMENSION(10,20,3) :: I

Il limite massimo sul Rank (il numero di dimensioni) d’un array è 7. I valori degli elementi d’un array multidimensionale possono essere assegnati in un modo simile a quello per la varietà unidimensionale.

Ad esempio, i valori 1, 2, 3, 4, 5, 6 possono essere assegnati all’array bidimensionale A nel modo seguente:

A = (/ 1, 2, 3, 4, 5, 6 /)

Ciò assegna i valori dell’array di A nell’ordine della colonna simile alle regole di fortran 77. L’assegnazione dei valori di un array ad un altro array è consentita a condizione che entrambi gli array in questione abbiano la stessa dimensione fisica. Per esempio,

B = A

assegna i valori precedentemente assegnati all’array A all’array B. Così come con gli array unidimensionali, gli operatori e le funzioni applicate normalmente alle espressioni semplici, possono anche essere applicati agli array multidimensionali che hanno lo stesso numero di elementi.

Sono altresì disponibili diverse funzioni intrinseche per elaborare gli array multidimensionali. Quelle più utili sono:

  • MAXVAL(A, D): restituisce un array che contiene i valori massimi lungo la dimensione D(se la D e omessa, restituisce il valore massimo dell’intero array)
  • MAXLOC(A) : restituisce la locazione di memoria del valore max lungo D di A
  • SUM(A, D) : restituisce un array che contiene le somme degli elementi di A lungo la dimensione D (se la D e omessa,restituisce la somma degli elementi dell’ intero array)
  • MATMUL(A, B): restituisce il prodotto di A e della B
  • TRANSPOSE(A): restituisce la trasposta del 2d array A

Un array può essere allocatable ,cioè, può essergli assegnata una locazione di memoria precisa durante l’esecuzione. Vediamo allora come ichiarare un array allocatable reale A,

REAL, DIMENSION(:,:), ALLOCATABLE :: A

Nel momento di esecuzione, i limiti reali per l’array A possono essere determinati dalla istruzione:

ALLOCATE(A(N, N), STAT = AllocateStatus) SE (AllocateStatus/ = 0)
                      ARRESTO ” * * * non abbastanza ***” di memoria

Qui, la N ed AllocateStatus sono variabili numero intero. AllocateStatus prende il valore 0 se la ripartizione riesce o un certo altro valore dipendente della macchina se la  memoria risulta insufficiente.

Un array può essere liberato dalla memoria usando il comando di DEALLOCATE:

DEALLOCATE (A, Stat = DeAllocateStatus)

Di nuovo, DeAllocateStatus rappresenta una variabile  numero intero il cuivalore è 0 se la cancellazione avviene.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Gli array monodimensionali nel Fortran


FORTRANUn array monodimensionale rappresenta una struttura dati complessa, statica e omogenea, usata in molti linguaggi di programmazione derivante dalla nozione matematica di vettore. Più precisamente, l’array è in genere classificato come un costruttore di tipo: in altre parole, esso consente di definire nuovi tipi di dati a partire da tipi preesistenti.

Nel Fortran la dimensione di un array può essere specificata da un’istruzione di specifica del tipo :

REAL, DIMENSION(10) :: A
INTEGER,DIMENSION(0:9):: B

Qui, i due array A, B sono stati quotati con 10 scanalature di memoria. L’ indice dell’array reale A inizia da 1 mentre l’indice per l’array B parte da 0. Il valore dei diversi elementi dell’array A può essere inizializzato a 1, 2, 3…, 10 da uno dei due metodi:

A = (/ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 /)

o,

A = (/ (I, I = 1, 10) /)

L’assegnazione dei valori di un array ad un altro è permessa a condizione che entrambi gli array in questione abbiano la stessa dimensione fisica. Per esempio:

B = A

assegna i valori precedentemente assegnati all’ array di A all’ array B. Gli operatori e le funzioni applicate normalmente alle espressioni semplici possono anche essere applicati agli array che hanno lo stesso numero di elementi. Per esempio,

A = A + B C = 2*C

assegna all’elemento ith di A il valore della somma degli elementi ith degli array A e B. In modo analogo all’elemento ith dell’array C è assegnato il valore uguale all’elemento ith di A moltiplicato per 2.

Il costrutto WHERE può essere usato per assegnare i valori ai diversi elementi d’un array; vediamo come:

WHERE ( la sequenza di argomento logico)
       ISTRUZIONE di assegnazioni di array !Blocco 1
ELSEWHERE
       ISTRUZIONE di assegnazioni di array !Blocco2
END WHERE

Per esempio, se ad A sono assegnati i valori

A = (/ (I, I = 1.10) /)

allora, possiamo studiare la possibilit`a di assegnare gli elementi del- l’ array B come:

WHERE (A > 5)
       B = 1
ELSEWHERE
       B = 0
END WHERE

Ciò assegna alla B i valori 0, 0, 0, 0, 0, 1, 1, 1, 1, 1. Parecchie funzioni intrinseche sono disponibili per elaborare gli array. Alcuni di queste sono:

  • DOT_PRODUCT(A, B) :restituisce il prodotto scalare di A e della B.
  • MAXVAL(A) :restituisce il valore massimo degli elementi dell’array A
  • MAXLOC(A) :restituisce la locazione di memoria del valore massimo di A
  • PRODUCT(A) :restituisce il prodotto degli elementi di A
  • SUM(A) :restituisce lasomma degli elementi di A

Un array può essere allocatable ,cioè, può essergli assegnato la locazione di memoria durante l’esecuzione. La dichiarazione di un array allocatable reale A,si effetua nel modo seguente:

REAL, DIMENSION(:), ALLOCATABLE :: A

Al tempo di esecuzione, i limiti reali per l’array A possono essere determinati dall’istruzione

ALLOCATE (A(N))

dove la N è una variabile numero intero che precedentemente è stata assegnata. Per accertarsi che abbastanza memoria sia a disposizione per assegnare lo spazio per il vostro array, usare l’opzione STAT del comando di ALLOCATE nel seguente modo:

ALLOCATE (A(N), STAT = AllocateStatus) IF (AllocateStatus /= 0)
                        ARRESTO ” * * * non abbastanza ***” memoria

Qui, AllocateStatus è una variabile del tipo numero intero. AllocateStatus prende il valore 0 se la ripartizione riesce o un certo altro valore dipendente dalla macchina se la memoria è insufficiente. Un array può essere liberato dalla memoria usando il comando DEALLOCATE

DEALLOCATE(A, Stat = DeAllocateStatus)

Di nuovo, DeAllocateStatus è una variabile del tipo numero intero il cui valore è 0 se la cancellazione dell’assegnazione riuscisse.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Il ciclo Do implicito nel Fortran


FORTRANIl ciclo DO nel Fortran già visto nella lezione precedente può essere realizzato anche in una forma implicita che permette di esprimere l’operazione in un modo molto più compatto; tale costrutto risulta molto comodo nelle operazioni di ingresso/uscita, vediamo allora un esempio:

WRITE(*,10) ( lista(i), i=1,7 ) 10 FORMAT (1X,’lista=’,10F9.3 )

Questa istruzione permette di visualizzare la lista di argomenti in funzione dell’indice i. Quindi saranno visualizzati gli elementi dell’array lista nel seguente ordine:

lista(1),lista(2),lista(3),lista(4),lista(5),lista(6),lista(7)

Gli argomenti di una lista di output possono essere del tipo: costante, espressione o elemento di un array. Nell’istruzione WRITE ogni argomento della lista viene stampato una volta per ogni iterazione, ne risulta che l’operazione precedente stamperà i 10 elementi del vettore lista sulla stessa riga.

E’ logico che in una operazione del genere gli argomenti possono essere più di uno infatti la forma generale di una istruzione che contiene un ciclo implicito è la seguente:

WRITE (unita,format)(val1,val2,….,i=inizio,fine,step)
READ(unita,format)(val1,val2,….,i=inizio,fine,step)

dove val1,val2,.. rappresentano i diversi argomenti oggetto dell’istruzione.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

I cicli nel Fortran


FORTRANNel linguaggio Fortran 90 un ciclo, che esegue un blocco di istruzioni un numero determinato di volte, èdetto ciclo iterativo. I cicli DO possono avere una delle due forme:

[nome:] DO indice=inizio,fine,incremento
istruzione1
istruzione2
………
istruzionen
END DO nome

oppure:

[nome:] DO indice=inizio,fine
istruzione1
istruzione2
………
istruzionen
END DO nome

Nel secondo caso l’incremento sarà unitario. Anche in questo caso l’etichetta nome è facoltativa. Nelle strutture di programma precedenti la variabile indice è una variabile intera utilizzata come contatore del ciclo iterativo, mentre le quantità intere inizio, fine e incremento sono i parametri del ciclo; hanno il compito di controllare i valori della variabile indice durante l’esecuzione del ciclo. Il parametro incremento è facoltativo; se è omesso, viene impostato a 1.

Le istruzioni comprese fra DO e END DO formano il corpo del ciclo iterativo; vengono eseguite ad ogni ripetizione del ciclo. Il meccanismo di funzionamento di un ciclo iterativo viene spiegato per passi nel prospetto seguente:

1) Ciascuno dei tre parametri inizio, fine e incremento può essere una costante, una variabile o un’espressione. Se si tratta di variabili o espressioni, i loro valori vengono preventivamente calcolati prima dell’inizio del ciclo.

2) All’inizio dell’esecuzione del ciclo DO, il programma assegna il valore inizio alla variabile di controllo indice. Se indice * incremento <= fine * incremento, il programma esegue le istruzioni all’interno del corpo del ciclo.

3) Dopo che le istruzioni del corpo del ciclo sono state eseguite, la variabile di controllo viene aggiornata nel modo seguente:

indice = indice + incremento

Se indice * incremento risulta ancora inferiore a fine * incremento, il programma ripete le istruzioni contenute nel corpo del ciclo.

4) Il passaggio 2 viene ripetuto fino a quando indice * incremento <= fine * incremento. Nel momento in cui questa condizione non risulta più vera, il controllo passa alla prima istruzione che si trova dopo la fine del ciclo (END DO).

L’esempio che segue ci permetterà di comprendere meglio il meccanismo esaminato nei passi precedenti. Allora analizziamo l’esempio seguente:

DO i = 1, 100
istruzione 1
……
……
10
istruzione n
END DO

In questo caso, le istruzioni da 1 a n saranno eseguite 100 volte. L’indice del ciclo avrà il valore 100 durante l’ultimo passaggio del ciclo. Quando il controllo passa all’istruzione DO dopo il centesimo passaggio, l’indice del ciclo assumerà il valore 101. Poichè 101 *1 > 100 *1, il controllo sarà trasferito alla prima istruzione che segue END DO.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Espressioni logiche nel Fortran


FORTRANLe forme simboliche degli operatori relazionali consentite nel Fortran sono le seguenti:

.Lt. < .GT. > .EQ. =
.LE. <= .GE. > = .NE. / =

Il costrutto IF-ELSE può essere chiamato fissando un’etichetta all’inizio del blocco:

nome : IF ( argomento logico )THEN
    istruzione
ELSE IF ( argomento logico ) THEN
   istruzione
END IF nome

Il costrutto CASE può essere usato per eseguire un insieme dei criteri di selezione di multi-alternativa:

nome : SELECT CASE (espressione di CASE)
CASE (selettore 1) nome
istruzione 1
istruzione 2
…….
CASE (selettore 2) nome
istruzione 1
istruzione 2
…….
…..
CASE DEFAULT nome
(selettore 2) nome
istruzione 1
istruzione 2
…….
END SELECT nome

Il selettore può essere un numero intero, un carattere, o un’espressione logica. Così come i blocchi di IF_ELSE, i costrutti CASE possono anche essere etichettati con un nome. L’opzione di DEFAULT in una costruzione CASE può essere omessa, ma è preferibile inserirla per migliorare lo stile del codice.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Le dichiarazioni di variabili nel Fortran


FORTRAN

Quando si invoca il comando IMPLICIT NONE, in ambiente FORTRAN, tutte le variabili di programma devono essere specificate esplicitamente. Le istruzione modificate di specifica del tipo possono essere usate per inizializzare le variabili o i parametri, ad esempio analizziamo le seguenti dichiarazioni:

Real :: Di = 0
integer :: Num\_Months = 12
Real,Parameter :: Pi = 3,1415927

La viaribile Di è dichiarata come tipo reale con valori iniziali 0., mentre Num\_Months rappresneta una variabile numero intero con il valore iniziale 12 e pi un parametro reale con il valore 3,1415927.

Il separatore :: (due punti) è richiesto in un’istruzione di specifica del tipo ogni volta che è usato per inizializzare una variabile o per dichiarare un attributo speciale (quale il PARAMETRO). Può essere omesso in altri casi.

Ad esempio, per dichiarare Area_circle come variabile reale, possiamo scrivere:

Area_circle Real

o, equivalentemente

Real :: Area\_circle

La seconda forma è consigliata in quanto presenta uno stile di programmazione uniforme. La precisione di un numero reale, di un numero intero, o complesso, o di una variabile logica può essere specificata usando un parametro del tipo KIND.

Ad esempio, per dichiarare una variabile A come un numero reale con almeno 10 cifre decimali di precisione con una gamma compresa tra -10^34 a 10^34, possiamo scrivere quanto segue:

REAL(KIND = SELECTED\_REAL\_KIND(10,34)) :: A

Se il processore che state usando non può sostenere una variabile con questa specifica di tipo, ne risulterà un errore compile-time. Per dichiarare una variabile reale equivalente a quella in doppia precisione presente nel fortran 77 ,dobbiamo scrivere semplicemente questo:

INTEGER, PARAMETER :: DP = SELECTED\_REAL\_KIND(14)
REAL(KIND = DP) :: A

Ciò dichiara la variabile A come reale e con almeno 14 cifre decimali. Il ;(punto e virgola) è usato come separatore in modo che diverse diverse istruzioni possano essere collocate sulla stessa riga. E’ però opportuno precisare che il posizionamento di più istruzioni su di una singola riga produce un codice poco leggibile, è quindi conveniente utilizzare tale applicazione solo per istruzioni semplici.

Ad esempio tre semplici istruzioni di assegnazione possono essere scritte come:

a=1;b=2;c=3

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Editing da linea di comando in Matlab

MATLAB

Le varie frecce e chiavi di controllo presenti sulla tastiera permettono di richiamare, compilare, e correggere comandi digitati in precedenza in ambiente Matlab. Per esempio, si supponga di digitare per sbaglio la seguente riga:

rho = (1 + sqt(5)) /2

In essa risulta sbagliata l’ortografia della funzione sqrt. MATLAB risponde allora con il seguente codice:

??? Undefined function or method ‘sqt’ for input arguments of type ‘double’.

Allora invece di riscrivere l’intera linea, basterà semplicemente cliccare sul tasto freccia su; in questo modo l’ultimo comando digitato comparirà sul prompt di Matlab e potremo correggerlo prima di mandarlo in esecuzione.

Per l’editing della linea di comando potremo utilizzare le frecce dx e sx per spostare il cursore sulla t ed inserire in questo modo la r mancante . L’uso ripetuto della freccia su richiama le linee digitate in precedenza, digitando un carattere e poi il tasto freccia su si cerca la linea di codice digitata precedente che inizia con quel carattere.

L’elenco dei comandi di linea disponibili è di seguito riportato:

  • freccia su oppure ctrl-p -Richiamano linea precedente
  • freccia giu oppure ctrl-n -Richiamano linea seguente
  • freccia sx oppure ctrl-b -Trasportano indietro di un carattere
  • freccia dx oppure ctrl-f -Trasportano in avanti di un carattere
  • ctrl+freccia dx oppure ctrl-r -Trasportano alla destra della parola
  • ctrl+freccia sx oppure ctrl-l -Trasportano alla sinistra della parola
  • home oppure ctrl-a -Porta all’inizio della linea
  • end oppure ctrl-e -Porta alla fine della linea
  • esc oppure ctrl-u -Ripulisce la linea
  • del oppure ctrl-d -Cancellano il carattere sul cursore
  • backspace oppure ctrl-h -Cancellano carattere dopo il cursore
  • ctrl-k -Cancella fino alla fine della linea.

Se un’espressione risulta essere troppo lunga e non rientra in una sola riga è possibile utilizzare l’operatore tre punti,…, seguito dal tasto  Return o Enter per indicare che l’espressione continua sulla prossima riga.

Ad esempio potremo scrivere:

s = 1 -1/2 + 1/3 -1/4 + 1/5 – 1/6 + 1/7…
– 1/8 + 1/9 – 1/10 + 1/11 – 1/12;

Gli spazi vuoti prima e dopo i seguenti operatori =, +, e – sono opzionali, ma migliorano la leggibilità del codice.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Eliminazione dell’output a video in Matlab

MATLAB

Se si digita semplicemente uno statement e poi si digita RETURN o Enter, MATLAB automaticamente mostre i risultati sullo schermo. Per evitare di mostrare a video ogni calcolo che Matlab effettua è possibile terminare la linea con un punto e virgola, MATLAB in tal caso effettua il calcolo ma non espone alcun output a viseo.

Questa operazione si manifesta particolarmente utile nel caso dell’utilizzo di script che presentano una grossa mole di calcoli; in tal caso la visualizzazione dei calcoli intermedi determinerebbe un inutile rallentam,ento del processore che andrebbe a discapito delle nostre operazioni.

Tale accorgimento risulta particolarmente utile quando si generano matrici di grandi dimensioni. Per esempio se volessimo generare una matrice magica 14×14 scriveremo:

>> A = magic(14)

A =

   177   186   195     1    10    19    28   128   137   146    99   108    68    77
   185   194   154     9    18    27    29   136   145   105   107   116    76    78
   193   153   155    17    26    35    37   144   104   106   115   124    84    86
     5   161   163   172    34    36    45   103   112   114   123   132    85    94
   160   162   171    33    42    44     4   111   113   122   131   140    93    53
   168   170   179    41    43     3    12   119   121   130   139   141    52    61
   169   178   187    49     2    11    20   120   129   138   147   100    60    69
    30    39    48   148   157   166   175    79    88    97    50    59   117   126
    38    47     7   156   165   174   176    87    96    56    58    67   125   127
    46     6     8   164   173   182   184    95    55    57    66    75   133   135
   152    14    16    25   181   183   192    54    63    65    74    83   134   143
    13    15    24   180   189   191   151    62    64    73    82    91   142   102
    21    23    32   188   190   150   159    70    72    81    90    92   101   110
    22    31    40   196   149   158   167    71    80    89    98    51   109   118

invece per non mostrare a video la matrice A basterà aggiungere un putno e virgola  a fine riga:

>> A = magic(14);
>>

in questo caso la matrice è stata generata ma non stampata a video. Si pensi al risparmio di memoria nel caso di una matrice 100×100 o di dimensioni ancora maggiori.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO: