R-ohjelmointi.org

Tilastotieteellistä ohjelmointia R-kielellä

Kannattaako sateessa juosta?

Vettä on taas tullut viime päivinä melko riittoisasti. Ravintolasta lähtiessämme pohdimme, kannattaako sateessa ennemmin kävellä vai juosta. Muistelin, että viimeisimmät populäärijutut kertoivat juoksemisen kannattavan. Mutta miten lujaa sitten pitäisi juosta? Tutkitaanpa asiaa lyhyesti. DeCarian kirjoittama juttu auttaa alkuun.

Jutussa on oletettu, että ihminen on ruumiinrakenteeltaan suunnilleen Paavo Pesusienen muotoinen. Toisissa malleissa, jotka löysin, on ihmisten oletettu olevan karkeasti Barbapapan muotoisia. Jutun perusteella voidaan muodostaan R-funktio, jolla asiaa voidaan kätevästi tutkia. Jutussa ei kuitenkaan mainittu realistisia arvoja pisaroiden koolle tai niiden tiheydelle, mutta sellaiset löytyivät USGS:n sivuilta. Mainittakoon, että muitakin arvioita on, ja henkilön päälleen saaman sademäärän absoluuttisen arviot riippuvat suuresti pisaran kokoluokka-arvioista sekä niiden tiheyksistä sateen aikana. Lopullinen R-funktio näyttää seuraavalta:

 
wetness2<-function(pituus=176, paino=82, ylapuolen.osuus=0.09, juoksunopeus=1, 
                  etaisyys=100, sadetyyppi="kevyt", tulos="lyhyt") {
 
   # pituus cm
   # paino kg
   # ylapuolen.osuus (0-1)
   # juoksunopeus m/s
   # etaisyys m
   # sadetyyppi tihku (0.25mm/h), kevyt (1mm/h), normaali (6,5 mm/h), ukkonen (25 mm/h)
   # sadetyyppi: sumu, tihku, kevyt, kohtalainen, rankka, monsuuni
 
   kehon.pinta.ala<-sqrt(pituus*paino/3600) # Mosteller
   ylapuolen.pinta.ala<-ylapuolen.osuus*kehon.pinta.ala
   etupuolen.pinta.ala<-(kehon.pinta.ala-ylapuolen.pinta.ala*1.5)/2
 
   # http://water.usgs.gov/edu/watercycleprecipitation.html
   if(!is.null(sadetyyppi)) {
      if(sadetyyppi=="sumu") {
          sateen.nopeus<-0.21
          pisarakoko<-0.1/2
          pisaran.tilavuus<-(4*pi*pisarakoko^2)/3
          sateen.tiheys<-27000
      }
      if(sadetyyppi=="tihku") {
          sateen.nopeus<-4.1
          pisarakoko<-0.96/2
          pisaran.tilavuus<-(4*pi*pisarakoko^2)/3
          sateen.tiheys<-150
      }
      if(sadetyyppi=="kevyt") {
          sateen.nopeus<-4.8
          pisarakoko<-1.24/2
          pisaran.tilavuus<-(4*pi*pisarakoko^2)/3
          sateen.tiheys<-280
      }
      if(sadetyyppi=="kohtalainen") {
          sateen.nopeus<-5.7
          pisarakoko<-1.60/2
          pisaran.tilavuus<-(4*pi*pisarakoko^2)/3
          sateen.tiheys<-495
      }
      if(sadetyyppi=="rankka") {
          sateen.nopeus<-6.7
          pisarakoko<-2.05/2
          pisaran.tilavuus<-(4*pi*pisarakoko^2)/3
          sateen.tiheys<-495
      }
      if(sadetyyppi=="monsuuni") {
          sateen.nopeus<-7.9
          pisarakoko<-2.85/2
          pisaran.tilavuus<-(4*pi*pisarakoko^2)/3
          sateen.tiheys<-1220
      }
   } 
 
   Af<-etupuolen.pinta.ala
   At<-ylapuolen.pinta.ala
 
   V<-juoksunopeus
   u<-sateen.nopeus
   n<-sateen.tiheys
   d<-etaisyys
   Vd<-pisaran.tilavuus
 
   Rt<-n*u*At
   Rf<-n*V*Af
   t<-d/V
   N<-(Rt+Rf)*t
   Va<-N*Vd   
 
   df<-data.frame(selite=c("Pinta-ala", "Etupuolen pinta-ala", "Yläpuolen pinta-ala", "Juoksunopeus", "Sateen nopeus", "Sateen tiheys", "Etäisyys", "Pisaran tilavuus", 
                    "Pisaroita etupuoleen", "Pisaroita yläpuoleen", "Aika", "Pisaroiden lukumäärä", "Pisaroiden tilavuus"),
                    arvo=c(kehon.pinta.ala, Af, At, V, u, n, d, Vd, Rf, Rt, t, N, Va))
 
   res<-c(pisaroiden.määrä=N, veden.määrä=Va/1000)
 
   if(tulos=="lyhyt") {
      return(round(res))
   } else {
      spacer1<-paste(rep(" ", 22-nchar(round(N))), collapse="")
      spacer2<-paste(rep(" ", 22-nchar(round(Va/1000))), collapse="")
         cat("Pisaroiden määrä (lkm)      Veden määrä (ml)\n")
      cat(paste0(spacer1, round(N), spacer2, round(Va/1000), "\n\n", sep=""))
      return(list(res, df))
   }
 
}

Funktiota käyttäen voidaan tutkia, kuinka paljon vettä henkilöön osuu erilaisilla sateilla, esimerkiksi:

wetness2(sadetyyppi="sumu")
wetness2(sadetyyppi="tihku")
wetness2(sadetyyppi="kevyt")
wetness2(sadetyyppi="kohtalainen")
wetness2(sadetyyppi="rankka")
wetness2(sadetyyppi="monsuuni")

Mutta tarkoituksenamme oli tutkia juoksunopeuden vaikutusta, joten piirretäänpä edellistä funktiota käyttäen kaavio juoksunopeuksien vaikutuksista:

nop<-seq(0, 6, by=0.1)
vol<-rep(NA, length(nop))
for(i in 1:length(nop)) {
   vol[i]<-wetness2(pituus=183, paino=83, juoksunopeus=nop[i])[2]
} 
plot(x=nop, y=vol, type="l", las=1, lwd=4, xlab="Juoksunopeus (m/s)", ylab="Juoksijaan osunut vesimäärä (ml)", main="Matka kohteeseen: 100 m")
grid(col="grey85", lty=1)
lines(x=nop, y=vol, type="l", lwd=4)

Tuloksena muodostuva kuva näyttää seuraavalta:

Kaaviosta huomamme, että jos kun juoksunopeus kasvaa, pienenee henkilön osuvan vesimäärän tilavuuskin. Jos liikkuu kuin ”täi tervassa” (noin 0.1 m/s) kastuu nopeasti melko runsaasti, mutta jos edes kävelee ripeästi, välttyy jo suuremmalta kastumiselta. Ripeän kävelyn (noin 8 m/s) ja maratoonarin keskivauhdin (noin 5.5 m/s) välillä on lopulta kuitenkin melko pieni ero: vain 13 ml, joten vauhdin kasvattamisen hyöty käy nopeasti pieneksi.

Yhteenvetona voidaan sanoa, että ainakin tässä tuulta huomioimattomassa mallissa kannattaa ennemmin aina juosta kuin kävellä.


Category