Hi Patrick, Spencer,

Thanks for that! Both your solutions are MUCH quicker!

afaik overwork_ratio = 4/pi # what a hard way to calculate this :-)

The real problem I'm actually working on is a little more complicated :-) - 6 'random' variables, and 18 dependant variables (at last count)... currently only 4 computed terms in the 'if() c<-c+1' statement... I just created the x,y area problem as a simple example of the style I was using.

In the past I've worked on other 'accident' related problems and one difficulty was in getting enough final 'z' values to be statistically significant as there was an enormous rejection ratio - but it was running on a 486 written in compiled turbo pascal and it would take days of work...

I'll have a go at recoding using your techniques.

Many Thanks,
Sean


Patrick Burns wrote:
For this particular problem you can probably use
polar coordinates.

But something similar to your code could be:

x <- runif(900)
y <- runif(900)
z <- sqrt(x^2 + y^2)
okay <- z < 1
while(any(!okay)) {
   n.bad <- sum(!okay)
   x[!okay] <- runif(n.bad)
   y[!okay] <- runif(n.bad)
   z <- sqrt(x^2 + y^2)  # restricting to !okay may or may not be useful
   okay <- z < 1
}



Patrick Burns

Burns Statistics
[EMAIL PROTECTED]
+44 (0)20 8525 0696
http://www.burns-stat.com
(home of S Poetry and "A Guide for the Unwilling S User")

Sean O'Riordain wrote:

Hi Folks,

I'm trying to learn R. One of my intentions is to do some Monte-Carlo type modelling of road "accidents".

Below, to simplify things, I've appended a little program which does a 'monte-carlo' type simulation. However, it is written in a way which seems a bit un-natural in R. Could someone help me make this a bit more R-ish please?

Or is there a completely different approach I should be taking?

Many thanks in advance,
Sean O'Riordain
seanpor AT acm.org


-------------------------------------------- n <- 900; # number of valid items required...

x <- numeric(n);
y <- numeric(n);
z <- numeric(n);

c <- 1;  # current 'array' pointer
tc <- 0; # total items actually looked at...

while (c <= n) {
    x[c] = runif(1, 0, 1);
    y[c] = runif(1, 0, 1);

    z[c] = sqrt(x[c]^2 + y[c]^2);
    if (z[c] < 1)
        c <- c + 1;
    tc <- tc + 1;
}

print("'overwork' ratio");
print(tc/(c-1));
plot(x,y);

______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-help



______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help



______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help

Reply via email to