How do I efficiently calculate a scalar distance with 3d geometry?
17 次查看(过去 30 天)
显示 更早的评论
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 个评论
回答(2 个)
Matt J
2013-7-29
This might speed things up,
Haven't used it myself, though.
2 个评论
Jan
2013-7-30
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
2013-7-29
编辑:Richard Brown
2013-7-29
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 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Environmental Models 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!