При эпидемии гриппа число больных N изменяется по формуле
Ni+1 = Ni + Zi+1 - Vi+1,
где – Zi количество заболевших в i-й день, а Vi – количество выздоровевших в тот же день. Число заболевших рассчитывается согласно модели ограниченного роста:
где L – общая численность жителей, K – коэффициент роста и Wi – число переболевших (тех, кто уже переболел и выздоровел, и поэтому больше не заболеет):
Wi+1 = Wi - Vi+1.
Считается, что в начале эпидемии заболел 1 человек, все заболевшие выздоравливают через 7 дней и больше не болеют.
Выполните моделирование развития эпидемии при L = 1000 и K = 0,5 до того момента, когда количество больных станет равно нулю. Постройте график изменения количества больных.
ответьте на следующие во Когда закончится эпидемия?
ответ:
2. Сколько человек переболеет, а сколько вообще не заболеет гриппом?
ответ:
3. Каково максимальное число больных в один день?
ответ:
4. Изменяя коэффициент K, определите, при каких значениях K модель явно перестает быть адекватной.
ответ:
5. *Сравните модель, использованную в этой работе, со следующей моделью:
Анализируя результаты моделирования, докажите, что эта модель неадекватна. Какие допущения, на ваш взгляд, были сделаны неверно при разработке этой модели?
ответ:
Сравните поведение двух моделей при K = 0, K = 0,3 и K = 1. Сделайте выводы.
ответ:
(1 + 0) - истинна, т.к. дизъюнкция истинна если хотя-бы одна из переменных истинна
(0 + 0) - ложна, т.к. обе перменные ложны
(1 + 0)*(0+0) - ложна, т.к. первая скобка истинна, а вторая ложна, а в конъюнкции для истины обе скобки должны быть истинны.
1*0 - ложна, т.к. в конъюнкции обе переменные должны быть истинны.
Для удобства разделил скобками
((1 + 0)*(0+0)) + (1*0) - ложна, т.к. первая (большая) скобка ложна, вторая скобка (1*0) тоже ложна, между ними дизъюнкция, то есть хотя-бы одна из них должна быть истинна. Они обе ложны, значит результатом выражения
(1 + 0)*(0+0) + 1*0
будет 0
var
a: array[1..l] of integer;
d: array[1..l] of real;
i, otr, k, m: integer;
begin
otr:=0; k:=0; m:=0;
//считаем массив а
for i:=1 to l do
begin
readln(a[i]);
//если ввели положительное число,увеличим перем. otr на 1
if a[i] < 0 then
inc(otr);
//если ввели отрицательное число,увеличим перем. k на 1
//и к переменной m прибавим элемент
if a[i] > 0 then
begin
inc(k);
inc(m, a[i]);
end;
end;
//заполним массив d
for i:=1 to l do
//если индекс четный, присвоим элементу otr
//иначе присвоим среднее арифметическое
if i mod 2 = 0 then
d[i] := otr
else
d[i] := m/k;
end.