Per quanto riguarda il tuo codice, dovresti provare ad eseguirlo in modalità debug per scoprire dove sia l'errore.
Se si vogliono sfruttare le funzioni built-in" di MatLab, l'esercizio si riduce a:
% Sort the row with respect to the second column
m1=sortrows(m,2)
% Find the unique elements with respect to the first column
[~,b]=unique(m1(:,1))
% Use the second output parameter to get the desired values
M_out=m1(b,:)
Il concetto è: la funzione "unique" identifica gli elementi "unici" di una matrice, nel caso ci siano più elementi uguali, "prende" l'ultimo; avendo ordinato in modo crescente le righe della matrice in base alla seconda colonna, all'ultimo di ognuno degli elementi elemento "unici" corrisponderà il valore massimo sulla seconda colonna.
Nel caso si voglia risolvere l'esercizio utilizzando solo cicli "for" e blocchi "if", applicando (più o meno) la logica precedentemente descritta, l'esercizio si potrebbe impostare come segue:
% Get the number of rows of the input matrix
n=size(m,1)
%m=m(randperm(n),:);
% Sort (descending) the input matrix with M_outpect to the first column
for i=1:n-1
for j=i+1:n
if(m(i,1) <= m(j,1))
tmp=m(j,:);
m(j,:)=m(i,:);
m(i,:)=tmp;
end
end
end
% Identify the "unique" elements in the first column of the input matrix
% by evaluating the difference between adjacent elements ad find the indices of the
% cases in which the difference is different fro 0
cnt=1
for i=2:n
if(m(i,1)-m(i-1,1) ~= 0)
diff_idx(cnt)=i-1
cnt=cnt+1
end
end
% iterate over the set of "unique" values"
% Get the rows with the same values on the first column and look for the highest
% valule in the second column
v=m(1:diff_idx(1),:)
mx=-1e-9
for i=1:size(v,1)
if(v(i,2) >= mx)
mx=v(i,2)
end
end
M_out=[v(1) mx]
for i=1:length(diff_idx)-1
v=m(diff_idx(i)+1:diff_idx(i+1),:)
mx=-1e-9
for i=1:size(v,1)
if(v(i,2) >= mx)
mx=v(i,2)
end
end
M_out=[M_out;v(1) mx]
end
v=m(diff_idx(end)+1:end,:)
mx=-1e-9
for i=1:size(v,1)
if(v(i,2) >= mx)
mx=v(i,2)
end
end
% The M_outults
M_out=[M_out;;v(1) mx]
Ovviamente bisognerebbe verificare le soluzioni con diversi set di dati.