Ci sono molti modi per scrivere la funzione.
Nella domanda non è chiaro se la funzione debba restituire il valore minimo tra tutti i valori o il valore minimo per ogni colonna.
Neguito, si considera che vengono calcolati e restituiti entrambi.
La funzione deve ricevere in input, come minimo, due parametri: la matrice ed il valore di soglia.
Per rendere la funzione più generale, si potrebbe inserire un ulteriore parametro in input che consenta di scegliere se restituire, il valore minimo degli elementi maggiori di un fissato x oppure il maggiore.
Uno dei (tanti) modi possibili per impostare la funzione potrebbe essere:
[*] calcolare una matrice temporanea come differenza tra la matrice in input ed il valore di soglia
[*] nel caso si cerchino i valori minimi degli elementi maggiori di un fissato x, tra i valori della matrice temporanea, i valori minori o uguali a 0 andranno scartati (in quanto non soddisfano la condizione)
[*] gli elementi "indesiderati" della matrice possono essere settati al valore NaN
[*] a questo punto sarà sufficiente identificare i valori minimi (lungo le colonne - uno dei due output della funzione) usando la funzione
min
[*] utilizzando di nuovo la funzione
min con il risultato ottenuto al passo precedente, si ottiene il secondo output, il "minimo dei minimi".
Nel caso nella matrice di input non ci siano valori che soddisfano la condizione viene restituito il valore NaN che può essere "identificato" in altre eventuali sezioni / funzioni del codice, tramite la funzione
isnan.
Nella funzione, inoltre, bisognerebbe inserire una serie di controlli per verificare il numero e la validità dei dati in input, ecc.
Una possibile implementazione potrebbe essere:
function [res_mat,res_val]=cerca_min(in_mat,soglia)
% Calcolo della differenza tra la matrice in input ed il valore di soglia e
% memorizzazione in una matrice temporanea
tmp=in_mat-soglia
% I valori negativi si avranno nel caso il dato nella matrice sia INFERIORE al
% valore della soglia, ertanto vanno scartati (settati al valore NaN)
tmp(tmp <= 0)=NaN
% Nella matrice temporanea sono rimasti solo i valori maggiori della soglia
% Identificazione dei valori
res_mat=min(tmp)
res_val=min(res_mat)
Input ed invocazione della funzione
in_mat=randi(100,5,3)
in_mat =
84 24 87
22 73 72
83 93 64
89 33 98
32 50 79
soglia=randi(100,1,1)
soglia = 33
[res_mat, res_val]=cerca_min(in_mat,soglia)
Output]
res_mat =
83 50 64
res_val = 50