26 lines
672 B
Plaintext
26 lines
672 B
Plaintext
import "./fmt" for Fmt
|
|
import "./iterate" for Stepped
|
|
|
|
var euler = Fn.new { |f, y, step, end|
|
|
Fmt.write(" Step $2d: ", step)
|
|
for (t in Stepped.new(0..end, step)) {
|
|
if (t%10 == 0) Fmt.write(" $7.3f", y)
|
|
y = y + step * f.call(y)
|
|
}
|
|
System.print()
|
|
}
|
|
|
|
var analytic = Fn.new {
|
|
System.write(" Time: ")
|
|
for (t in Stepped.new(0..100, 10)) Fmt.write(" $7d", t)
|
|
System.write("\nAnalytic: ")
|
|
for (t in Stepped.new(0..100, 10)) {
|
|
Fmt.write(" $7.3f", 20 + 80 * (-0.07*t).exp)
|
|
}
|
|
System.print()
|
|
}
|
|
var cooling = Fn.new { |temp| -0.07 * (temp - 20) }
|
|
|
|
analytic.call()
|
|
for (i in [2, 5, 10]) euler.call(cooling, 100, i, 100)
|