Euler method: Difference between revisions
Content added Content deleted
(Added Swift solution) |
(Added Algol W) |
||
Line 203: | Line 203: | ||
80.000: 20.005 |
80.000: 20.005 |
||
90.000: 20.002 |
90.000: 20.002 |
||
done |
|||
</pre> |
|||
=={{header|ALGOL W}}== |
|||
{{Trans|ALGOL 68}} |
|||
Which is |
|||
{{Trans|D}} |
|||
<lang algolw>begin % Euler's method % |
|||
% Approximates y(t) in y'(t)=f(t,y) with y(a)=y0 and t=a..b and the step size h. % |
|||
real procedure euler ( real procedure f; real value y0, a, b, h ) ; |
|||
begin |
|||
real y, t; |
|||
y := y0; |
|||
t := a; |
|||
while t < b do begin |
|||
write( r_format := "A", r_w := 8, r_d := 4, s_w := 0, t, ": ", y ); |
|||
y := y + ( h * f(t, y) ); |
|||
t := t + h |
|||
end while_t_lt_b ; |
|||
write( "done" ); |
|||
y |
|||
end euler ; |
|||
% Example: Newton's cooling law % |
|||
real procedure newtonCoolingLaw ( real value time, t ) ; -0.07 * (t - 20); |
|||
euler( newtonCoolingLaw, 100, 0, 100, 10 ) |
|||
end.</lang> |
|||
{{out}} |
|||
<pre> |
|||
0.0000: 100.0000 |
|||
10.0000: 44.0000 |
|||
20.0000: 27.2000 |
|||
30.0000: 22.1600 |
|||
40.0000: 20.6480 |
|||
50.0000: 20.1944 |
|||
60.0000: 20.0583 |
|||
70.0000: 20.0175 |
|||
80.0000: 20.0052 |
|||
90.0000: 20.0015 |
|||
done |
done |
||
</pre> |
</pre> |