Im trying to create a code that will create a matrix with gaps depending on the input sequences

1 vue (au cours des 30 derniers jours)
This is what i currently have:
beam=15; gap=10; N=10; P1=[0:beam+gap:(beam+gap)*N]; P2=P1+15;
W=[P1(1,1):P2(1,1)]
The above gives: P1 = 0 25 50 75 100 125 150 175 200 225 250 P2 = 15 40 65 90 115 140 165 190 215 240 265
W=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
I need W to keep going for N values so for example W=[P1(1,N):P2(1,N)].
So for this example i would want W=[1:15,25:40,50:65,75:90...]

Réponse acceptée

Ced
Ced le 12 Mar 2016
Modifié(e) : Ced le 12 Mar 2016
Hi
Do you need P1 and P2? Or only W?
Otherwise, I believe this would do the trick:
beam=15; gap=10; N=10;
total_gap = beam+gap;
% total gap is gap between starting number of each "segment"
W = bsxfun(@plus,0:beam,(0:total_gap:(N-1)*total_gap)')';
% This creates a vector (0 1 2 3 4 5 ... 15 ), copies it in N rows, and
% for row i, adds total_gap*(i-1). The whole thing is transposed, resulting in
% W = [
% 0 25 50 75 100 ... ;
% 1 26 51 76 101 ... ;
% ...
% 15 40 65 90 115 ... ]
% Now, to concatenate all and have a row vector:
W = W(:)';
Cheers
PS: I am assuming that the "1" in W was a typo and you actually want W starting at "0". Otherwise, just delete the first element.

Plus de réponses (1)

Ahmet Cecen
Ahmet Cecen le 12 Mar 2016
If your gap size is always the same for all elements:
gap = 15;
P1 = [0 25 50 75 100 125 150 175 200 225 250];
P1 = repmat(P1,[gap,1]);
W = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15];
W = repmat(W',[1 size(P1,2)]);
W = W+P1;
W = W(:)';

Catégories

En savoir plus sur Loops and Conditional Statements 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