Monthly Archives: December 2014

Matlab scripts

MATLAB
Quando si richiama uno script, MATLAB esegue semplicemente i comandi presenti nel file. Gli Script possono operare su dati esistenti nel workspace, o possono creare dati nuovi su cui operare. Sebbene gli script non forniscano dati di output, qualsiasi variabile che loro creano rimane nel workspace, per essere usata in calcoli susseguenti. Inoltre, gli script possono produrre dei grafici, usando funzioni come plot.

Gli script sono il tipo più semplice di file di programma perché non hanno argomenti di ingresso o di uscita. Sono utili per automatizzare una serie di comandi MATLAB, come ad esempio calcoli che si devono eseguire ripetutamente dalla riga di comando o una serie di comandi da utilizzare più volte.

È possibile aprire un nuovo script nei seguenti modi:

  •      Evidenziare i comandi dalla cronologia dei comandi, fare clic destro, e selezionare Create Script.
  •      Fare clic sul pulsante New script nella scheda Home.
  •      Utilizzare la funzione edit.

Per esempio, creiamo un file chiamato rango.m che contiene i seguenti comandi MATLAB:

% Determinazione del rango della magic squares
r = zeros(1,32);
for n = 3:32
  r(n) = rank(magic(n));
end
r
bar(r)

Digitando sul prompt di matlab l’istruone:

rango

imponiamo a MATLAB di eseguire i seguenti comandi:

1)calcola il rango delle prime 30 magic squares
2)traccia il grafico del risultato

Si ottiene così il grafico seguente:

Matlab scripts

Un matlab script è il tipo più semplice di M-file in quanto non ha variabili di input e output. Risulta particolarmente utile quando si voglia automatizzare una serie di comandi MATLAB che devono essere eseguiti piu volte. Opera sui dati esistenti nell’ambiente di lavoro di base, oppure
puo creare nuovi dati. I dati che vengono generati rimangono nell’ambiente di lavoro
di base e possono essere riutilizzati per altri calcoli.

 

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Le istruzioni try e catch in Matlab

MATLAB
Le istruzioni try e catch in Matlab  consentono di ignorare il comportamento di errore predefinito per un insieme di istruzioni di programma. Se qualsiasi dichiarazione in un blocco try genera un errore, il controllo del programma passa immediatamente al blocco catch, che contiene le istruzioni di gestione degli errori.

Attraverso l’oggetto exception della classe MException, che risulta opzionale per il blocco catch, è possibile identificare l’errore.

L’esempio seguente mostra un blocco try / catch all’interno di una funzione che moltiplica due matrici. Se un’istruzione nel segmento try del blocco fallisce, il controllo passa al segmento di cattura. In questo caso, le dichiarazioni di cattura controllano il messaggio di errore che è stato rilasciato (restituito dall’oggetto lasterr) e rispondeno in modo appropriato.

try
   X = A * B
catch
   errmsg = lasterr;
   if(strfind(errmsg, 'Inner matrix dimensions'))
      disp('** Dimensione errata per le matrici')
end

Entrambi i blocchi try e catch possono contenere ulteriori dichiarazioni nidificate try / catch.

try
   statement1                      % Esecuzione statement1
catch
   try
      statement2                   % Tentativo di recupero errore
   catch
      disp 'Operazione fallita'    % manipolazione errore
   end
end

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Istruzione continue in Matlab

MATLAB

L’istruzione continue in Matlab interrompe temporaneamente l’esecuzione di un ciclo di programma, saltando eventuali istruzioni rimanenti nel corpo del ciclo. L’istruzione continue non provoca l’uscita immediata dal ciclo, come fa invece l’istruzione break o return, ma  continua all’interno del ciclo finché la condizione imposta da un ciclo for o while risulta soddisfatta.

L’istruzione continue in Matlab, nel caso fosse presente in un ciclo annidato, si comporta nello stesso modo. L’esecuzione è arretsta per la parte rimanete di programam presente nel ciclo for o while in cui si era verificato l’istruzione continue, e rientra nel ciclo se la condizione imposta restituisce true.

Vediamo allora un esempio che fa suo dell’istruzione continue in Matlab:

for k=-10:1:10
     if (k^2-30<0)
         continue;
     end
     val=k^2-30;
     fprintf('\n k=%g  val=%g',k,val)
 end

Il ciclo proposto valuta l’espressione k ^ 2-30 per k che va da -10 a 10 con passo unitario; tale valutazione però è efefttuata nel solo caso in cui tale espressione fornisce un valore positivo in quanto se dovesse risutare negativo l’istruzione continue non permetet l’esecuzione della parte restante del codice.

Istruzione continue in Matlab

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Ciclo Repeat in Matlab

MATLAB

Il ciclo Repeat in Matlab è caratterizzato dalla struttura REPEAT – END_REPEAT che rappresenta un ciclo che valuta il suo corpo fino a quando una condizione è soddisfatta. In un ciclo di ripetizione, prima è valutato il segmento di programma inserito nella struttura, poi viene effttuato il controllo sulla condizione e si ripete il ciclo fino a quando tale condizione restituisce TRUE. In contrasto con il ciclo while, nel ciclo repeat le istruzioni in esso contenute sono sempre valutate almeno una volta.

La sintassi del Ciclo Repeat in Matlab è la seguente:

repeat
  corpo del programma
until condizione end_repeat

Il corpo del programma può essere costituito da qualsiasi numero di istruzioni che devono essere separati mediante due punti: o una virgola;. Solo l’ultimo risultato valutato all’interno del corpo (il valore di ritorno del loop) è stampato su schermo. È possibile, a tal proposito, utilizzare il comando print per stampare a video i risultati intermedi.

La condizione contenuta nell’espressione booleana deve restituire un valore del tipo VERO o FALSO. La parola chiave  END_REPEAT può essere sostituita dalla parola chiave END.

Vediamo un esempio:

i := 1:
repeat 
  print(i);
  i := i + 1;
until i = 3 end:

In questa applicazione del ciclo Repeat in Matlab eseguiamo un ciclo che viene ripetuto fino a quando la condizione i=3 risulta vera. Stampiamo ad ogni opassaggio il valore di i in modo da verificare il corretto funzionamento.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Istruzione break in Matlab

MATLAB

L’istruzione break in Matlab interrompe l’esecuzione di un ciclo for o while. In tal caso le dichiarazioni del ciclo presenti dopo l’istruzione break non vengono eseguite. Nei cicli nidificati, l‘istruzione break in Matlab esce solo dal ciclo in cui si verifica, cosicchè il controllo passa all’istruzione che segue la fine di tale ciclo.

Tale tipo di istruzione viene di solito inserita in un codice per assicurare l’uscita dal ciclo nell’eventualità accada una specifica condizione. Questo è dovuto principalmente al fatto che deve essere evitata l’ipotesi che il ciclo continui ad iterare all’infinito.

Vediamo allora un alògoritmo che implemeta l’istruzione break al fine di uscire dal ciclo nel caso si verifichi una particolare condizione:

a = 0; fa = -Inf;
b = 3; fb = Inf;
while b-a > eps*b
  x = (a+b)/2;
  fx = x^3-2*x-5;
  if fx == 0
    break
  elseif sign(fx) == sign(fa)
    a = x; fa = fx;
  else
    b = x; fb = fx;
  end
end
x

Nel caso specifico è stato inserito un controllo per verificare quando la funzione risulta pari a zero in tal caso l’istruzione break determina l’uscita dal ciclo.

Istruzione  BREAK

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Ciclo While in Matlab

MATLAB

Il ciclo while in Matlab ripete un gruppo di istruzioni un numero indefinito di volte attraverso il controllo di una condizione logica. L’istruzione END posta alla fine del ciclo ne delinea le istruzioni.

Il ciclo while in Matlab si utilizza quando non si conosce in anticipo il numero di volte per il quale il ciclo dovrà essere ripetuto. Prima di ogni ripetizione, Matlab verifica la condizione, se risulta vera il ciclo sarà eseguito; allora vengono eseguite tutte le istruzioni presenti fino all’istruzione end, arrivati a questo punto è nuovamente verificatala condizione. Se risulta ancora vera il ciclo viene eseguito nuovamente…. Quando Matlab verifica che la condizione è diventata falsa il ciclo termina e vengono eseguite le istruzioni successive all’end. La variabile contenuta nella condizione prende il nome di variabile di ciclo.

Ciclo While in Matlab

Di seguito è riportato un programma completo, che illustra in modo semplice ed immediato l’utilizzo corretto delle strutture di controllo del flusso while e if. Il programma utilizza il metodo della bisezione per trovare uno zero di un polinomio.

a = 0; fa = -Inf;
b = 3; fb = Inf;
while b-a > eps*b
  x = (a+b)/2;
  fx = x^3-2*x-5;
  if sign(fx) == sign(fa)
    a = x; fa = fx;
  else
    b = x; fb = fx;
  end
end
x

Il risultato è la radice del polinomio x3 – 2x – 5, vale a dire:

x = 2.09455148154233

LINK DI APPROFONDIMENTO PER L’ARGOMENTO: