Last chance! 50% off unlimited learning
Sale ends in
cranknic(f, t0, t1, y0, ..., N = 100)
y0
needs to be a vector of length m
.t
for grid (or `time') points between t0
and t1
, and y
an n-by-m matrix with solution variables in
columns, i.e. each row contains one time stamp.
cranknic
method is by finding the root of the function merging these two formulas.No attempt is made to catch any errors in the root finding functions.
ode23
, newmark
## Newton's example
f <- function(x, y) 1 - 3*x + y + x^2 + x*y
sol100 <- cranknic(f, 0, 1, 0, N = 100)
sol1000 <- cranknic(f, 0, 1, 0, N = 1000)
## Not run:
# # Euler's forward approach
# feuler <- function(f, t0, t1, y0, n) {
# h <- (t1 - t0)/n; x <- seq(t0, t1, by = h)
# y <- numeric(n+1); y[1] <- y0
# for (i in 1:n) y[i+1] <- y[i] + h * f(x[i], y[i])
# return(list(x = x, y = y))
# }
#
# solode <- ode23(f, 0, 1, 0)
# soleul <- feuler(f, 0, 1, 0, 100)
#
# plot(soleul$x, soleul$y, type = "l", col = "blue",
# xlab = "", ylab = "", main = "Newton's example")
# lines(solode$t, solode$y, col = "gray", lwd = 3)
# lines(sol100$t, sol100$y, col = "red")
# lines(sol1000$t, sol1000$y, col = "green")
# grid()
#
# ## System of differential equations
# # "Herr und Hund"
# fhh <- function(x, y) {
# y1 <- y[1]; y2 <- y[2]
# s <- sqrt(y1^2 + y2^2)
# dy1 <- 0.5 - 0.5*y1/s
# dy2 <- -0.5*y2/s
# return(c(dy1, dy2))
# }
#
# sol <- cranknic(fhh, 0, 60, c(0, 10))
# plot(sol$y[, 1], sol$y[, 2], type = "l", col = "blue",
# xlab = "", ylab = "", main = '"Herr und Hund"')
# grid()## End(Not run)
Run the code above in your browser using DataLab