
- •1.2. Важность графики
- •2. Задача об остывании кофе
- •2.1. Основные понятия
- •2.2. Алгоритм Эйлера
- •2.4. Программа для компьютера
- •2.5. Программа для решения задачи об остывании кофе
- •Задача 2.1. Программа для решения задачи об остывании кофе
- •Задача 2.2. Анализ данных
- •2.6. Устойчивость и точность
- •Задача 2.3. Точность и устойчивость метода Эйлера
2.5. Программа для решения задачи об остывании кофе
Вернемся к нашей чашечке кофе и разработаем компьютерную программу для численного решения уравнения теплопроводности Ньютона. Чтобы определить, разумна ли наша модель понижения температуры, приведем экспериментальные данные для остывания настоящей чашки кофе (табл. 2.2.)
Таблица 2.2
Остывание чашки кофе, помещенной
в керамический стакан.
Время, мин |
Т, град |
Время, мин |
Т, град
|
0 |
83.0 |
8.0 |
64.7 |
1.0 |
77.7 |
9.0 |
63.4 |
2.0 |
75.1 |
10.0 |
62.1 |
3.0 |
73.0 |
11.0 |
61.0 |
4.0 |
71.1 |
12.0 |
59.9 |
5.0 |
69.4 |
13.0 |
58.7 |
6.0 |
67.8 |
13.0 |
57.8 |
7.0 |
66.4 |
15.0 |
56.6 |
Температура регистрировалась с точностью 0.1 град.
Температура окружающего воздуха 22 град.
Структура программы Сool, в которой реализован алгоритм Эйлера численного решения задачи ньютоновской теплопроводности, аналогична структуре программы Example. Единственное различие состоит в том, что вывод на экран осуществляется подпрограммой Output, которая вызывается из подпрограммы Euler. Модульный подход к программированию будет полезен при выводе графиков.
program Cool; {метод Эйлера для задачи об остывании кофе}
var
t, tmpr, room_tmpr, r, dt : real; {описание}
ncalc : integer; {переменных }
procedure Iinitial ( var t, tmpr, room_tmpr, r, dt : real;
var ncalc : integer);
var tmax:real;
begin
t:=0.0; {начальный момент времени}
tmpr:=83; {начальная температура кофе (С)}
room_tmpr:=22; {комнатная температура (С)}
r:=0.1; {коэффициент остывания (1/мин)}
dt:=0.1; {шаг по времени (мин)}
tmax:=2.0; { длительность наблюдения (мин)}
ncalc:=trunc(tmax/dt); {общее количество шагов}
end;
procedure Output (t,tmpr : real);
begin
writeln(t, tmpr) { печать результатов }
end;
procedure Euler (var t, tmpr, room_tmpr, r, dt : real;
var ncalc : integer);
var
change : real;
icalc : integer;
begin
for icalc:=1 to ncalc do { цикл повторяется ncalc раз}
begin
change := - r (tmpr - room_tmpr);
tmpr := tmpr + change dt;
t := t+dt; { время}
Output (t,tmpr)
end
end;
begin {основная программа}
Initial(t, tmpr, room_tmpr, r, dt, ncalc);
Euler(t, tmpr, room_tmpr, r, dt, ncalc) ;
end.