2012-04-28 16 views
15

Voglio creare un programma matlab di base che normalizzi l'array dato di numero intero nell'intervallo specificato.Normalizzazione nell'intervallo variabile [x, y] in Matlab

  • ingressi sono un array [a1, a2, a3, a4, a5, A6, A7 ...], e l'intervallo [x, y]
  • uscita è array normalizzata.

Ma ovunque, vedo la normalizzazione nell'intervallo [0,1] o [-1,1]. Impossibile trovare la normalizzazione dell'intervallo variabile. Ti sarò grato se scrivi il codice MATLAB o la formula per l'intervallo variabile.

Grazie per le idee.

risposta

41

Se si vuole normalizzare a [x, y], prima normalizzare a [0, 1] via:

range = max(a) - min(a); 
a = (a - min(a))/range; 

Poi scala per [x,y] via:

range2 = y - x; 
a = (a * range2) + x; 

Mettere tutto insieme:

function normalized = normalize_var(array, x, y) 

    % Normalize to [0, 1]: 
    m = min(array); 
    range = max(array) - m; 
    array = (array - m)/range; 

    % Then scale to [x,y]: 
    range2 = y - x; 
    normalized = (array*range2) + x; 
+1

Grande soluzione, ma per alcuni istanti sembrava che Python e io avessimo copiato senza incollare king: P (e dopo aver upvoted e commentato ho guardato nel titolo e ho visto che era per MATLAB! scusa, anche se è stato molto utile!) –

+0

Cosa succede se non ho l'intervallo di input? Diciamo che mi piacerebbe mettere un numero, ad esempio 345, nell'intervallo [-1,1] – superpuccio

+0

@superpuccio:? Puoi chiarire cosa stai chiedendo? – Max

Problemi correlati