lunedì 2 dicembre 2013

Le procedure ricorsive in ambiente Matlab

Le procedure ricorsive in ambiente Matlab
Le procedure ricorsive in ambiente Matlab
Una procedura ricorsiva rappresenta una costruzione artificiosa che ci consente di utilizzare una funzione in se stessa. Analizziamo dapprima un semplice esempio di funzione ricorsiva alfine di mettere in evidenza appunto il fatto che la funzione richiama se stessa:
 
 
function y=expo(n)

if n==0, y=1;
   else y=2*expo(n-1);
end


Analizziamo allora nel dettaglio la funzione che presenta una struttura ramificata. La condizione n == 0 è la base della ricorsione. Questo è l’unico modo che si ha per ottenere che il programma smetta di chiamare se stesso. 

La parte contenuta nel costrutto else rappresenta la ricorsione. C'è da notare che la chiamata expo (n-1) avviene all'interno della funzione che sta definendo expo (n). La parte essenziale di tutto il procedimento di ricorsione è appunto la chiamata a un valore inferiore, n-1, e tale chiamata continuerà fino a quando non si verificherà un valore di n pari a 0. 

Possiamo quindi affermare che una procedura di ricorsione che abbia successo chiamerà sempre un valore inferiore.Ci sono molti pericoli connessi all'utilizzo di un algoritmo di ricorsione. Ad esempio così come accade con i cicli while, è possibile per la funzione di chiamare se stessa all'infinito in modo da non fornire mai una risposta. Un'altro problema che può nascere dal suo utilizzo è legato al fatto che la ricorsione può causare calcoli ridondanti che, anche se possono essere conclusi, possono richiedere molto tempo. Infine  mentre un programma ricorsivo è in esecuzione ha bisogno di spazio in più per accogliere l’overhead della ricorsione. 


venerdì 29 novembre 2013

Come calcolare la radice quadrata in Matlab

Come calcolare la radice quadrata in Matlab
Come calcolare la radice quadrata in Matlab
La radice quadrata di un numero x è un numero y tale che il suo quadrato sia x. Ogni numero reale non negativo ha un'unica radice quadrata non negativa, chiamata radice quadrata principale. Ogni numero reale maggiore di zero ha due radici quadrate distinte, quella principale e il suo opposto.

Il concetto di radice quadrata può essere esteso ai numeri negativi nell'ambito dei numeri complessi. Più generalmente, il concetto di radice quadrata può essere esteso in qualunque contesto in cui sia ben definita la nozione di quadrato di un elemento.

In ambiente Matlab la funzione che calcola la radice quadrata di un numero è una funzione predefinita che si chiama ‘sqrt’. La funzione sqrt restituisce la radice quadrata di ogni elemento della matrice X. Per gli elementi di X che sono negativi o complessi, sqrt (X) produce risultati complessi.

Esempio:
- Radice di un numero reale non negativo
 
>> sqrt(9)
 
ans =

        3

- Radice di un nuemro complesso

>> sqrt(-i)

ans =

   0.7071 - 0.7071i


LINK DI APPROFONDIMENTO PER L'ARGOMENTO:

martedì 12 novembre 2013

Funzioni per l'inserimento di matrici in Matlab

Funzioni per l'inserimento di matrici in Matlab
Funzioni per l'inserimento di matrici in Matlab
In ambiente Matlab si lavora con le matrici, questo è alla base del funzionamento del software che è stato ideato proprio su tale concetto. La prima operazione da fare quindi, quando si opera in ambiente Matlab è prorpio quella di creare le matrici.

A tal proposito ci vengono in aiuto una serie di funzioni che sono state create con il presupposto di fornire un prezioso aiuto per la costruzione di matrici. Vediamone alcune.

Le funzioni built-in rand,magic, e Hilb, per esempio, forniscono un modo semplice per creare matrici con cui sperimentare le potenzialità di Matlab. 

In particolare il comando rand (n) crea una matrice nxn con gli elementi generati casualmente e distribuiti uniformemente tra 0 e 1, mentre rand (m, n) creerà una matrice mxn con la stessa tecnica. Vediamo degli esempi di applicazioen della funzione rand:

>> rand(2)

ans =

    0.8147    0.1270
    0.9058    0.9134

>> rand(2,3)

ans =

    0.6324    0.2785    0.9575
    0.0975    0.5469    0.9649


La funzione magic (n) invece creerà una matrice nxn integrale che è un quadrato magico e cioè la somma degli elementi preesenti su ogni  riga o colonna fornisce sempre lo stesso risultato:

>> magic(4)

ans =

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

La funzione Hilb (n) creerà la matrice nxn di Hilbert, che rappresenta un esempio di matrici mal condizionate (m e nrappresentano , naturalmente , numeri interi positivi):

>> hilb(3)

ans =

    1.0000    0.5000    0.3333
    0.5000    0.3333    0.2500
    0.3333    0.2500    0.2000


C'è da precisare che le matrici possono anche essere generate con un ciclo for, ma questa procedura la vedremo in un'altra lezione.

Per accedere invece alle singole voci di matrici e vettori è possibile utilizzare gli indici tra parentesi nel modo consueto. Per esempio, A (2,3) indica l’elemento nella seconda riga, terza colonna della matrice A e X (3) denota la terza coordinata del vettore x. 

>> A=rand(4,4)

A =

    0.1576    0.8003    0.7922    0.8491
    0.9706    0.1419    0.9595    0.9340
    0.9572    0.4218    0.6557    0.6787
    0.4854    0.9157    0.0357    0.7577

>> A(2,3)

ans =

    0.9595

Una matrice o un vettore accetta solo numeri interi positivi come indici. 

LINK DI APPROFONDIMENTO PER L'ARGOMENTO:


giovedì 7 novembre 2013

Come dividere le matrici in Matlab

Come dividere le matrici in Matlab
Come dividere le matrici in Matlab
Matlab dispone di due procedure per effettuare la divisioni tra matrici: la divisione sinistra e la divisione destra.

Nella divisione a sinistra, che viene eseguita con l'utilizzo del simbolo \ , se A è quadrata, l'operazione viene effettuata usando l’algoritmo di eliminazione di Gauss e questi fattori sono applicati per risolvere un sistema del tipo A* x = b. 

Se A non è quadrata, l'operazione viene effettuata usando l’algoritmo di ortogonalizzazione di Householder con pivoting di colonna e gli elementi vengono utilizzati per risolvere il sotto-sistema o sovra–sistema determinato nel senso minimi quadrati. 

La divisione destra, che viene eseguita con l'utilizzo del simbolo / , è definita negli stessi termini della divisione sinistra solo che si applica alla trasposizione delle matrici: 


b / A = (A ‘\ b’) ‘ 

Di seguito vi propongo una serie di esempi di operazioni sulle matrici per meglio comprendere il funzionamento attraverso il quale il software tratta gli elementi delle matrici.

Se A è una matrice quadrata invertibile e b è una colonna compatibile, allora l’operazione:

x = A \ b  (divisione sinistra)

è la soluzione del sistema A * x = b, mentre l’operazione

x = b / A  (divisione destra)

 è la soluzione del sitema x * a = b.


 LINK DI APPROFONDIMENTO PER L'ARGOMENTO:

giovedì 24 ottobre 2013

Come moltiplicare due array in Matlab

Come moltiplicare due array in Matlab
Come moltiplicare due array in Matlab

Una volta dichiarato un array viene creato per eseguire su di esso delle oeprazioni, allora vediamo come è possibile operare sugli array o meglio vediamo come applicare gli oepratori che comunemente utilizziamo in aritmetica, ma questa volta facendoli agire su dei vettori.

Le comuni operazioni di addizione e sottrazione operano sugli array in modo del tutto naturale, nel senso che si applicano con le stesse regole che abbiamo imparato ad utilizzare a scuola, così l'operazione verrà eseguita sui singoli elementi. Per meglio comprendere come opera Matlab vediamo un esempio, nel quale dopo aver definito due vettori ne effettueremo la somma e la sottrazione:


>> a=[1:5]

a =

     1     2     3     4     5

>> b=[3:7]

b =

     3     4     5     6     7

>> c=a+b

c =

     4     6     8    10    12

>> d=b-a

d =

     2     2     2     2     2


Come è possibile notare dopo aver definito due vettori con un numero di elementi uguale (nella fattispecie 5 elementi), ne abbiamo fatto la somma (la sottrazione) con il risultato che il vettore ottenuto ha per elementi la somma (la sottrazione) degli elementi dei due vettori.
   
Ma cosa ccade quando eseguiamo le operazioni di moltiplicazione e di addizione? A tal proposito è importante segnalare che affinchè le seguenti operazioni:

*
^
/

vengano effettuate punto per punto è necessario applicare la npotazione . e cioè facendo precedere l'operatore da un punto, vediamo come:

>> a=[1:5]

a =

     1     2     3     4     5

>> b=[3:7]

b =

     3     4     5     6     7


  >> e=a.*b

e =

     3     8    15    24    35

>> f=a./b

f =

    0.3333    0.5000    0.6000    0.6667    0.7143


Vediamo un altro esempio:

[1,2,3,4].*[1,2,3,4]

oppure

[1,2,3,4].^2

che ci permette di ottenere:

[1,4,9,16]

PER APPROFONDIRE L’ARGOMENTO CLICCARE SUL LINK SEGUENTE:




mercoledì 23 ottobre 2013

Una serie di trucchi in Matlab

Una serie di trucchi in Matlab
Una serie di trucchi in Matlab
Quando si opera con un software da diverso tempo si impara ad utilizzare delle scorciatoie che ci permettono di eseguire le stesse operazioni ma in un tempo nettamente inferiore. Si tratta di una serie di trucchi che si acquisiscono con l'esperienza del fare, maturata nel tempo e con lo spirito di indagine e ricerca di nuove strade da percorrere.

Di seguito vi rendo partecipe di una serie di procedure che ci permettono di eseguire delle operazioni di normale routine con estrema velocità, risparmiando così del tempo prezionso da dedicare magari ad approfondire altri argoemnti.

  1. Iniziamo col dire che se lasciamo come ultimo carattere di una dichiarazione un punto e virgola, allora indicheremo all'interprete Matlab di sopprimere la stampa del risultato, ma comunque l’operazione viene eseguita corretamente. Ciò risulta essenziale nella soppressione delle stampe indesiderate di risultati intermedi
  2. Ricordiamo poi che MATLAB è case-sensitive nei nomi di comandi, funzioni e variabili. Così la stringa GIUSEPPE assumen un significato diverso rispetto alla stringa giuseppe.
  3. Il comando who elenca le variabili disponibili attualmente nell’area di lavoro; se digitato al prompt di matlab ci darà qualcosa di simile:
    >>who
    Your variables are:
    a b c giuseppe GIUSEPPE
  4. Una variabile può essere cancellata dallo spazio di lavoro con il comando:
    clear nomevariabile
  5. Il comando clear se usato senza opzioni  annulla tutte le variabili non permanenti.
  6. La variabile permanente eps (epsilon) restituisce la precisione della macchina, che risulta essere di circa 10-16 sulla maggior parte delle macchine. E ‘utile per determinare la convergenza dei processi iterativi.
  7. Un calcolo, può essere fermato sulla maggior parte delle macchine, senza lasciare MATLAB con la combinazione di tasti CTRL-C (CTRL-BREAK su un PC).
Per adesso vi ho proposto queste semplici procedure che ci aiutano ad essere magiormante produttivi, nel futuro ci saranno certamente altre occasioni per svelarni altri trucchi in ambiente Matlab.  

PER APPROFONDIRE L’ARGOMENTO CLICCARE SUL LINK SEGUENTE:


martedì 22 ottobre 2013

Come salvare una sessione in Matlab

Come salvare una sessione in Matlab
Come salvare una sessione in Matlab
MATLAB rappresenta un linguaggio di programmazione interpretato, nel senso che le espressioni che vengono digitate nell’ambiente di lavoro di Matlab sono interpretate e quindi valutate. Quando si inizia una nuova sesione in ambiente MATLAB le dichiarazioni sono inserite nel prompt nella forma:

variabile = espressione 

o semplicemente 

espressione 

Tali espressioni possono essere composte da operatori, funzioni e nomi di variabili. Fato questo il comando passa all'interprete Matlab che valuta l’espressione producendo una matrice, la quale sarà poi visualizzata sullo schermo ed assegnata ad una variabile per poterla poi utilizzare nei successivi calcoli. 

Se nella dichiarazione della variabile vengono omessi il nome ed il segno =, viene creata automaticamente una variabile ans le viene assegnato il risultato del calcolo.

Quando si scrivono più espressioni allora per separare un comando da un altro basta utilizzare un ritorno a capo. Ma nel caso volessimo, per ridurre la lunghezza del codice, inserire più di una dichiarazione sulla stessa riga basterà separarli con un punto e virgola. 

Per evitare di visualizzare il risultato di ogni operazione sul prompt di Matlab basterà inserire un punto e virgola alla fine dell'espressione, in modo che la stampa sia soppressa, ma l’assegnazione venga effettuata. 

Ricordiamo ancora una volta che MATLAB è case-sensitive nei nomi di comandi, funzioni e variabili. Ad esempio, la funzione MIAFUNZIONE non è la stessa della funzione miafunzione. 

Salvataggio di una sessione
Quando ci si disconnette o si esce dall'ambiente MATLAB tutte le variabili utilizzate nella corrente sessione risulteranno perse. Per evitare di perederre tutto il lavoro effettuato fino a quel momento possiamo invocare il comando save prima di uscire dalla sessione. In questo modo tutte le operazioni effettuate nelle sessione corrente e le variabili utilizzate saranno scritte in un file con nome matlab.mat. 

>>save

Quando si avviaerà una nuova sessione MATLAB, attraverso l'utilizzo del comando load potremo ripristinare l’area di lavoro al suo stato precedente.

>> load
Loading from: matlab.mat

PER APPROFONDIRE L’ARGOMENTO CLICCARE SUL LINK SEGUENTE: