Just another update
This commit is contained in:
parent
a25938f123
commit
00a190b0a6
6591 changed files with 94363 additions and 23227 deletions
|
|
@ -1,26 +1,22 @@
|
|||
import std.stdio, std.range;
|
||||
import std.stdio, std.range, std.traits;
|
||||
|
||||
/**
|
||||
Approximates y(t) in y'(t)=f(t,y) with y(a)=y0 and
|
||||
t=a..b and the step size h.
|
||||
*/
|
||||
void euler(F)(in F f, in double y0,
|
||||
in double a, in double b, in double h) {
|
||||
/// Approximates y(t) in y'(t)=f(t,y) with y(a)=y0 and t=a..b and the step size h.
|
||||
void euler(F)(in F f, in double y0, in double a, in double b, in double h) @safe
|
||||
if (isCallable!F && __traits(compiles, { real r = f(0.0, 0.0); })) {
|
||||
double y = y0;
|
||||
foreach (t; iota(a, b, h)) {
|
||||
foreach (immutable t; iota(a, b, h)) {
|
||||
writefln("%.3f %.3f", t, y);
|
||||
y += h * f(t, y);
|
||||
}
|
||||
writeln("done");
|
||||
"done".writeln;
|
||||
}
|
||||
|
||||
void main() {
|
||||
/// Example: Newton's cooling law
|
||||
static newtonCoolingLaw(in double time, in double t) {
|
||||
return -0.07 * (t - 20);
|
||||
}
|
||||
/// Example: Newton's cooling law.
|
||||
enum newtonCoolingLaw = (in double time, in double t)
|
||||
pure nothrow @safe @nogc => -0.07 * (t - 20);
|
||||
|
||||
euler(&newtonCoolingLaw, 100, 0, 100, 2);
|
||||
euler(&newtonCoolingLaw, 100, 0, 100, 5);
|
||||
euler(&newtonCoolingLaw, 100, 0, 100, 10);
|
||||
euler(newtonCoolingLaw, 100, 0, 100, 2);
|
||||
euler(newtonCoolingLaw, 100, 0, 100, 5);
|
||||
euler(newtonCoolingLaw, 100, 0, 100, 10);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue