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. |
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}} |