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.
    11 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
    Fredrik Slungård
 le 24 Fév 2015
  
    
    
    
    
    Modifié(e) : Sean de Wolski
      
      
 le 25 Fév 2015
            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 commentaires
Réponse acceptée
  Niels
      
 le 25 Fév 2015
        
      Modifié(e) : Niels
      
 le 25 Fév 2015
  
      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,'+')
1 commentaire
Plus de réponses (3)
  Joseph Cheng
      
 le 24 Fév 2015
        you'd want to use "continue" to skip the iteration.
 for ind =1:5
    if ind==3
       continue
 else
    disp(ind)
 end
1 commentaire
  Fredrik Slungård
 le 25 Fév 2015
				
      Modifié(e) : Fredrik Slungård
 le 25 Fév 2015
  
			
		
  Sean de Wolski
      
      
 le 24 Fév 2015
        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
      
      
 le 25 Fév 2015
        
      Modifié(e) : Sean de Wolski
      
      
 le 25 Fév 2015
  
      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 commentaires
Voir également
Catégories
				En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




