Euler method: Difference between revisions

Content added Content deleted
(→‎{{header|REXX}}: added a 2nd REXX version.)
m (→‎{{header|Sidef}}: modified the code to work with Sidef 2.30)
Line 2,819: Line 2,819:
{{trans|Perl}}
{{trans|Perl}}
<lang ruby>func euler_method(t0, t1, k, step_size) {
<lang ruby>func euler_method(t0, t1, k, step_size) {
var results = [[0, t0]];
var results = [[0, t0]]
step_size.to(100).by(step_size).each { |s|
for s in (step_size..100 -> by(step_size)) {
t0 -= ((t0 - t1) * k * step_size);
t0 -= ((t0 - t1) * k * step_size)
results << [s, t0];
results << [s, t0]
}
}
return results;
return results;
Line 2,828: Line 2,828:


func analytical(t0, t1, k, time) {
func analytical(t0, t1, k, time) {
(t0 - t1) * exp(-time * k) + t1;
(t0 - t1) * exp(-time * k) + t1
}
}


var (T0, T1, k) = (100, 20, .07);
var (T0, T1, k) = (100, 20, .07)
var r2 = euler_method(T0, T1, k, 2).grep { _[0] %% 10 };
var r2 = euler_method(T0, T1, k, 2).grep { _[0] %% 10 }
var r5 = euler_method(T0, T1, k, 5).grep { _[0] %% 10 };
var r5 = euler_method(T0, T1, k, 5).grep { _[0] %% 10 }
var r10 = euler_method(T0, T1, k, 10).grep { _[0] %% 10 };
var r10 = euler_method(T0, T1, k, 10).grep { _[0] %% 10 }


say "Time\t 2 err(%) 5 err(%) 10 err(%) Analytic";
say "Time\t 2 err(%) 5 err(%) 10 err(%) Analytic"
say "-"*76;
say "-"*76


r2.range.each { |i|
r2.range.each { |i|
var an = analytical(T0, T1, k, r2[i][0]);
var an = analytical(T0, T1, k, r2[i][0])
printf("%4d\t#{'%9.3f' * 7}\n",
printf("%4d\t#{'%9.3f' * 7}\n",
r2[i][0],
r2[i][0],
r2[i][1], (r2[i][1] / an) * 100 - 100,
r2[i][1], ( r2[i][1] / an) * 100 - 100,
r5[i][1], (r5[i][1] / an) * 100 - 100,
r5[i][1], ( r5[i][1] / an) * 100 - 100,
r10[i][1], (r10[i][1] / an) * 100 - 100,
r10[i][1], (r10[i][1] / an) * 100 - 100,
an);
an)
}</lang>
}</lang>
{{out}}
{{out}}