2010-03-16 19 views
3

Supposons que nous avons un vecteur commeCalcul de la distance maximale entre les éléments de vecteur dans Matlab

x = -1:0.05:1; 
ids = randperm(length(x)); 
x = x(ids(1:20)); 

Je voudrais calculer la distance maximale entre les éléments de x d'une certaine façon idiomatiques. Il serait facile de simplement parcourir toutes les combinaisons possibles des éléments de x mais je pense qu'il pourrait y avoir un moyen de le faire avec les fonctions intégrées de MATLAB d'une manière folle mais idiomatique.

Répondre

7

Qu'en est-

max_dist = max(x) - min(x) 

?

1

... Uhh aimerait avoir un Matlab mes mains et il est encore tôt le matin, mais ce quelque chose comme:

max_dist = max(x(2:end) - x(1:end-1)); 

Je ne sais pas si c'est ce que vous cherchez pour.

+0

Cela permettrait de calculer la distance maximale entre les éléments suivants. Je préférerais l'avoir sur toutes les combinaisons possibles. – lhahne

2

Voulez-vous dire la différence entre les éléments les plus grands et les plus petits de votre vecteur? Si vous le faites, alors quelque chose comme ça va fonctionner:

max(x) - min(x) 

Si vous n'avez pas, alors j'ai mal compris la question.

2

Il s'agit d'un calcul de distance interpoint, bien que simple, puisque vous travaillez dans une dimension. Vraiment ce point qui tombe à une distance maximale dans une dimension est toujours l'un des deux points possibles. Il suffit donc de saisir la valeur minimale et la valeur maximale de la liste et de déterminer laquelle est la plus éloignée du point en question. Donc, en supposant que les chiffres en x sont des nombres réels, cela fonctionnera:

xmin = min(x); 
xmax = max(x); 
maxdistance = max(x - xmin,xmax - x); 

Comme alternative, il y a quelque temps que je mets un outil de calcul de distance interpoint générale sur l'échange de fichiers (IPDM). Il est assez intelligent pour des problèmes particuliers comme le problème le plus éloigné 1-d. Cet appel serait le faire pour vous:

D = ipdm(x,'subset','farthest','result','struct'); 

Bien sûr, il ne sera pas aussi efficace que le simple code que j'ai écrit ci-dessus, car il est un outil entièrement général.