Table of euclidean distances...
- To: mathgroup at smc.vnet.net
- Subject: [mg7921] Table of euclidean distances...
- From: "Joel Bock" <jbock at INETWORLD.NET>
- Date: Mon, 21 Jul 1997 03:22:11 -0400
- Sender: owner-wri-mathgroup at wolfram.com
Hello MathGroup:
I'm trying to create a table of euclidean distances between coordinates of
source and field points in 3-space for an acoustics simulation. What I
have
done is both grossly brute-force and interminably long-running for large
numbers
of points. There has to be a better way! Can anyone suggest a better way
to do
this calculation, say, operating on vectors of points as opposed to one
element
at a time? Given two tables, "src" and "fld", comprised of elements that
each
have three Cartesian coordinates: e.g., src[[i]] = { x[[i]], y[[i]], z[[i]
}, etc. Then
the distance function is
eucDist[x1_,x2_]:=Sqrt[ (x1[[1]]-x2[[1]])^2 + (x1[[2]]-x2[[2]])^2 +
(x1[[3]]-x2[[3]])^2 ];
and the calculation of the table of distances is
R=Table[ eucDist[ src[[i]], fld[[j]] ], {i,nSrc}, {j,nFld} ];
This works, but is inefficient. For scatterers placed in the radiation
field of
the sources, things grind to a halt, as the scatterers have finite physical
dimension and therefore require 2 subscripts- one index for scatterer ID,
and the other for each "face" created to discretize the surface. I am
observing the familiar "swapping orgy" phenomenon running this on a
486DX2 with 16 MB memory. Buying a new computer is not an option for
me at present...
Any suggestions or example notebooks to speed this type of calculation
up would be very welcome. Thanks!