Generate specific shape randomly using MATLAB
Show older comments
Hello every one, I hope you are doing well
i have the following code,in which i have two thing. first is the val in which i have the value like 200 is the value and it repeat 120 times to complete the shape.
I want to do it randomly , like the value generate randomly between 1 to 1000 and num is also randomly between 1 to 500 . How can i generate it in MATLAB
val = [200,500,800,1000,800,900,700,300,600,150];
num = [120,400,200,400,300,450,200,400,500,400];
out4 = repelem(val,num);
scatter(1:length(out4),out4)
1 Comment
David Hill
on 6 Mar 2022
Your explaination is not clear to me. A short example would be helpful.
Answers (2)
Image Analyst
on 6 Mar 2022
To generate fractional random numbers use rand(). To generate random integers use randi().
randomDoubles = 999 * rand(1, length(val)) + 1; % Between 1 and 1000
randomIntegers = randi([1, 500], 1, length(num)); % Between 1 and 500
Not sure what else you need to know beyond that. If you need something else, be very explicit and specific.
Image Analyst
on 6 Mar 2022
Try this:
val = unique(sort(20 * randi(50, 10, 1)))
for k = 1 : length(val)
y = val(k);
num1 = randi(3500);
num2 = randi(4000);
plot([num1, num2], [y, y], 'b.-', 'LineWidth', 5, 'markerSize', 20)
hold on;
end
grid on

10 Comments
Med Future
on 6 Mar 2022
Med Future
on 6 Mar 2022
Image Analyst
on 6 Mar 2022
I plotted that because that's what you said you wanted: "Like the picture below . i want to generate this shape with random values ."
How many elements do you want there to be between the left endpoint of the line segment and the right endpoint? You can use
numVec = linspace(num1, num2, numberOfElements);
A good investment of your time:
Med Future
on 6 Mar 2022
Med Future
on 6 Mar 2022
Image Analyst
on 6 Mar 2022
Again, "How many elements do you want there to be between the left endpoint of the line segment and the right endpoint?"
And do you want each value of val to be in its own row? Or maybe you want this:
val = unique(sort(20 * randi(50, 10, 1)))
m = zeros(length(val), 4000)
for k = 1 : length(val)
y = val(k);
num1 = randi(3500);
num2 = randi(4000);
index1 = min([num1, num2]);
index2 = max([num1, num2]);
plot([num1, num2], [y, y], 'b.-', 'LineWidth', 5, 'markerSize', 20)
hold on;
m(k, index1 : index2) = 1;
end
grid on
Med Future
on 6 Mar 2022
Edited: Med Future
on 6 Mar 2022
Image Analyst
on 6 Mar 2022
Try this:
val = sort(randi(1000, 200, 1));
m = zeros(length(val), 1000);
for k = 1 : length(val)
y = val(k);
num1 = randi(3500);
num2 = randi(4000);
index1 = min([num1, num2]);
index2 = max([num1, num2]);
plot([num1, num2], [y, y], 'b.-', 'LineWidth', 3, 'markerSize', 20)
hold on;
indexes = round([index1, index2] / 4) % Now go from 1-1000 instead of 1-4000
m(k, indexes) = y; % m is a 200 by 1000 array
end
grid on
Now you have a 200 row array where the value of the y height goes from index1 to index2. There are 1000 columns which indicate x going up to 4000.
Med Future
on 6 Mar 2022
Image Analyst
on 6 Mar 2022
Sorry, I tried, but now I'm heading out now to do some errands. Once you take that 2 hour training you'll be able to do it yourself. It sounds like it's a simple application of calling rand() or randi() and then using a for loop, something you'll be able to do after taking the 2 hour training. Good luck.
Categories
Find more on Logical 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!