Tag Archives: giuseppe ciaburro

Operatore due punti in Matlab

MATLAB

L’operatore : (due punti)
L’operatore due punti rappresenta uno dei più importanti operatori di MATLAB. Si trova in molte forme diverse. Ad esempio l’espressione seguente:

1:10

rappresenta un vettore riga che contiene i numeri interi da 1 a 10

1 2 3 4 5 6 7 8 9 10

Per ottenere una specifica sequenza invece, si deve indicare un incremento. Per esempio:

>> 100:-7:50

ans =

   100    93    86    79    72    65    58    51

cioè una sequenza di numeri da 100 a 50 con passo uguale a -7; mentre

>> 0:pi/4:pi

ans =

         0    0.7854    1.5708    2.3562    3.1416

operatore.matlab
Le espressioni sottoscritte che coinvolgono l’operatore due punti assegnano porzioni di una matrice. Ad esempio assegniamo la solita matrice:

A=[1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]

ed estraiamone alcuni valori:

A(1:k,j)

rappresenta i primi k elementi della colonna jth di A. Allora estraiamo alcuni elementi:

>> A(1:4,4)

ans =

     4
     8
    12
    16

e calcoliamo la somma della quarta colonna.

>> sum(A(1:4,4))

ans =

    40

Il due punti assegna tutti gli elementi in una riga o colonna di una matrice e la keyword END  assegna l’ultima riga o colonna. Così

>> sum(A(:,end))

ans =

    40

calcola la somma degli elementi nell’ultima colonna di A.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Accesso agli elementi di una matrice in Matlab

MATLAB

Come accedere agli elementi di una matrice in Matlab

Vediamo in questa lezione come accedere agli elementi di una matrice in ambiente Matlab; per prima cosa quindi inseriamo nel workspace di Matlab una matrice di esempio:

>> A=[1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]

A =

     1     2     3     4
     5     6     7     8
     9    10    11    12
    13    14    15    16

L’elemento in riga i e colonna j di A è denotato con il simbolo A(i,j). Ad esempio:

>> A(4,2)

ans =

    14

è il numero nella quarta riga e seconda colonna. Per la nostra matrice corrisponde a 14. Così risulta possibile calcolare la somma degli elementi nella quarta colonna di A digitando:

A(1,4) + A(2,4) + A(3,4) + A(4,4)

Questo produce:

>> A(1,4) + A(2,4) + A(3,4) + A(4,4)

ans =

    40

ma non è il modo più elegante di sommare una singola colonna. E’ anche possibile per accedere agli elementi di una matrice utilizzare un singolo pedice, A(k). Questo è il modo solito di accedere agli elementi di vettori riga e vettori colonna.

elementi.matlab

Ma si può anche applicare ad una matrice bidimensionale in questo caso la matrice è considerata come un vettore colonna, formato dalle colonne della matrice originale. Così, per la nostra matrice, A(8) è un altro modo di individuare il valore 14 immagazzinato nella posizione A(4,2), cioè quarta riga seconda colonna.

>> A(8)

ans =

    14

Se si tenta di accedere agli elementi di una matrice al di fuori di essa, si commette un  errore:

>> t = A(4,5)
??? Attempted to access A(4,5); index out of bounds because size(A)=[4,4].

(Messaggio di errore)

D’altra parte, se si immagazzina un nuovo valore in un elemento della matrice che eccede il suo ordine, c’`e un aumento dell’ordine per accomodare il nuovo venuto:

>> A(4,5) = 17

A =

1     2     3     4     0
5     6     7     8     0
9    10    11    12     0
13    14    15    16    17

I vettori vengono trattati in Matlab in modo del tutto analogo. È possibile visualizzare le singole voci di un vettore, dopo averlo definito nel modo seguente:

V=[2 1 3 4];

per visualizzare la prima voce è sufficiente digitare:

>> V (1)
ans =
2

Questo comando stampa il primo elemento nel vettore. Si noti inoltre che una nuova variabile chiamata ans è stata creata.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

La matrice di Durer in Matlab

MATLAB

La matrice di Durer è quello che in gergo si chiama un quadrato magico. Un quadrato magico è uno schieramento di numeri interi distinti in una tabella quadrata tale che la somma dei numeri presenti in ogni riga, in ogni colonna e in entrambe le diagonali dia sempre lo stesso numero; tale intero è denominato la costante di magia o costante magica o somma magica del quadrato.

Inseriamo la matrice di Durer:

A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]

Verifichiamo tutto quello appena detto sui quadrati magici, usando MATLAB. Il primo tentativo è il seguente:

sum(A)

MATLAB risponde con:

ans = 34 34 34 34

Quando non si specifica una variabile di output, MATLAB usa la variabile ans, per immagazzinare i risultati di un calcolo. Si è in questo modo calcolato un vettore fila che contiene certamente le somme delle colonne di A; ogni colonna ha la stessa somma, la somma magica, 34.

Cosa si può dire sulle somme delle righe? MATLAB ha una preferenza per lavorare con le colonne di una matrice, cosìı il modo più facile per ottenere le somme delle righe è quello di trasporre la matrice. Trasponiamo allora la matrice e facciamone la somma.

L’operazione di trasposizione si ottine aggiungendo un apostrofo alla matrice da trasporre, ad esempio:

A’

determina il risultato seguente:

ans = 16 5 9 4
3 10 6 15
2 11 7 14
13 8 12 1

e

sum(A ‘) ‘

produce un vettore colonna che contiene le somme delle righe:

ans = 34 34 34 34

durer

La somma degli elementi della digonale principale è ottenuta facilmente con l’aiuto della funzione diag che estrae solo gli elementi dellla diagonale.

diag(A)

produce:

ans = 16 10 7 1

e

sum(diag(A))

produce:

ans = 34

L’altra diagonale, l’antidiagonale così chiamata non è così importante e MATLAB non ha una funzione immediata per calcolarla. Ma una funzione originariamente creata per il suo uso in grafica, fliplr riporta una matrice da sinistra a destra.

sum(diag(fliplr(A)))
ans = 34

Si è così verificato che la matrice di Durer è davvero una magic square e, nel processo, si sono utilizzate operazioni sulle matrici di MATLAB.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Immettere matrici in Matlab

MATLAB

Si possono immettere matrici in MATLAB in molti modi diversi.

  • – introdurre un elenco esplicito di elementi.
  • – caricare matrici da files di dati esterni.
  • – generare matrici utilizzando la funzione built-in.
  • – creare matrici con le proprie funzioni in M-files.

Iniziamo a far vedere come registrare la matrice come un elenco dei suoi elementi. Si seguano a tal proposito solamente alcune convenzioni di base:

  • Separare gli elementi di una riga con spazi vuoti o virgole.
  • Usare un punto e virgola ”;” per indicare la fine di ciascuna fila.
  • Racchiudere l’elenco intero di elementi con parentesi quadrate , [ ].

matrici.matlabPer registrare la matrice di Durer,basterà semplicemente digitare:

A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]

MATLAB espone a video solo la matrice digitata,

A = 16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1

Questo procedimento associa precisamente i numeri a porzioni di memoria. Una volta fornita la matrice, essa è registrata automaticamente nel workspace di MATLAB. Ora si può indicarla semplicemente digitando al prompt di Matlab la lettera A.

>> A

A =

    16     3     2    13
     5    10    11     8
     9     6     7    12
     4    15    14     1

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Il comando implicit none nel Fortran


FORTRANUn errore frequente che viene commesso dai programmatori è quello di utilizzare una variabile prima che questa venga dichiarata. In realtà tale rischio è tipico dei linguaggi di programmazione procedurali mentre quelli che sono stati realizzati per la programmazione ad oggetti ne sono esenti.

Il motivo di tutto questo è dovuto al fatto che il linguaggio di programmazione Fortran richiede che ogni variabile prima di essere utilizzata sia correttamente dichiarata, e non solo; prima di essere utilizzata dovrà anche essere inizializzata.

E’ questo il motivo per cui ogni programma Fortran, nella sezione dichiarativa presenta una dichiarazione dettagliata di tutte le variabili che in esso vengoo utilizzate.

Ed è proprio in tale momento che si può commettere l’errore di dimenticarsi della dichiarazione di una variabile che quindi verrà utilizzata all’interno del programma senza essere stata utilizzata e provocando quindi un errore.

Per obbligare il programmatore alla dichiarazione di tutte le variabili si utilizza appunto il comando inplicit none.

implicit.none
La sintassi dello statement implicit none è la seguente:

IMPLICIT NONE

Questo statement è utilizzato per evitare errori di utilizzo di variabili.Quando cioè viene utilizzato lo statement implicit none tutte le variabili devono essere dichiarate in una dichiarazione di tipo (dichiarazione specifica).

Ad esempio del tipo:

REAL :: {list of variables}

Nell’ipotesi una variabile venisse utilizzata senza essere stata dichiarata, un errore verrebbe rilevato in fase di compilazione. in questo modo riusciamo ad avere un controllo sulle variabili utilizzate nel programma.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Struttura di base di un programma Fortran


FORTRANUn programma in fortran 90 è caratterizzato dalla seguente struttura:

1) Sezione dichiarativa
E’ posizionata all’inizio e contiene istruzioni non eseguibili quali:

  •     nome del programma preceduto dal testo program;
  •     dichiarazione delle variabili.

2) Sezione esecutiva.
Rappresenta il corpo del programma e contiene le istruzioni eseguibili necessarie per effettuare le operazioni per le quali il programma stesso è stato ideato.

3) Sezione conclusiva.
Contiene le istruzioni che interrompono il programma quali:

  •     stop che interrompe il programma;
  •     end program che dice al compilatore che non c’`e pi`u nulla da compilare.

struttura.fortran

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Compilazione di un programma nel fortran


FORTRANLa procedura di compilazione di un programma fortran 90 avviene in maniera del tutto identica a quella utilizzata nelle precedenti versioni del fortran. Allora per compilare e collegare un codice sorgente fortran 90 con il nome main.f90, dobbiamo semplicemente digitare la seguente riga:

f90 main.f90

Questo creerà un archivio eseguibile chiamato a.out.

I programmi in fortran 90 che usano la forma libera di formato devono avere un’estensione f90. Come per il compilatore fortran 77, anche per il compilatore f90 possiamo specificare il nome del nostro file eseguibile utilizzando la seguente opzione:

f90 main.f90 -o main.out

fortran1

Abbiamo cioè utilizzato l’ opzione -o. Ciò creerà un archivio eseguibile chiamato main.out. Allo stesso modo, possiamo collegarci ad una libreria compilata di fortran 90 :

f90 main.f90 -L/usr/class/sccm001/lib -lmy\_lib90

Ciò collegherà il vostro programma main.f90 alla libreria compilata chiamata libmy\_lib90.a che risiede nell’indice /usr/class/sccm001/lib.

Supponiamo di aver scritto un programma per il calcolo dell’area di un triangolo che avremo chiamato triangolo.f90 a questo punto utilizzando il compilatore, vogliamo ottenere il file eseguibile; procediamo nel seguente modo:

1) Creiamo dapprima il file oggetto:

f90 -c triangolo.f90

Questo comando creerà un file triangolo.o.

2) Creiamo quindi il file eseguibile:

f90 -o triangolo.exe triangolo.o

Questo comando creerà il file triangolo.exe che rappresenta il file eseguibile cercato. A questo punto basterà digitare il nome del file senz estensione per lanciare il programma.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

La programmazione ad oggetti in Ruby

Guida alla programmazione con Ruby

Abbiamo già specificato che Ruby è totalmente Object Oriented, questo si traduce nel fatto che in ruby tutto è un oggetto. In tale aspetto riesce a surclassare il linguaggio ad oggetti per eccellenza e cioè Java in quanto in ruby non esiste nessuna distinzione tra tipi base e oggetti, allo stesso tempo la programmazione orientata agli oggetti in ruby non risulta ne invasiva ne fastidiosa, e ciò è dovuto alla sua maggior purezza.

Una caratteristica particolarmente gradita dai programmatori Ruby è stata la possibilità di utilizzare i cosiddetti blocchi che rappresentano una feature non comune nei linguaggi più diffusi e che permettono di rappresentare diversi problemi, anche molto diversi tra loro, con modalità chiare e significative.

Il Ruby risulta amato, allo stesso modo, dai programmatori professionisti che ne apprezzano le caratteristiche più avanzate, e dai principianti in quanto si presenta particolarmente adatto ad essere appreso come primo linguaggio.

Infatti grazie alla sua semplicità, è possibile comprendere le nozioni di base della programmazione, senza doversi preoccupare di innumerevoli convenzioni e aspetti non strettamente legati alla realizzazione degli algoritmi numerici.

RUBYOS

Inoltre possiamo dire che Ruby si presenta efficacemente espressivo in quanto fornisce molte strutture dati e tipi builtin, che rappresentano quelli offerti dal linguaggio; esempi sono:

  • hash,
  • array dinamici,
  • regexp,
  • numeri interi di dimensione arbitraria.

Le classi in ruby presentano un’interfaccia molto dettagliata, che determina una semplicità nell’utilizzo nelle operazioni comuni.

Una caratteristica che ha determinato il successo di Ruby nel panorama mondiale della programmazione è stata la sua estrema portabilità; esistono versioni di Ruby per piattaforma Linux (suo ambiente naturale visto che in tale contesto è stato sviluppato), per sistemi operativi Unix-like, Mac OS, e Windows in tutte le sue versioni.

RUBYOS

La versatilità di Ruby si manifesta nella sua interezza ,dal momento che esiste una versione di Ruby anche per l’obsoleto sistema operativo con interfaccia orientata ai caratteri MS-DOS.

Caratteristiche del linguaggio di programmazione Ruby

Guida alla programmazione con Ruby

Le caratteristiche peculiari di Ruby lo rendono un linguaggio di programmazione soprattutto semplice, il suo utilizzo si apprende in pochi giorni, senza presentare grosse difficoltà grazie ad una sintassi snella e davvero pratica; in aggiunta presentando a corredo un numero davvero corposo di librerie incluse nella distribuzione ed integrabili con quelle installabili tramite RubyGems si rende possibile, come già anticipato  realizzare i nostri programmi in brevissimo tempo.

Ruby si presenta particolarmente dinamico, un esempio è fornito dal fatto che le variabili possono essere tranquillamente utilizzate senza la necessità di dichiararne il tipo, sarà allora l’interprete in grado di identificarle; tutto questo però senza perdere in precisione in quanto le operazioni non consentite tra tipi diversi provocheranno un errore, cioè non potrà mai accadere, in modo più o meno nascosto, che un valore di un certo tipo venga utilizzato come se fosse di tipo diverso (strong typing).

Grazie a questo un operazione del tipo 1+”2″ (somma di un numero e di una stringa) determinerà un errore di runtime (errore in fase di esecuzione), diversamente da linguaggi come php o perl che invece non permettono un controllo analogo.

In ruby è possibile manipolare le classi ed i metodi a runtime, cioè possono essere aggiunti, cancellati o modificati in fase di esecuzione. In questo modo molte delle cose che negli altri linguaggi rappresentano delle strutture complesse possono in ruby costituire dei semplici metodi; è altresì possibile aggiungere classi e metodi personalizzati, creando dei Domain Specific Language (DSL).

DLS

Un Domain Specific Language è un minilinguaggio adatto ad un problema specifico, l’ideale sarebbe avere un linguaggio per ogni scopo, ma senza il problema di doverlo ogni volta imparare da zero. D’altronde il cuore della programmazione è costruire degli strumenti che permettano di risolvere un problema, ed un linguaggio è lo strumento per eccellenza.

Ruby è perfetto per la costruzione di semplici DSL da utilizzare all’interno della propria applicazione, grazie alla sua sintassi ed alle sue funzionalità di metaprogrammazione.

I commenti in Python

python

Commentare in Python è un’operazione che per certi versi si presenta molto diversa rispetto ad altri linguaggi, ma è abbastanza facile abituarsi a questo nuovo modo di inserire del testo esplicativo nei nostri codici.

In Python ci sono fondamentalmente due modi per commentare un programma:

  •   singola linea di commento
  •   linea multipla di commento

La linea singola di commento è utilizzata per inserire un commento breve (o per il debug), mentre la linea multipla di commento è spesso usata per descrivere qualcosa di molto più dettagliato.

commenti.python

Vediamo allora qualche esempio esplicativo per meglio comprendere i concetti fin qui introdotti. Iniziamo con la singola linea di commento:

print(“Questo non è un commento”)
#print(“Questo invece è un commento”)

Allora quando l’interprete incontra il simbolo #(cancelletto) ignora tutto quello che segue il simbolo fino alla fine della riga. Potremmo anche scrivere in questo modo:

print(“Questo non è un commento”)#Stampa di una stringa di testo

Per quanto riguarda invece la linea multipla di commento utilizzeremo il simbolo ”’, vediamo come:

”’
print(“Questo non è un commento”)
print (“Ulteriore riga di commento”)
”’
print(“Questo non è un commento”)

I commenti rappresentano una utile risorsa per il programmatore in quanto ci permettono di inserire del testo esplicativo molto prezioso nell’ottica di riusabilità del codice, ma si rendono particolarmente efficaci anche nella fase di debugging del codice in cui l’inserimento di strighe di testo ci aiuta nell’individuare possibili bug del nostro programma.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Link a risorse consigliate:

Il prompt di Python

python

Per essere immediatamente operativi iniìziamo a vedere il più semplice dei programmi che possiamo scrivere: e cioè una semplice sequenza di comandi.

Il prompt di Python sarà del tipo:

Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:06:53) [MSC v.1600 64 bit (AM
D64)] on win32
Type “help”, “copyright”, “credits” or “license” for more information.
>>>

Iniziamo allora a lavorare con il prompt di Python, scrivendo direttamente i singoli comandi, allora stampiamo a video il saluto del programmatore:

>>> print (‘Ciao mondo!’)
Ciao mondo
>>>

Come sarà possibile verificare il comando print non fa altro che chiedere a Python di mostrarci a video la stringa contenuta tra le parentesi. Nel nostro caso scriverà la sequenza di caratteri ‘Ciao mondo’.

python.prompt

Tale sequenza di caratteri è definita nel gergo dei programmatori stringa di caratteri o semplicemente stringa.

LINK CORRELATI ALL’ARGOMENTO:

Link a risorse consigliate: