ARRAY DI UNA MATRICE

di il
1 risposte

ARRAY DI UNA MATRICE

Salve a tutti sono qui perché ho un problemino con una function, in quanto mi è stato chiesto di scrivere una function che contenga in input una matrice (NxM) di numeri casuali e restituisca in output il valore minimo degli elementi maggiori di un fissato x.

allora io volevo creare un vettore riga che contenesse tutti i valori maggiori di x dopodiché trovare il minimo tra questi ma mi sono bloccato ala prima intenzione...
come posso creare un vettore riga che contenga i soli valori della matrice che sono maggiori del fissato x???
avevo pensato di creare un vettore riga di zeri che poi contenesse i valori della matrice maggiori di x ma nel caso i numeri della matrice siano tutti maggiori di 0 (quasi sicuramente) avrei un risultato falsato del minimo in quanto mi uscirebbe 0...

qualcuno sa come aiutarmi??

1 Risposte

  • Re: ARRAY DI UNA MATRICE

    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
    
Devi accedere o registrarti per scrivere nel forum
1 risposte