RosettaCodeData/Task/Euler-method/Erlang/euler-method.erl

39 lines
848 B
Erlang
Raw Permalink Normal View History

2023-07-01 11:58:00 -04:00
-module(euler).
-export([main/0, euler/5]).
cooling(_Time, Temperature) ->
2026-02-01 16:33:20 -08:00
(-0.07)*(Temperature-20).
2023-07-01 11:58:00 -04:00
euler(_, Y, T, _, End) when End == T ->
2026-02-01 16:33:20 -08:00
io:fwrite("\n"),
Y;
2023-07-01 11:58:00 -04:00
euler(Func, Y, T, Step, End) ->
2026-02-01 16:33:20 -08:00
if
T rem 10 == 0 ->
io:fwrite("~.3f ",[float(Y)]);
true ->
ok
end,
euler(Func, Y + Step * Func(T, Y), T + Step, Step, End).
2023-07-01 11:58:00 -04:00
analytic(T, End) when T == End ->
2026-02-01 16:33:20 -08:00
io:fwrite("\n"),
T;
2023-07-01 11:58:00 -04:00
analytic(T, End) ->
2026-02-01 16:33:20 -08:00
Y = (20 + 80 * math:exp(-0.07 * T)),
io:fwrite("~.3f ", [Y]),
analytic(T+10, End).
2023-07-01 11:58:00 -04:00
main() ->
2026-02-01 16:33:20 -08:00
io:fwrite("Analytic:\n"),
analytic(0, 100),
io:fwrite("Step 2:\n"),
euler(fun cooling/2, 100, 0, 2, 100),
io:fwrite("Step 5:\n"),
euler(fun cooling/2, 100, 0, 5, 100),
io:fwrite("Step 10:\n"),
euler(fun cooling/2, 100, 0, 10, 100),
ok.