Euler method: Difference between revisions
Content added Content deleted
(→{{header|Common Lisp}}: slightly more modern/idiomatic version) |
(Adding SequenceL) |
||
Line 2,448: | Line 2,448: | ||
90 20.00157 |
90 20.00157 |
||
DONE |
DONE |
||
</pre> |
|||
=={{header|SequenceL}}== |
|||
<lang sequencel>import <Utilities/Conversion.sl>; |
|||
import <Utilities/Sequence.sl>; |
|||
T0 := 100.0; |
|||
TR := 20.0; |
|||
k := 0.07; |
|||
main(args(2)) := |
|||
let |
|||
results[i] := euler(newtonCooling, T0, 100, stringToInt(args[i]), 0, "delta_t = " ++ args[i]); |
|||
in |
|||
delimit(results, '\n'); |
|||
newtonCooling(t) := -k * (t - TR); |
|||
euler: (float -> float) * float * int * int * int * char(1) -> char(1); |
|||
euler(f, y, n, h, x, output(1)) := |
|||
let |
|||
newOutput := output ++ "\n\t" ++ intToString(x) ++ "\t" ++ floatToString(y, 3); |
|||
newY := y + h * f(y); |
|||
newX := x + h; |
|||
in |
|||
output when x > n |
|||
else |
|||
euler(f, newY, n, h, newX, newOutput);</lang> |
|||
Based on C# version [http://rosettacode.org/wiki/Euler_method#C.23] but using tail recursion instead of looping. |
|||
{{out}} |
|||
For step size 10: |
|||
<pre> |
|||
main.exe 10 |
|||
"delta_t = 10 |
|||
0 100.000 |
|||
10 44.000 |
|||
20 27.200 |
|||
30 22.160 |
|||
40 20.648 |
|||
50 20.194 |
|||
60 20.058 |
|||
70 20.017 |
|||
80 20.005 |
|||
90 20.002 |
|||
100 20.000" |
|||
</pre> |
</pre> |
||