Comment cartographier les plages de valeurs dans MATLAB
Je l'espère, il y a une fonction MATLAB similaire à ce Arduino fonction:
http://arduino.cc/en/Reference/map
Fondamentalement, j'ai un temps variable avec 67 points de données allant de 0 à 1,15, et je veux la carte de 0 à 100% (donc, 101 points de données). Dans Arduino qui ressemblerait à quelque chose comme:
map(value, fromLow, fromHigh, toLow, toHigh)
Je peux utiliser interp1 dans MATLAB pour me les 101 points de données, mais je viens d'obtenir 101 points de données entre 0 et 1.15. Je sais que je peux il suffit de multiplier chaque valeur par 100/1.15, mais c'est inexact. Est-il une façon plus élégante de le faire dans MATLAB que je suis dominant?
(Ce post a regardé plein d'espoir, mais ce n'est pas ce que je suis à la recherche de:
Carte de fonction dans MATLAB?)
Grâce
map
de fonction au bas: (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
. Notez que cette fonction semble être mis en œuvre avec math entier, de sorte que vous aurez besoin de le faire dans Matlab ainsi si vous voulez reproduire la fonction complètement.Je sais que je peux écrire mon propre fonctionnement basé sur le code Arduino, ma question est si il ya quelque chose de déjà intégré à MATLAB qui peut faire cela. Merci.
OriginalL'auteur dustynrobots | 2013-07-12
Vous devez vous connecter pour publier un commentaire.
Si vous avez des réseaux de neurones boîte à outils disponible, alors vous pouvez essayer de mapminmax fonction. Par défaut, la fonction des cartes à [-1 1] interaval et obtient des entrées à la limite de données. Mais je crois que le remplissage
settings
structure avec vos valeurs et puis l'appel demapminmax
devrait aider.Vous pouvez remplir
PS
avec vos données. Il y a 10 champs. Mais, suivant l'exemple simple avec seulement 5 champs a fonctionné pour moi.x = [1 2 3]; ps = struct('yrange', 1, 'ymin', 0, 'no_change', 0, 'xrange', 2, 'xmin', 1); y = mapminmax('apply', x, ps);
Alors, vous pouvez avoir plusieurs créés au préalable les structures pour chaque cas de besoin.OriginalL'auteur akademi4eg
vous pouvez utiliser
linspace
, par exemplevous obtiendrez 101 points répartis uniformément entre les limites 0 et 1.15.
Je ne vois pas comment ce serait quelque chose de plus qu'un vectorisé version de
y = map(value, fromLow, fromHigh, fromLow, fromHigh);
, c'est à dire, de la cartographie à partir d'une gamme, exactement la même gamme.Je suis désolé, je n'ai pas compris votre question. permettez-moi d'essayer de reanswer il dans un court laps de temps. Il semble bien que tous vous avez besoin est
interp1
, en quoi ce que vous obtenez est inexact?Ok merci! Les imprécisions de partie est tout simplement la mise à l'échelle si je approximative de 100/1.15, mais si je viens d'utiliser la fraction explicitement que je devrais être bien.
OriginalL'auteur bla
Le FEX soumission maptorange peut faire exactement cela. Il prend la valeur initiale(s), la plage à partir de laquelle ils proviennent, et la plage sur laquelle ils devraient être cartographiés, et renvoie la valeur mise en correspondance(s). Dans votre exemple, ce serait:
(C'est en supposant que cartographie linéaire. Le script peut également la carte d'une fonction exponentielle.)
Pour passer de 67 à 101 valeurs, vous serait en effet besoin d'interpolation. Cela peut être fait soit avant ou après la cartographie.
OriginalL'auteur lrkrol