How to create a vector in which numbers increase at first, then remain constant, then reduce back to 1 ?
Show older comments
I need to create vectors of length 255 which have the following format:
{1,2,3,4,5,5,5,5,......,5,5,4,3,2,1}
{1,2,3,4,5,6,6,6,....,6,6,5,4,3,2,1}
what i did was, create a for loop and then use a series of while loops as shown below :
for l=1:255
count=1;
%insert the increasing numbers, numbers go upto l
while count<=l
ul(count)=count;
count=count+1;
end
%After reaching l, they should be constant
while count<(255-l)
ul(count)=l;
count=count+1;
end
%Last part where numbers should decrease to 1
x=0;
while count>(254-l)&&count<256
ul(count)=l-x;
x=x+1;
count=count+1;
end
U(l,:)=ul;
end
The problem : 1- in the output, instead of getting 1 as the 255th element, i am getting a 0
2- after l=128(half of 255), the series should go upto 128 and reduce back to 1. Instead it goes above 128 and then starts reducing.
1 Comment
Navid
on 25 Apr 2014
lets say that you want to create a vector length "m" and want to go up to "n" and then be constant and then decrease:
function y=increasedecreasefun(m,n)
A=n*ones(1,m);
for i=1:n-1
A(i)=i;
A(m-i+1)=i;
end
y=A
end
Accepted Answer
More Answers (2)
Youssef Khmou
on 25 Apr 2014
To accomplish this task without loop, you need two variables, the maximum value m and the number of redundancy n :
First example :
m=5;
n=245;
A=[1:m m*ones(1,n) m:-1:1];
Second example :
m=6;
n=255-12;
B=[1:m m*ones(1,n) m:-1:1];
3 Comments
Image Analyst
on 25 Apr 2014
Can you get the array for all values of m without a loop? So you'd have a 2D array? I did it and put each row vector into a cell of a 1-D cell array, but I could have put them into rows of a 2D array for U, but I didn't know how to do it without a loop.
Youssef Khmou
on 25 Apr 2014
Edited: Youssef Khmou
on 25 Apr 2014
no, this technique reduces N to N-1 loops.
Shounak Shastri
on 26 Apr 2014
Jos (10584)
on 25 Apr 2014
If N is your fixed length and M is the maximum number (-> (1 2 … M-1 M M M M-1 … 2 1"), here is a simply code:
N = 20 , M = 6
A = min(N/2-abs((0:N)-N/2)+1, M)
To get all the arrays for M is 1 up till (N+1)/2, try this:
N = 11
AA = bsxfun(@min, N/2-abs((0:N)-N/2)+1, (1:(N/2)+1).') % AA is a ceil(N+1)/2-by-N matrix
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!