I'm using a for loop to create a new random variable X with range [0 1], I want the forloop to ignore values above 1 and iterate untill all the values are in range.
3 次查看(过去 30 天)
显示 更早的评论
clc; clear all; close all;
n = 200; % Number of iteration
ro = 0.75; % Correlation factor
X = zeros(1,n);
x = zeros(1,n);
for ii = 1:n
x = rand(1,ii);
y = rand(1,ii);
X = x*ro+y*sqrt(1-ro^2);
if X > 1 % If X > 1 start iteration no. ii again until X is below 1
ii = ii - 1;
end
end
plot(x,X,'+')
0 个评论
采纳的回答
Niels
2015-2-25
编辑:Niels
2015-2-25
Change your for-loop to a while-loop if you want to keep looping. I also believe that you stored your data incorrectly, as x, y and X were not stored at every time step, while your random number generation grows larger for every iteration ii...
clc; clear all; close all;
n = 200; % Number of iteration
ro = 0.75; % Correlation factor
X = zeros(1,n);
x = zeros(1,n);
y = zeros(1,n);
ii = 1;
while (ii <= n)
x(ii) = rand();
y(ii) = rand();
X(ii) = x(ii)*ro+y(ii)*sqrt(1-ro^2);
if (X(ii) <= 1) % Don't increment if X > 1.
ii = ii + 1;
end
end
figure, plot(x,X,'+')
更多回答(3 个)
Joseph Cheng
2015-2-24
you'd want to use "continue" to skip the iteration.
for ind =1:5
if ind==3
continue
else
disp(ind)
end
Sean de Wolski
2015-2-24
Why not just only generate random values that meet your criteria? Here's an example:
% Solve for x
syms x ro y
X = x*ro+y*sqrt(1-ro^2);
xx = solve(X,x)
% Plug in values
yval = -0.1;
roval = 0.3;
xmax = double(subs(xx,{y, ro},{yval,roval}));
% Generate only random numbers that meet criteria
xrand = rand(100,1)./xmax;
% Create X
Xfinal = xrand.*roval+yval*sqrt(1-roval^2);
% Check all X < 1
assert(all(Xfinal < 1))
Roger Stafford
2015-2-25
编辑:Sean de Wolski
2015-2-25
I am guessing that what you actually want is the following. It will give you 200 values in X which are all less than or equal to 1.
X = zeros(1,n);
x = zeros(1,n);
for ii = 1:n
b = true;
while b
t1 = rand;
t2 = t1*ro+rand*sqrt(1-ro^2);
b = t2 > 1;
end
X(ii) = t2;
x(ii) = t1;
end
plot(x,X,'+')
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!