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

1 次查看(过去 30 天)
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...]

采纳的回答

Ced
Ced 2016-3-12
编辑:Ced 2016-3-12
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.

更多回答(1 个)

Ahmet Cecen
Ahmet Cecen 2016-3-12
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(:)';

类别

Help CenterFile Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by