Sei sulla pagina 1di 20

Riepilogo

 MATLAB  

Esercitatore:  Daniel  Dubois  


Dichiarazione  Variabili  
C   MATLAB  
Tipo  Nome=valore;   Le  variabili  non  si  dichiarano  
  esplicitamente.  E'  sufficiente  
Esempi  di  dichiarazione:   effe3uare  un  assegnamento  per  
  dichiarare  automa<camente  la  
int  a=5;   variabile.  
float  f=9.8;    
char  stringa[10]="Ciao";   Esempi:  
  a=5;  
Dopo  la  dichiarazione  le  variabili:   f=9.8;  
•   non  possono  essere  eliminate   stringa='Ciao';  
•   non  possono  cambiare  Npo    
Per  cancellare  una  variabile  uNlizzare  
l'istruzione  clear  nomevariabile;  
Le  variabili  possono  cambiare  <po  
con  un  semplice  assegnamento.  
Assegnamento  Variabili  
C   MATLAB  
Nome=valore;   Nome=valore;  
   
int  a,b,c;   E'  uguale  a  come  si  fa  in  C,  ma  si  
  possono  assegnare  anche  gli  array.  
Esempi  di  assegnamento:    
  Esempi  di  assegnamento:  
a=5;    
b=9;   a=5;  
c=b;   b=9;  
b=a;   c=b;  
a=c;   b=a;  
  a=c;  
Non  e'  possibile  assegnare  array  interi    
(ma  solo  elemento  per  elemento)  
Sequenze  di  istruzioni  
C   MATLAB  
In  C  le  istruzioni  seguono  le   In  MATLAB  le  istruzioni  sono  separate  
dichiarazioni  e  sono  separate  a  punN   da  punN  e  virgola  e/o  ritorni  a  capo.  
e  virgola  (;)    
  Se  l'istruzione  e'  seguita  da  un  punto  e  
Esempio:   virgola  il  suo  risultato  NON  viene  
  stampato.  In  tu`  gli  altri  casi  viene  
prinX("Inserisci  un  numero:  ");   stampato  il  risultato  dell'operazione  
scanf("%d",&numero);   eseguita.  
prinX("Hai  inserito:  %d!\n",numero);    
  Esempio:  
 
numero=input('Inserisci  un  numero:  ');  
disp(['Hai  inserito:  '  numero]);  
Istruzioni  di  ingresso  e  uscita  
C   MATLAB  
Richiesta  di  un  numero  da  tas<era:   Richiesta  di  un  numero  da  tas<era:  
   
prinX("Inserire  un  numero:  ");   a=input('Inserire  un  numero:  ');  
scanf("%d",&a);    
  Stampa  su  schermo  del  suo  doppio:  
Stampa  su  schermo  del  suo  doppio:   fprinX('%d  raddoppiato  fa  %d\n',a,a*2)  
   
print("%d  raddoppiato  fa  %d\n,   disp([num2str(a)  '  raddoppiato  fa  '    
                     a,a*2);                                    num2str(a*2));  
   
Le  istruzioni  input/disp  funzionano  nel  
seguente  modo:  
• disp(['stringa'  num2str(numero)  …])  
• le  stringhe  devono  essere  
rappresentate  tra  apici  singoli,  i  numeri  
all'interno  della  funzione  num2str(…)    
Operatori  
C   MATLAB  
Addizione:  +   Addizione:  +  
Soerazione:  -­‐     Soerazione:  -­‐    
MolNplicazione:  *     MolNplicazione:  *    
Divisione:  /     Divisione:  /  (divisore  a  destra),  \  
Resto  divisione:  %   (divisore  a  sinistra)    
Elevamento  a  potenza:  pow(n1,n2)     Resto  divisione:  mod(n1,n2)  
NOT  logico:  !     Elevamento  a  potenza:  ^    
AND  logico:  &&     NOT  logico:  ~  
OR  logico:  ||     AND  logico:  &  (oppure  &&)  
  OR  logico:  |  (oppure  ||)    
Non  u<lizzabili  con  ve3ori  e  matrici.    
TuM  u<lizzabili  anche  con  ve3ori  e  
matrici.  

NOTA:  In  MATLAB  le  operazioni  possono  avvenire  sull'intera  matrice,  o  elemento  per  
elemento.  In  quest'ulNmo  caso  bisogna  far  precedere  l'operatore  dal  PUNTO  (es:  .*)  
Relazioni  
C   MATLAB  
Uguaglianza:  ==   Uguaglianza:  ==  
Non  uguaglianza:  !=     Non  uguaglianza:  ~=    
Minore:  <     Minore:  <    
Minore  o  uguale:  <=     Minore  o  uguale:  <=    
Maggiore:  >   Maggiore:  >  
Maggiore  o  uguale:  >=     Maggiore  o  uguale:  >=    
   
Non  u<lizzabili  con  ve3ori  e  matrici.   TuM  u<lizzabili  anche  con  ve3ori  e  
matrici.  

NOTA:  In  MATLAB  le  relazioni  tra  numeri  resNtuiscono  valore  true  (1)  o  false  (0).  
Nel  caso  di  relazioni  tra  veeori/matrici  il  risultato  sara'  un  veeore/matrice  di  
valori  true  o  false  (ve3ore/matrice  logica)  oeenuta  applicando  la  relazione  a  tu`  
gli  elemenN  singolarmente.  
Esempio:  l'uguaglianza  tra  un  veeore  A  avente  per  elemenN  i  numeri  1  e  2  e  un  
veeore  B  avente  numeri  5  e  2  resNtuisce  un  veeore  risultato  avente  per  elemenN  
false  e  true  (perché  1  è  diverso  da  2,  mentre  2  è  uguale  a  2).  
Istruzione  if  
C   MATLAB  
if  (c1)  {   if  c1  
 istruzioni  eseguite  se  c1  e'  vera;    istruzioni  eseguite  se  c1  e'  vera  
}  else  if  (c2)  {   elseif  c2  
 istruzioni  eseguite  se  c1  e'  falsa,    istruzioni  eseguite  se  c1  e'  falsa,  
               ma  c2  e'  vera;                  ma  c2  e'  vera;  
}  else  if  (cN)  {   elseif  cN  
             istruzioni  eseguite  se  tu7e  le                istruzioni  eseguite  se  tu7e  le  
             condizioni  fino  a  cN-­‐1  sono  false                condizioni  fino  a  cN-­‐1  sono  false  
             e  cN  e'  vera;                e  cN  e'  vera;  
}  else  {   else  
 istruzioni  eseguite  se  tu7e  le    istruzioni  eseguite  se  tu7e  le  
               condizioni  sono  false.                  condizioni  sono  false.  
}     end    
Array  e  Matrici  
C   MATLAB  
Dimensioni  fisse  fissate  durante  la   Le  dimensioni  possono  variare.  
dichiarazione.   Le  variabili  array/matrici  possono  
Sono  variabili  non  assegnabili.   essere  assegnate.  
   
L'accesso  ai  singoli  elemenN  avviene   L'accesso  agli  elemenN  avviene  
uNlizzandi  gli  indici  tra  parentesi   uNlizzando  gli  indici  tra  parentesi  
quadre  (si  inizia  a  contare  da  0).   tonde  (si  inizia  a  contare  da  1).  
   
Esempi:   Esempi:  
float  m[6][6];   a(6,6)=0  
m[1][2]=65.21;   a(2,3)=65.21  
m[2][4]=121.23;   a(3,5)=121.23  
b=a    
Creazione  di  Array  e  Matrici  in  MATLAB  (1)  
•  Veeori/Matrici:  
–  Si  inseriscono  I  valori  tra  parentesi  quadre  [  ]  
–  I  valori  si  separano  con  degli  spazi  
–  Le  righe  si  separano  tra  loro  con  punN  e  virgola  ;  
•  Esempio:  
–  Matrice  3x3  avente  1  2  3  nella  prima  riga,  4  5  6  
nella  seconda  riga,  7  8  9  nella  terza:  
–  [1  2  3;4  5  6;7  8  9]  
Creazione  di  Array  e  Matrici  in  MATLAB  (2)  
•  Sequenze:  
–  Modo  compaeo  per  dichiarare  array  
–  valore_inizio:valore_finale  
–  valore_inizio:incremento:valore_finale  
–  Quando  l'incremento  e'  omesso  vale  1  
•  Esempi:  
–  1:5  ó  [1  2  3  4  5]  
–  3:5  ó  [3  4  5]  
–  1:2:5  ó  [1  3  5]  
–  3:3:12  ó  [3  6  9  12]  
–  [1:3;  2:2:6;  3:3:9]  ó  [1  2  3;  2  4  6;  3  6  9]    
Accesso  agli  elemenN  di  una  matrice  
•  Accesso  al  singolo  elemento  tramite  indice:  
–  Per  accedere  ad  un  elemento  di  un  veeore  o  una  matrice  si  fa  come  in  C:  si  
uNlizza  l'indice  dell'elemento  (iniziando  da  1)  racchiuso  tra  parentesi  tonde,  
dopo  il  nome  della  matrice.  
•  Esempio:  
–  A=[1  2  3;4  5  6;7  8  9]  
–  Estraggo  l'elemento  centrale  (riga  2  e  colonna  2):  A(2,2)  à  5  
•  Accesso  a  più  di  un  elemento  tramite  un  veeore  di  indici:  
–  E'  possibile  specificare  piu'  di  un  indice  contemporaneamente.  
•  Esempio:  
–  A=[1  2  3;4  5  6;7  8  9]  
–  Estraggo  la  prima  riga:  A(1,[1  2  3])  equiv.  a  A(1,1:3)  equiv.  a  A(1,:)  
–  Estraggo  l'ulNma  colonna:  A([1  2  3],3)  equiv.  a  A(1:3,3)  equiv.  a  A(:,3)  
–  Estraggo  la  soeomatrice  2x2  oeenuta  considerando  solo  le  prime  due  righe  e  
le  prime  due  colonne:  A([1  2],[1  2])  
Ciclo  While  
C   MATLAB  
while  (c1)  {   while  c1  
 istruzioni  eseguite  fino  a  quando    istruzioni  eseguite  finché  c1  e'  vera  
               c1  e'  vera;   end  
}      
  Esempio:  
Esempio:    
  ii=1;  
int  i=1;   while  ii<10  
while  (i<10)  {          disp(['Numero  '  num2str(ii)])  
     prinX("Numero  %d",i);          ii=ii+1;  
     i++;   end  
}  
Ciclo  For  
C   MATLAB  
for  (istr_in;  c1;  istr_fine_it)  {   for  variabile=ARRAY_DI_VALORI  
 corpo  del  ciclo;    corpo  del  ciclo  
}   end  
   
• Eseguo  l'istruzione  istr_in   Eseguo  il  corpo  del  ciclo  tante  volte  
• Valuto  c1   quanN  sono  I  valori  contenuN  
• Se  c1  e'  vera  eseguo  il  corpo  del  ciclo   nell'array  di  valori.  Ad  ogni  iterazione  
seguito  dall'istruzione  di  fine   la    variabile  del  ciclo  assume  uno  dei  
iterazione  (istr_fine_it)  e  ripeto   valori  dell'array.  
questo  passo,  altrimenN  esco  dal    
ciclo.   Esempio:  
for  ii=[1  2  3  4  5  6  7  8  9]  
Esempio:        disp([num2str(ii)]);  
for  (i=1;i<10;i++)  {   end  
       prinX("%d\n",i);  
}  
Veeorizzazione  
•  Quando  si  vuole  eseguire  un'operazione  su  tu`  gli  elemenN  
della  matrice  si  può  uNlizzare  direeamente  il  nome  evitando  i  
cicli  for  sui  singoli  elemenN  à  maggior  leggibilità  e  efficienza  
•  Esempio  1:  calcolo  del  quadrato  di  tu`  gli  elemenN:  
–  A.^2          (il  "."  serve  per  forzare  l'operazione  elemento  per  elemento  anziché  
fare  il  quadrato  matriciale)  
•  Esempio  2:  calcolo  della  radice  quadrata  di  tu`  gli  elemenN  di  A:  
–  sqrt(A)  
–  Equivalente,  senza  veeorizzazione,  a:  
–  [NUM_RIGHE  NUM_COLONNE]=size(A);  
for  ii=1:NUM_RIGHE  
     for  jj=1:NUM_COLONNE  
             A(ii,jj)=sqrt(A(ii,jj))  
     end  
end  
Matrici  Logiche  (1)  
•  Sono  le  matrici  risultato  dopo  l'esecuzione  di  
relazioni  (uguaglianza,  disuguaglianza,  ecc)  
•  Sono  composte  da  valori  falso  (0)  e  vero  (1)  
•  Esempi:  
–  [1  2;3  4]==[1  3;3  5]  à  [1  0;1  0]  
–  5>6  à  0  
–  [0  0  0  0]>=[0  0  0  2]  à  [1  1  1  0]  
Matrici  Logiche  (2)  
•  Le  matrici  logiche  possono  essere  uNlizzate  per  estrarre  una  
soeomatrice  da  una  matrice.  
•  Esempio:  
–  A=[1  2;3  4]  
–  B=A>2.5                            à  [0  0;1  1]  
–  A(B)                                          à  [3;4]  
•  Aeraverso  le  matrici  logiche  e'  possibile  modificare  con  una  sola  
operazione  piu'  elemenN  di  una  matrice  esistente.  
•  Esempio:  
–  A=[1  2;3  4]  
–  Si  vogliono  modificare  i  numeri  pari  in  zero  
–  Apari=mod(A,2)==0  à  Apari  è  una  matrice  logica  che  ha  valore  vero  
soltanto  per  i  valori  pari  della  matrice  A,cioè  vale  [0  1;0  1]  
–  A(Apari)=0  à  i  valori  di  A  per  cui  Apari  ha  elemento  vero  vengono  
sosNtuiN  con  il  valore  0.  
Funzioni  uNli  per  gli  array  
•  sum(v)  à  somma  gli  elemenN  dell'array  v  
•  min(v),  max(v)  à  calcola  minimo  e  massimo  di  v  
•  find(v)  à  resNtuisce  gli  indici  degli  elemenN  non  
nulli  del  veeore  v  
•  NOTA:  se  al  posto  di  un  veeore  viene  messa  una  
matrice  viene  generato  un  veeore  in  cui  ogni  
elemento  ha  la  simma/minimo/massimo  degli  
elemenN  della  corrispondente  colonna  della  
matrice.  
Funzioni  di  aggregazione  per  gli  array  (1)  
•  sum(v)  à  somma  i  valori  degli  elemenN  dell'array  v  
•  min(v),  mean(v),  max(v)  à  calcola  minimo,  media  e  massimo  di  v  
•  Esempio  1  (array):  
–  v=[4 1 2 0 3]
–  sum(v)à10, min(v)à0, mean(v)à2, max(v)à4
•  Esempio  2  (matrice):  
–  v=[0 2 0;
2 1 0;
4 0 0]
–  sum(v) à [6 3 0], min(v)à[0 0 0],
mean(v)à[2 1 0], max(v)à[4 2 0]
–  NOTA:  Tuee  le  funzioni  di  aggregazione  in  caso  di  matrice  operano  sempre  prima  sulla  prima  
dimensione  (colonne).  Se  si  vuole  aggregare  per  righe  occorre  specificare  la  dimensione.    
–  NOTA  2:  si  noN  come  la  sintassi  sia  leggermente  diversa  nel  caso  di  sum  e  mean  dal  caso  di  
min  e  max,  il  moNvo  di  questa  differenza  e'  il  faeo  che  min  e  max  hanno  un  secondo  
parametro  facoltaNvo  che  deve  essere  per  forza  specificato  come  vuoto  nel  caso  si  volesse  
inserire  la  dimensione,  per  maggiori  informazioni  su  questo  secondo  parametro  consultare  
help min e  help max direeamente  dall'interprete  di  MATLAB):  
–  sum(v,2) à [2 3 4]', mean(v,2) à [0.667 1.000 1.333]'
–  min(v,[],2)à[0 0 0]', max(v,[],2)à[2 2 4]'
ATTENZIONE!  Con  min  e  max  bisogna  specificare  []  come  secondo  
parametro  quando  si  specifica  la  dimensione!    
Funzioni  di  aggregazione  per  gli  array  (2)  
•  find(v)  à  resNtuisce  gli  indici  degli  elemenN  non  nulli  del  veeore  v  
•  Esempio  1  (array):  
–  v=[4 1 2 0 3]
–  x=find(v)
xà[1 2 3 5]
•  Esempio  2  (matrice):  
–  v=[0 2 0;
2 1 0;
4 0 0]
–  [x]=find(v)
xà[2 3 4 5]' Si  noN  che  gli  indici  vengono  contaN  per  colonna  
iniziando  da  1.  
–  [r c]=find(v)
rà[2 3 1 2]', cà[1 1 2 2]'
–  In  quest'ulNmo  caso  vengono  resNtuiN  gli  indici  delle  righe  e  delle  colonne  
corrispondenN  agli  elemenN  non  nulli  della  matrice  v  (iniziando  da  1).