26 lines
601 B
Plaintext
26 lines
601 B
Plaintext
const FMT=" %7.3f";
|
|
|
|
fcn ivp_euler(f,y,step,end_t){
|
|
print(" Step %2d: ".fmt(step));
|
|
foreach t in ([0..end_t,step]){
|
|
if (t % 10 == 0) print(FMT.fmt(y));
|
|
y += f(t,y) * step;
|
|
}
|
|
println();
|
|
}
|
|
|
|
fcn analytic{
|
|
print(" Time: ");
|
|
foreach t in ([0..100,10]){ print(" %7g".fmt(t)) }
|
|
print("\nAnalytic: ");
|
|
foreach t in ([0..100,10]){ print(FMT.fmt(20.0 + 80.0 * (-0.07 * t).exp())) }
|
|
println();
|
|
}
|
|
|
|
fcn cooling(_,temp){ return(-0.07 * (temp - 20)) }
|
|
|
|
analytic();
|
|
ivp_euler(cooling, 100.0, 2, 100);
|
|
ivp_euler(cooling, 100.0, 5, 100);
|
|
ivp_euler(cooling, 100.0, 10, 100);
|