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 Center および File ExchangeLoops and Conditional Statements についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by