Effacer les filtres
Effacer les filtres

Can anyone simplify this code please?

2 vues (au cours des 30 derniers jours)
jlt199
jlt199 le 13 Sep 2016
Commenté : jlt199 le 15 Sep 2016
Morning all,
I have a problem. I'm trying to take a subset of a matrix, but not a uniform distribution. The difference between points is given in the vector phi, which I've made super long to make sure I don't reach the end of it, As you can see this vector is a 6 number repeating pattern. I've made a vector, zeta, containing the rows I would like to extract from the matrix. But, it is super clunky! Is anyone able to simplify this code for me please? I'm sure it should be possible without the loop.
phi = repmat([8.70;8.70;8.70;8.70;8.70;16.59],10,1);
% Random number generator to decide which sensor to use first
sensor = randi(6,1);
col = 1;
zeta = 1;
while col + round(phi(sensor),0) < 153
col = col + round(phi(sensor),0);
zeta = [zeta; col];
sensor = sensor + 1;
end
Many thanks
  5 commentaires
jlt199
jlt199 le 13 Sep 2016
Also, my boss reads Matlab so would be good to have sophisticated looking code ;)
jlt199
jlt199 le 14 Sep 2016
Does no comments mean that the code is not easily simplifies and I'm ok using a loop in this context? Thanks

Connectez-vous pour commenter.

Réponse acceptée

TallBrian
TallBrian le 14 Sep 2016
I am not sure exactly what you mean by simplify but here is some code which eliminates the looping.
LENGTH = 153;
phi = round([8.70; 8.70; 8.70; 8.70; 8.70; 16.59]);
max_reps = round(LENGTH / sum(phi)) + 1;
phi_complete = repmat(phi, max_reps, 1);
phi_offset = [1; phi_complete(randi(6,1):end)];
zeta = cumsum(phi_offset);
zeta = zeta(zeta < LENGTH);
  1 commentaire
jlt199
jlt199 le 15 Sep 2016
Thanks Brian, this helps a lot

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Problem-Based Optimization Setup 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!

Translated by