Esercizi Svolti in Matlab
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.
function [ M ] = ordina_crescente( M, r, c )
%ordina_crescente 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 crescente
for i = 1 : c-1
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
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.
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
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.
% Acquisizione dimensioni della matrice
flag=true;
while flag==true
m = input('');
flag = m<=0;
end
flag=true;
while flag==true
n = input('');
flag= n<=0;
end
% Acquisizione degli elementi della matrice
A=[];
for i=1:m
for j=1:n
A(i,j)=input('');
end
end
% Creo la matrice B esattamente uguale alla matrice A
B = A;
for i = 1 : m
if mod(i,2)==0
% Caso riga pari
B = ordina_crescente(B, i, n);
else
% Caso riga dispari
B = ordina_decrescente(B, i, n);
end
end
disp(A)
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.
function [sum] = somma (M, r, c)
%somma funzione che calcola la somma di tutti gli elementi della matrice B avente dimensioni r e
sum = 0;
for i=1:r
for j=1:c
sum = sum + M(i,j);
end
end
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.
% Acquisizione dimensioni della matrice
flag=true;
while flag==true
m = input('');
flag = m<=0;
end
% Acquisizione degli elementi della matrice
A=[];
for i=1:m
for j=1:m
A(i,j)=input('');
end
end
sum = somma(A, m, m);
for i = 1 : m
for j = 1 : m
if i < j
B(i,j) = sum;
end
if i > j
B(i,j) = 0;
end
if i == j
B(i,j) = A(i,j);
end
end
end
disp(A);
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.
function [med] = media (B, c, i)
%media funzione per il calcolo della media della i-esima riga di una matrice
sum = 0;
for j = 1 : c
sum = sum + B(i,j);
end
med = sum / c;
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.
% Acquisizione dimensioni della matrice
flag=true;
while flag==true
m = input('');
flag= m<=0;
end
flag=true;
% Acquisizione degli elementi della matrice
A=[];
for i=1:m
for j=1:m
A(i,j) = input('');
end
end
B = A;
for i = 1 : m
med = media(B,m,i);
B(i,i) = med;
end
disp(A);
disp(B);