Description Usage Arguments Details Value Author(s) Examples
PeriodicFunction
generates a periodic function that is a truncated sine wave.
StepFunction
generates a periodic step function
1 2 3 4 5 6 7 8 |
avg, max |
mean and maximum function-value, only one of those should be specified. |
value |
function-value when not 0, only one of |
period |
periodicity, in [days]. |
fraction |
fraction of period in which the function value is not 0, dimensionless. |
phase |
time offset, in [days]. |
min |
minimum y-value. |
pow |
power to which the function value is raised |
times |
time values for which the function needs to be applied, in [days] |
StepFunction
creates a periodic on-off function, where the non-0 (on)-value as given by value
occurs fraction
*period
of the time, and the 0-value (1-fraction
)*period
of the time.
For example, this can be used to mimic tides, swiching between inundated and dry.
PeriodicFunction
creates a periodic sinusoidal function with a give periodicity, and where the fraction of time that the function is nonzero can be specified. For instance to generate light within a day or within a year.
A matrix with two columns, the times
and the calculated function value.
Karline Soetaert
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | #=====================================
# Tides
#=====================================
# tides with a periodicity of 12.4 hours, inundated half of the time.
# inundated 1/4 of the time
times <- seq(0, 5, length.out = 1000)
Tides <- StepFunction(period = 12.4/24, fraction = 0.5,
times = times)
Tides2 <- StepFunction(period = 12.4/24, fraction = 0.25,
times = times, value = 2)
matplot(x = times, y = cbind(Tides[,2], Tides2[,2]), type = "l", lty = 1)
c(mean(Tides[,2]), mean(Tides2[,2]))
#=====================================
# Light within a day -
# different daylength
#=====================================
times <- seq(0, 5, length.out = 1000)
# daylength = 6, 12, 18 hours (fraction = 6/24, 0.5, 18/24)
LightDay <- PeriodicFunction(period = 1, fraction = 6/24,
times = times, avg = NULL, max = 200)
LightDay2 <- PeriodicFunction(period = 1, fraction = 0.5,
times = times, avg = NULL, max = 200)
LightDay3 <- PeriodicFunction(period = 1, fraction = 18/24,
times = times, avg = NULL, max = 200)
matplot(x = times, y = cbind(LightDay[,2], LightDay2[,2], LightDay3[,2]),
type = "l", lty = 1)
c(mean(LightDay[,2]), mean(LightDay2[,2]), mean(LightDay3[,2]))
#=====================================
# Light within a day
# sharpness of the peak
#=====================================
times <- seq(0, 5, length.out = 1000)
# daylength = 12 hours (fraction = 0.5)
LightDay <- PeriodicFunction(period = 1, fraction = 0.5,
times = times, avg = 200)
LightDay2 <- PeriodicFunction(period = 1, fraction = 0.5,
times = times, avg = 200, pow = 2)
LightDay3 <- PeriodicFunction(period = 1, fraction = 0.5,
times = times, avg = 200, pow = 0.5)
matplot(x = times, y = cbind(LightDay[,2], LightDay2[,2], LightDay3[,2]),
type = "l", lty = 1)
c(mean(LightDay[,2]), mean(LightDay2[,2]), mean(LightDay3[,2]))
#=====================================
# Yearly light variations
#=====================================
LightYear <- PeriodicFunction(period = 365, fraction = 1, times = 1:365,
max = 600, avg = NULL, min = 10, phase = 100)
plot(LightYear, type = "l")
mean(LightYear[,2])
#=====================================
# Year + daily light variations
# constant daylength
#=====================================
times <- seq(0, 365, length.out = 10000)
LightYear <- PeriodicFunction(period = 365, fraction = 1, times = times,
max = 600, avg = NULL, min = 10, phase = 100)
Dayvar <- PeriodicFunction(period = 1, fraction = 0.5, times = times,
max = 1, avg = NULL, phase = 0.5)
LightDay <- cbind(times, LightYear[,2]*Dayvar[,2])
plot(LightDay, type = "l")
plot(LightDay[1:1000,], type = "l")
#=====================================
# Year + daily light variations
# variable daylength
#=====================================
times <- seq(0, 365, length.out = 10000)
LightYear <- PeriodicFunction(period = 365, fraction = 1, times = times,
max = 600, avg = NULL, min = 10, phase = 100)
Daylength <- PeriodicFunction(period = 365, fraction = 1, times = 0:365,
max = 18, avg = NULL, min = 10, phase = 100)
Dayvar <- NULL
for (i in 1:nrow(Daylength)){
Dayvar <- rbind( Dayvar,
PeriodicFunction(period = 1,
times = times[trunc(times) == Daylength[i,1]],
max = 1, avg = NULL, fraction = Daylength[i,2]/24)
)
}
LightDay <- cbind(times, LightYear[,2]*Dayvar[,2])
mf <- par (mfrow = c(2,2))
plot(Daylength, type = "l", main = "Daylength")
plot(LightDay, type = "l", main = "Light")
plot(LightDay[1:100,], type = "l", main = "light")
plot(LightDay[5000:5100,], type = "l", main = "light")
par(mfrow = mf)
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.