32 lines
635 B
ObjectPascal
32 lines
635 B
ObjectPascal
procedure euler(f: (real) -> real; y0, a, b, h: real);
|
|
begin
|
|
var (t, y) := (a, y0);
|
|
write(' Step', h:3, ':');
|
|
while t <= b do
|
|
begin
|
|
if integer(t) mod 10 = 0 then write(y:8:3);
|
|
t += h;
|
|
y += h * f(y);
|
|
end;
|
|
writeln;
|
|
end;
|
|
|
|
procedure analytic();
|
|
begin
|
|
write(' Time:');
|
|
for var t := 0 to 100 step 10 do write(t:8);
|
|
writeln;
|
|
write('Analytic:');
|
|
for var t := 0 to 100 step 10 do
|
|
write(20.0 + 80.0 * exp(-0.07 * t):8:3);
|
|
println();
|
|
end;
|
|
|
|
function newtoncooling(temp: real): real := -0.07 * (temp - 20);
|
|
|
|
begin
|
|
analytic;
|
|
foreach var i in |2, 5, 10| do
|
|
euler(newtoncooling, 100.0, 0.0, 100.0, i)
|
|
end.
|