# I need to calculate the distance matrix between these locations in ev charging stations placement

3 views (last 30 days)

Show older comments

##### 0 Comments

### Accepted Answer

recent works
on 30 Nov 2023

% Assuming chargingStationCoordinates contains the coordinates of potential charging stations

% Calculate distance matrix between charging stations

numStations = size(chargingStationCoordinates, 1);

distanceMatrix = zeros(numStations);

for i = 1:numStations

for j = 1:numStations

distanceMatrix(i, j) = norm(chargingStationCoordinates(i, :) - chargingStationCoordinates(j, :));

end

end

disp('Distance Matrix:');

disp(distanceMatrix);

##### 0 Comments

### More Answers (1)

Konrad
on 30 Nov 2023

Hi,

let's say you have 10 2d coordinates of charging stations

pos = rand(10,2);

Then one efficient way of computing the distance matrix would be:

m = pos * pos';

dist = sqrt(bsxfun(@plus, diag(m), diag(m)') - 2*m);

##### 1 Comment

Konrad
on 30 Nov 2023

Edited: Konrad
on 30 Nov 2023

Note that since 2016 or so, Matlab does implicit singleton expansion, i.e. you don't need the bsxfun() but you can write:

%sqrt(diag(m) + diag(m)' - 2*m)

which seems to be considerably faster.

EDIT: After some more testing it's not much of a difference:

tic;

for k = 1:1000

pos = rand(200,2);

m = pos * pos';

dist = sqrt(diag(m)+diag(m)' - 2*m);

end

toc

tic;

for k = 1:1000

pos = rand(200,2);

m = pos * pos';

dist = sqrt(bsxfun(@plus, diag(m), diag(m)') - 2*m);

end

toc

A different approach using the Pythagorean theorem:

tic;

for k = 1:1000

pos = rand(200,2);

dist = sqrt(sum( (permute(pos,[1 3 2])-permute(pos,[3 1 2])).^2 ,3));

end

toc

### See Also

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!