Моделирование физической и биологической задачи.
Задача о пушке, которой надо попасть в крепость.
Известна высота башни h и расстояние S до неё. Найти угол , при котором снаряд из пушки попадёт в башню на высоте h.
Решение.
(см в лекциях)
Горизонтальное и вертикальное смещение снаряда за время t описывается формулами:
где - ускорение свободного падения = 9.8 и - начальная скорость вылета снаряда.
Выразим t из первой формулы и подставим во вторую:
Задача сводится к решению методом половинного деления где . Метод половинного деления или аналог в артиллерийском приёме (пристреле) – одно положение выше цели, второй выстрел ниже цели.
Алгоритм метода половинного деления смотри в численных методах.
Текст программы на Pascal:
program n1;
uses crt;
var v,h,s:integer;
a1,a2,a,h1,h2,hh:real;
begin
clrscr;
writeln('Введите начальную скорость');
readln (v); { Ввод с клавиатуры скорости }
writeln('Введите расстояние до цели');
readln(s); { Ввод с клавиатуры расстояния }
writeln('Введите высоту цели');
readln(h); { Ввод с клавиатуры высоты }
a1:=0; {начальный угол}
a2:=89; {конечный угол}
a:=(a1+a2)/2; {искомый угол т.е промежуточный угол}
hh:=s*(sin(pi/180*a)/cos(pi/180*a))-(9.8*s*s)/(2*v*v*cos(pi/180*a)*cos(pi/180*a));
{высота полёта при искомом угле}
while abs(hh-h)0.01 do
{пока разность между искомым и полученным углом больше 0.001 то выполнять цикл}
begin
if hhh then a2:=a ;
{если полученная высота больше искомой, то а2 = промежуточному углу}
if hh
{если полученная высота меньше искомой, то а1 = промежуточному углу}
a:=(a1+a2)/2; (искомый т.е. промежуточный угол = середине между а1 и а2)
hh:=s*(sin(pi/180*a)/cos(pi/180*a))-(9.8*s*s)/(2*v*v*cos(pi/180*a)*cos(pi/180*a));
{расчёт новой высоты при новом промежуточном угле}
end;
write('Угол =',a); {вывод полученного угла}
readkey;
end.
Например, угол, при котором пушка попадёт на высоту 5, на расстоянии 10 при начальной скорости 20 равен 34 градуса.
Задания:
Найти необходимый угол выстрела, при скорости вылета снаряда 20, на расстояние 5, чтобы снаряд попал в цель на высоте 5.
Найти необходимый угол выстрела, при скорости вылета снаряда 15, на расстояние 5, чтобы снаряд попал в цель на высоте 5.
Найти необходимый угол выстрела, при скорости вылета снаряда 20, на расстояние 10, чтобы снаряд попал в цель на высоте 15.
Сделайте вывод о зависимости между необходимым углом и скоростью вылета снаряда;
Сделайте вывод о зависимости между необходимым углом и расстоянием до цели;
Сделайте вывод о зависимости между необходимым углом и высотой цели;
Сделайте вывод о зависимости между всеми параметрами модели.
Задача о кроликах и лисах.
На некотором острове живут лисы и кролики. Кролики питаются травой, а лисы кроликами. Экологи пересчитывают кроликов и лис и сделали вывод:
Коэффициент прироста числа кроликов зависит от колебания погоды (холодная или тёплая) и колеблется от 3.2 до 4.7
Коэффициент прироста числа лис при избытке крольчатины колеблется от 5.2 до 5.7. При недостатке прирост пропорционален приросту кроликов.
Коэффициент пропорциональности =50
Требуется установить, как меняется численность кроликов, и лис с течением времени.
Построение модели и схему взаимодействия лис и кроликов смотри в лекциях.
Текст задачи на Pascal:
program n2;
uses crt;
var i,n:integer;
m,m1,l1,l,
k,a:real;
begin
clrscr;
write('vvedite kolichestvo let');
readln(n);
write('vvedite nachalnoe kolichestvo krolikov');
readln(m);
write('vvedite nachalnoe kolichestvo lis');
readln(l);
write('vvedite koefficient prirista krolikov');
readln(k);
write('vvedite koefficient prirista lis');
readln(a);
for i:=1 to n do
begin
m1:=(1+k)*m-50*l;
if a
l:=l1;
m:=m1;
end;
writeln('kolichestvo lis = ',l);
writeln('kolichestvo krol = ',m);
readkey;
end.
Решение в Excel:
На рисунке видно, что в ячейки B1-B4 вводим исходные данные. В ячейку E8 вводим формулу =(1+МИН($B$3;(F8-F7)/50))*E7 затем растягиваем ячейки вниз на необходимое количество лет (в данном примере 21 год; от 0 до 20). В ячейку =(1+$B$4)*F7-E7*50 и аналогично растягиваем. В результате в ячейках E7-E27 получим количество лис в соответствующих справа годах. В F7-F27 – количество кроликов. Например, видно, что при начальном количестве кроликов = 10000, при количестве лис = 100, и коэффициентах роста для кроликов = 4 и лис =0,1 количество кроликов через 10 лет будет 85136221274 а лис 259.
Задания:
Исследуйте по модели количество кроликов и лис при начальном количестве 1000 кроликов. Что произошло? В чём погрешность модели?
Исследуйте по модели количество кроликов и лис при начальном количестве 10000 кроликов и различных коэффициентах роста кроликов и лис. Сделайте выводы.
Сделайте выводы о взаимосвязи между различными параметрами.
Краевые задачи:
Используя метод конечных разностей решить краевую задачу:
U(x,0)=2*cos(x+0.55)
x=a = sin(t)
U(0.6,t)=0.817+2*t
Текст задачи на Pascal
Program kraevaya_zadacha;
uses crt;
const x0 = 0; {начальная точка стержня}
dx = 0.1; {шаг разбиения стержня}
nx = trunc(0.6/dx); {количество разбиений }
t0 = 0; {начальный момент времени}
dt = 0.001; {шаг по времени –берётся из условия устойчивости }
T = 20; {количество промежутков времени}
var u0,u1:array [0..nx] of real;
x,t1:real;
i,j,i1:integer;
begin
clrscr;
{ ========================Вывод на экран строки значений х ================}
write (' ':7);
for i:=0 to nx do
begin
x:=x0+i*dx;
write('|',x:7:4);
end;
writeln;
writeln('---------------------------------------------------------------');
{========Вычисление в цикле значения температуры в начальный момент времени===}
for i:=0 to nx do
begin
x:=x0+i*dx;
u0[i]:=2*cos(x+0.55);
end;
for j:=0 to T do {открываем цикл по времени}
begin
t1:=t0+j*dt;
u1[nx]:= 0.817+2*t1; {Задаём правое граничное условие}
for i:=1 to nx-1 do
{=================Вычисление температуры на следующем слое}
U1[i]:=(dt*(U0[i+1]-2*U0[i]+U0[i-1]))/(dx*dx)+U0[i] ;
U1[0]:= U1[1]-dx*sin(t1); {вычисление левого граничного условия}
{=======================Вывод результатов на экран}
write(t1:7:4);
for i1:=0 to nx do
write ('|',u1[i1]:7:4);
writeln;
U0:=U1; {переприсваивание массивов}
End; {Закрытие цикла по времени}
end.
Решение в Excel:
На рисунке видно, что в ячейках C23-I23 содержаться точки стержня (от 0 до 0.6). В ячейках B2-B22 содержаться значения моментов времени. Тогда на пересечении строки и столбца находится соответствующие искомые значения.
В ячейку С22 вводим формулу =D22-SIN(B22)*0,1 затем растягиваем её вверх до С2 (из условия x=a = sin(t)). В ячейку D22 вводим =2*COS(D23+0,55) и растягиваем до ячейки H22 (из условия U(x,0)=2*cos(x+0.55)). Вводим в I22 формулу =0,817+2*B22 (из условия U(0.6,t)=0.817+2*t) и растягиваем вверх до I2. Затем в D21 вводим формулу =(0,001*(E22-2*D22+C22))/(0,1*0,1)+D22 (из условия ) и растягиваем от D21 вверх и вправо до H2. В результате мы получим значения для каждой точки в каждый момент времени.
Задания: сравните данные таблицы с результатами работы программы на Pascale.
Моделирование в среде MathCAD задачи «Хищники и жертвы».
Составим по данной математической модели программу на языке MathCAD (см. теорию), и определим колебания числа жертв и хищников, решив нелинейные дифференциальные уравнения:
Выбираем стандартную функцию ORIGIN
ORIGIN:=1
B:=4 {из данных}
{столбец неизвестных}
F(t,y):=
ORIGIN:=0
z:=Rkadapt(y,0,50,1001,F)
t:=z(0)
x:=z(1)
y:=z(2)
Строится график:
8