2011-11-17 12 views
4

J'ai 2 vecteurs dont l'un est de dimension 200 * 2 et l'autre de 3 * 2. Tous sont des points dans un système de coordonnées cartésien. Je veux calculer la distance entre les 200 premiers et les 3 autres points et les stocker dans un vecteur. J'utilise une fonction comme celle-ci;Distance entre deux points dans Matlab

for i=1:cur 
    for j=1:200 
     L(j,i)=sqrt(square(P2(i,1)-C(j,1))+square(P2(i,2)-C(j,2))) 
    end 
end 

où est cabot 3, P2 étant le 3 * 2 vecteur et C étant le 200 * 2.Now les résultats que je reçois sont complètement faux, mais je ne peux pas comprendre le problème à cela. Toute aide serait bonne, s'il y a une autre façon de calculer ce que j'apprécierais.Par la façon de plus d'informations;

P2 = [2 -2;3 -5 ; -1 3]; 

et l'autre est

theta = linspace(0,2*pi,200)'; %' 
unitCircle = [cos(theta) sin(theta)]; 
C = zeros(numel(theta),2,num); 

Répondre

7

square est pas pour élever au carré la valeur, il renvoie les valeurs de l'onde carrée.

Vous pouvez utiliser pdist2 pour calculer la distance entre deux paires ensembles d'observations comme suit:

X = randn(200, 2); 
Y = randn(3, 2); 
D = pdist2(X,Y,'euclidean'); % euclidean distance 
+0

Je pensais juste que dehors, maintenant je suis à l'aide pow2 au lieu de cela mais je suis toujours obtenir des résultats irrevelant faire vous savez comment ça se passe? –

+2

N'utilisez pas non plus 'pow2'. 'pow2 (x)' renvoie 2 à la puissance x, pas x à la puissance 2. Pour obtenir x au carré, utilisez 'x.^2'. –

1

La fonction square n'est pas ce que vous voulez (il generates a square wave).

Pour calculer le carré d'un nombre, utilisez l'opérateur ^:

x = 3; 
y = x^2; 
disp(y); % Prints 9 
+0

Je modifiais la question pour ajouter ceci en même temps :) – petrichor

+0

Merci, c'était vraiment utile, dommage que je ne pouvais pas penser à moi-même :). –

+0

@ user1001296 - vous devez marquer une réponse comme "accepté" pour informer officiellement le répondant que sa réponse était la meilleure. –

0
tic 
A = pdist2(X, X); 
toc 
% method 2 
tic 
n = size(X, 1); 
idx = repmat(1:n, n, 1); 
D = sqrt(sum((X(idx,:)-X(idx',:)).^2, 2)); 
D = reshape(D, n, n); 
toc 
find(A-D) 
Elapsed time is 0.021950 seconds. 
Elapsed time is 0.043413 seconds. % and add your satisfaction approximately -0.02 seconds 
Questions connexes