rk4, rk4sys {pracma} | R Documentation |
Classical Runge-Kutta
Description
Classical Runge-Kutta of order 4.
Usage
rk4(f, a, b, y0, n)
rk4sys(f, a, b, y0, n)
Arguments
f |
function in the differential equation |
a , b |
endpoints of the interval. |
y0 |
starting values; for |
n |
the number of steps from |
Details
Classical Runge-Kutta of order 4 for (systems of) ordinary differential equations with fixed step size.
Value
List with components x
for grid points between a
and b
and y
an n-by-m matrix with solutions for variables in columns, i.e.
each row contains one time stamp.
Note
This function serves demonstration purposes only.
References
Fausett, L. V. (2007). Applied Numerical Analysis Using Matlab. Second edition, Prentice Hall.
See Also
Examples
## Example1: ODE
# y' = y*(-2*x + 1/x) for x != 0, 1 if x = 0
# solution is x*exp(-x^2)
f <- function(x, y) {
if (x != 0) dy <- y * (- 2*x + 1/x)
else dy <- rep(1, length(y))
return(dy)
}
sol <- rk4(f, 0, 2, 0, 50)
## Not run:
x <- seq(0, 2, length.out = 51)
plot(x, x*exp(-x^2), type = "l", col = "red")
points(sol$x, sol$y, pch = "*")
grid()
## End(Not run)
## Example2: Chemical process
f <- function(t, u) {
u1 <- u[3] - 0.1 * (t+1) * u[1]
u2 <- 0.1 * (t+1) * u[1] - 2 * u[2]
u3 <- 2 * u[2] - u[3]
return(c(u1, u2, u3))
}
u0 <- c(0.8696, 0.0435, 0.0870)
a <- 0; b <- 40
n <- 40
sol <- rk4sys(f, a, b, u0, n)
## Not run:
matplot(sol$x, sol$y, type = "l", lty = 1, lwd = c(2, 1, 1),
col = c("darkred", "darkblue", "darkgreen"),
xlab = "Time [min]", ylab= "Concentration [Prozent]",
main = "Chemical composition")
grid()
## End(Not run)
[Package pracma version 2.4.4 Index]