xxxxxxxxxx
auto rk4(alias f, T)(T x, int N, T dt) {
import std.range : iota;
auto dt2 = dt/2;
auto dt6 = dt/6;
auto t = 0.0;
foreach (n; iota(0, N)) {
auto s1 = f(t, x);
auto s2 = f(t + dt2, x + dt2*s1);
auto s3 = f(t + dt2, x + dt2*s2);
auto s4 = f(t + dt, x + dt *s3);
x = x + dt6*(s1 + 2.0*s2 + 2.0*s3 + s4);
}
return x;
}
int main(string[] args) {
import std.stdio : writeln;
writeln(rk4!((t, x) => x*(1.0-x))(0.5, 100_000_000, 0.01)); // 1d logistic ODE
return 0;
}