Esercizi Svolti in Matlab

Da Bioingegneria Elettronica e Informatica.

Vitoantonio Bevilacqua vitoantonio.bevilacqua@poliba.it

Antonio Brunetti antonio.brunetti@poliba.it

Gianpaolo Francesco Trotta gianpaolofrancesco.trotta@poliba.it


Esercizio 1

Esiste una matrice A, le cui dimensioni sono m per le righe ed n per le colonne. Si vuole creare una matrice B contenente gli stessi elementi della matrice A, ma con le righe pari ordinate in modo crescente e le righe dispari ordinate in maniera decrescente.

Innanzitutto definisco una funzione il cui compito è quello di ordinare in maniera crescente (utilizzando l'algoritmo del selection sort) una riga della matrice.

  1. function [ M ] = ordina_crescente( M, r, c )
  2. %ordina_crescente funzione che implementa l'algoritmo del selection sort
  3. %   La funzione accetta 3 parametri (la matrice, l'indice della riga da
  4. %   ordinare e il numero di colonne) e restituisce la matrice con la
  5. %   r-esima riga ordinata in modo crescente
  6.  
  7.     for i = 1 : c-1
  8.         i_min = i;
  9.         j = i+1;
  10.         for j = j : c
  11.             if M(r, j) < M(r, i_min)
  12.                 % Se vero, aggiorno l'indice dell'elemento minimo
  13.                 i_min = j;
  14.              end
  15.          end
  16.  
  17.         % Blocco di codice relativo allo scambio
  18.         temp = M(r, i);
  19.         M(r, i) = M(r, i_min);
  20.         M(r, i_min) = temp;
  21.     end
  22. end

Lo stesso discorso precedente vale per la seguente funzione, il cui compito è quello di ordinare in maniera decrescente (utilizzando l'algoritmo del selection sort) una riga della matrice.

  1. function [ M ] = ordina_decrescente( M, r, c )
  2.  %ordina_decrescente funzione che implementa l'algoritmo del selection sort
  3. %   La funzione accetta 3 parametri (la matrice, l'indice della riga da
  4. %   ordinare e il numero di colonne) e restituisce la matrice con la
  5. %   r-esima riga ordinata in modo decrescente
  6.  
  7.     for i = 1 : c-1
  8.         i_max = i;
  9.         j = i+1;
  10.         for j = j : c
  11.             if M(r, j) > M(r, i_max)
  12.                 i_max = j;
  13.              end
  14.         end
  15.  
  16.         temp = M(r, i);
  17.         M(r, i) = M(r, i_max);
  18.         M(r, i_max) = temp;
  19.     end
  20. end

Infine, lo script principale. Come si può vedere, vengono chieste all'utente le dimensioni della matrice e gli elementi della stessa. Dopo aver creato la matrice B a partire dalla matrice A, le sue righe vengono ordinate chiamando, di volta in volta, la funzione corretta.

  1. % Acquisizione dimensioni della matrice
  2. flag=true;
  3. while flag==true
  4.     m = input('');
  5.     flag = m<=0;
  6. end
  7. flag=true;
  8. while flag==true
  9.     n = input('');
  10.     flag= n<=0;
  11. end
  12.  
  13. % Acquisizione degli elementi della matrice
  14. A=[];
  15. for i=1:m
  16.     for j=1:n
  17.         A(i,j)=input('');
  18.     end
  19. end
  20.  
  21. % Creo la matrice B esattamente uguale alla matrice A
  22. B = A;
  23.  
  24. for i = 1 : m
  25.     if mod(i,2)==0
  26.         % Caso riga pari
  27.         B = ordina_crescente(B, i, n);
  28.     else
  29.         % Caso riga dispari
  30.         B = ordina_decrescente(B, i, n);
  31.     end
  32. end
  33.  
  34. disp(A)
  35. disp(B);

Esercizio 2

Esiste una matrice quadrata A. Si vuole creare una matrice B contenente sotto la diagonale principale tutti elementi nulli, sopra la diagonale principale tutti elementi pari alla somma di tutti gli elementi della matrice A, mentre sulla diagonale principale i corrispondenti elementi della matrice A

Innanzitutto definisco una funzione il cui compito è quello di calcolare la somma di tutti gli elementi di una matrice.

  1. function [sum] = somma (M, r, c)
  2. %somma funzione che calcola la somma di tutti gli elementi della matrice B avente dimensioni r e 
  3.     sum = 0;
  4.     for i=1:r
  5.         for j=1:c
  6.             sum = sum + M(i,j);
  7.         end
  8.     end
  9.  
  10. end

Successivamente, lo script principale. Come si può vedere, vengono chieste all'utente le dimensioni della matrice e gli elementi della stessa. Dopo aver calcolato la somma di tutti gli elementi della matrice A, viene creata la matrice B dando il valore coretto a ciascun elemento della matrice.

  1. % Acquisizione dimensioni della matrice
  2. flag=true;
  3. while flag==true
  4.     m = input('');
  5.     flag = m<=0;
  6. end
  7.  
  8. % Acquisizione degli elementi della matrice
  9. A=[];
  10. for i=1:m
  11.     for j=1:m
  12.         A(i,j)=input('');
  13.     end
  14. end
  15.  
  16. sum = somma(A, m, m);
  17.  
  18. for i = 1 : m
  19.     for j = 1 : m
  20.         if i < j
  21.             B(i,j) = sum;
  22.         end
  23.         if i > j
  24.             B(i,j) = 0;
  25.         end
  26.         if i == j
  27.             B(i,j) = A(i,j);
  28.         end
  29.     end
  30. end
  31.  
  32. disp(A);
  33. disp(B);

Esercizio 3

Esiste una matrice quadrata A. Si vuole creare una matrice B con tutti gli elementi pari a quelli della matrice A, tranne quelli sulla diagonale principale che devono corrispondere ai valori medi delle righe corrispondenti.

Innanzitutto definisco una funzione il cui compito è quello di calcolare la media degli elementi di una riga della matrice.

  1. function [med] = media (B, c, i)
  2. %media funzione per il calcolo della media della i-esima riga di una matrice
  3.     sum = 0; 
  4.     for j = 1 : c
  5.         sum = sum + B(i,j);
  6.     end
  7.     med = sum / c;
  8.  
  9. end

Successivamente, lo script principale. Come si può vedere, vengono chieste all'utente le dimensioni della matrice e gli elementi della stessa. Dopo aver creato la matrice B a partire dalla matrice A, per ciascuna riga di B è calcolata la media e inserito come elemento sulla diagonale principale.

  1. % Acquisizione dimensioni della matrice
  2. flag=true;
  3. while flag==true
  4.     m = input('');
  5.     flag= m<=0;
  6. end
  7. flag=true;
  8.  
  9. % Acquisizione degli elementi della matrice
  10. A=[];
  11. for i=1:m
  12.     for j=1:m
  13.         A(i,j) = input('');
  14.     end
  15. end
  16.  
  17. B = A;
  18. for i = 1 : m
  19.     med = media(B,m,i);
  20.     B(i,i) = med;
  21. end
  22.  
  23. disp(A);
  24. disp(B);