Euler method: Difference between revisions
Content added Content deleted
No edit summary |
(Added Wren) |
||
Line 3,313: | Line 3,313: | ||
Step 5 100.00 53.80 34.28 26.03 22.55 21.08 20.46 20.19 20.08 20.03 20.01 |
Step 5 100.00 53.80 34.28 26.03 22.55 21.08 20.46 20.19 20.08 20.03 20.01 |
||
Step 10 100.00 44.00 27.20 22.16 20.65 20.19 20.06 20.02 20.01 20.00 20.00 |
Step 10 100.00 44.00 27.20 22.16 20.65 20.19 20.06 20.02 20.01 20.00 20.00 |
||
</pre> |
|||
=={{header|Wren}}== |
|||
{{trans|C}} |
|||
{{libheader|Wren-fmt}} |
|||
{{libheader|Wren-trait}} |
|||
{{libheader|Wren-math}} |
|||
<lang ecmascript>import "/fmt" for Fmt |
|||
import "/trait" for Stepped |
|||
import "/math" for Math |
|||
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 * Math.exp(-0.07*t)) |
|||
} |
|||
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)</lang> |
|||
{{out}} |
|||
<pre> |
|||
Time: 0 10 20 30 40 50 60 70 80 90 100 |
|||
Analytic: 100.000 59.727 39.728 29.797 24.865 22.416 21.200 20.596 20.296 20.147 20.073 |
|||
Step 2: 100.000 57.634 37.704 28.328 23.918 21.843 20.867 20.408 20.192 20.090 20.042 |
|||
Step 5: 100.000 53.800 34.280 26.034 22.549 21.077 20.455 20.192 20.081 20.034 20.014 |
|||
Step 10: 100.000 44.000 27.200 22.160 20.648 20.194 20.058 20.017 20.005 20.002 20.000 |
|||
</pre> |
</pre> |
||