How to make this loop faster?

1 Ansicht (letzte 30 Tage)
Oliver Lestrange
Oliver Lestrange am 27 Dez. 2020
Kommentiert: Jesús Zambrano am 28 Dez. 2020
Hello,
The following code takes 30 seconds to execute. I can't make it any faster.
Any suggestion?
Thanks!
function [ at] = obstacleAttenuation( Ant, Movel, Obstaculo,mapa )
tic
fprintf('\nInside obstacleAttenuation function!\n');
at = zeros(mapa.xlength, mapa.ylength);
for xi=1:mapa.xlength
for yi=1:mapa.ylength
att = 0;
[x, y] = bresenham(Ant.Antena_x, Ant.Antena_y, Movel.x(xi), Movel.y(yi));
for i = 1:length(x)
Obs = Obstaculo(x(i), y(i));
att = att + Obs;
end
at(xi, yi) = att;
% Obs = Obstaculo(x(1:length(x)), y(1:length(x)));
% att = sum(sum(Obs));
% at(xi, yi) = att;
end
end
fprintf('\nExit obstacleAttenuation function!\n');
toc
end
NOTE: I am using R2016a version.

Antworten (1)

Jesús Zambrano
Jesús Zambrano am 27 Dez. 2020
Is it possible to enter vectors as arguments in the function Obstaculo and get a vector as result? If so, then you could try replacing:
for i = 1:length(x)
Obs = Obstaculo(x(i), y(i));
att = att + Obs;
end
By:
i=1:length(x);
att = sum(Obstaculo(x(i), y(i)));
  12 Kommentare
Oliver Lestrange
Oliver Lestrange am 28 Dez. 2020
Obstaculo has numbers like 14.3, 0, 23... Maybe I should just resize the image...
Thanks for your time!
Jesús Zambrano
Jesús Zambrano am 28 Dez. 2020
you're welcome!

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by