How do I efficiently calculate a scalar distance with 3d geometry?
17 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I have a piece of code that is called many times (~5e5) during a time stepping solution. Having run profiler, the following line is slowing everything down:
r2 = sqrt((x-x2).*(x-x2)+(y-y2).*(y-y2)+(z-z2).*(z-z2));
Where x, y, z are (500, 1) and x2, y2, z2 are scalars.
Any suggestions?
Thanks!
0 commentaires
Réponses (2)
Matt J
le 29 Juil 2013
This might speed things up,
Haven't used it myself, though.
2 commentaires
Jan
le 30 Juil 2013
DNorm2 requires matrices as input and creating [dx, dy, dz] at first wastes too much time. So if the data could be organized as [500 x 3] matrix instead of three vectors, DNorm2 would be an option.
Richard Brown
le 29 Juil 2013
Modifié(e) : Richard Brown
le 29 Juil 2013
You should use hypot. It also has better numerical stability.
edit sorry, you're in 3D. That obviously won't work. You can use hypot as
r = hypot((x-x2) + 1i*(y-y2), z - z2);
This may be slower than what you currently have though. If you use (x - x2).^2 instead of (x - x2) .* (x - x2) you'll probably get a small performance boost. Can you avoid calculating the square root and work with squared distance instead?
0 commentaires
Voir également
Catégories
En savoir plus sur Environmental Models dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!