Esercizi Svolti in Matlab: differenze tra le versioni

Da Bioingegneria Elettronica e Informatica.
(Traccia 1)
(Esercizio 2)
Riga 100: Riga 100:
 
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
 
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 ordinare in maniera crescente (utilizzando l'algoritmo del selection sort) una riga della matrice.
+
Innanzitutto definisco una funzione il cui compito è quello di calcolare la somma di tutti gli elementi di una matrice.
 
<syntaxhighlight lang="matlab" line>
 
<syntaxhighlight lang="matlab" line>
function [ M ] = ordina_crescente( M, r, c )
+
function [sum] = somma (M, r, c)
%ordina_crescente funzione che implementa l'algoritmo del selection sort
+
%somma funzione che calcola la somma di tutti gli elementi della matrice B avente dimensioni r e
%  La funzione accetta 3 parametri (la matrice, l'indice della riga da
+
    sum = 0;
%  ordinare e il numero di colonne) e restituisce la matrice con la
+
     for i=1:r
r-esima riga ordinata in modo crescente
+
         for j=1:c
+
             sum = sum + M(i,j);
     for i = 1 : c-1
+
         end
        i_min = i;
+
         j = i+1;
+
        for j = j : c
+
             if M(r, j) < M(r, i_min)
+
                % Se vero, aggiorno l'indice dell'elemento minimo
+
                i_min = j;
+
            end
+
        end
+
+
        % Blocco di codice relativo allo scambio
+
        temp = M(r, i);
+
        M(r, i) = M(r, i_min);
+
         M(r, i_min) = temp;
+
 
     end
 
     end
 +
 
end
 
end
       
 
</syntaxhighlight>
 
  
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.
 
<syntaxhighlight lang="matlab" line>
 
function [ M ] = ordina_decrescente( M, r, c )
 
%ordina_decrescente funzione che implementa l'algoritmo del selection sort
 
%  La funzione accetta 3 parametri (la matrice, l'indice della riga da
 
%  ordinare e il numero di colonne) e restituisce la matrice con la
 
%  r-esima riga ordinata in modo decrescente
 
 
    for i = 1 : c-1
 
        i_max = i;
 
        j = i+1;
 
        for j = j : c
 
            if M(r, j) > M(r, i_max)
 
                i_max = j;
 
            end
 
        end
 
       
 
        temp = M(r, i);
 
        M(r, i) = M(r, i_max);
 
        M(r, i_max) = temp;
 
    end
 
end
 
           
 
       
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
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.
+
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.
  
 
<syntaxhighlight lang="matlab" line>
 
<syntaxhighlight lang="matlab" line>
Riga 161: Riga 123:
 
     m = input('');
 
     m = input('');
 
     flag = m<=0;
 
     flag = m<=0;
end
 
flag=true;
 
while flag==true
 
    n = input('');
 
    flag= n<=0;
 
 
end
 
end
  
Riga 171: Riga 128:
 
A=[];
 
A=[];
 
for i=1:m
 
for i=1:m
     for j=1:n
+
     for j=1:m
 
         A(i,j)=input('');
 
         A(i,j)=input('');
 
     end
 
     end
 
end
 
end
  
% Creo la matrice B esattamente uguale alla matrice A
+
sum = somma(A, m, m);
B = A;
+
  
 
for i = 1 : m
 
for i = 1 : m
     if mod(i,2)==0
+
     for j = 1 : m
         % Caso riga pari
+
        if i < j
         B = ordina_crescente(B, i, n);
+
            B(i,j) = sum;
    else
+
         end
         % Caso riga dispari
+
         if i > j
         B = ordina_decrescente(B, i, n);
+
            B(i,j) = 0;
 +
         end
 +
         if i == j
 +
            B(i,j) = A(i,j);
 +
        end
 
     end
 
     end
 
end
 
end
  
disp(A)
+
disp(A);
 
disp(B);
 
disp(B);
           
+
 
       
+
 
</syntaxhighlight>
 
</syntaxhighlight>

Versione delle 22:13, 13 gen 2017

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);