Пример. Исследовать падение шарика радиуса R с высоты h
Задачи исследования:
1. Получить зависимости h=f(t), v=f(t) при начальных значениях r,v0,h0,k1,k2.
2. Получить семейство графиков h=f(t,r), v=f(t,r).
3. Получить зависимость h=f(r), v=f(r) при t - const
Исходные данные:
1. Модель объекта падения, R - радиус шарика, h - высота падения, v0 - начальная скорость падения, k1 k2 - коэффициенты внешней среды.
2. - площадь сечения тела, поперечного по отношению к потоку
3. плотность шарика;
4. – плотность воздуха.
5.
6. c = 0.4 – коэффициент лобового сопротивления шарика;
var
Form4: TForm4;
km,r,m,vo,ho,s,p,v,a,dv,da,c:double ;
h1,h2,cn,ck,dc,t,dt,y1,y2,dy1,dy2:double;
ind,k:integer;
arrt,arrv,arra,arrh:array[1..10000] of double;
implementation
uses Unit1, Unit5;
//описание функции
function ff(m,km,r,c,s,p,v:double):double;
begin
ff:=(m*9.8-6*km*Pi*r*v-0.5*c*s*p*v*v)/m;
end;
//Кнопка возврата к титульному листу
procedure TForm4.N3Click(Sender: TObject);
begin
form5.show;
for ind:=0 to 7 do
begin
form5.Chart1.SeriesList[ind].Clear;
form5.Chart2.SeriesList[ind].Clear;
end;
//Входные параметры
r:=strtofloat(edit1.Text);//радиус падующего тела
km:=strtofloat(edit2.text);//коэффициент вязкости
s:=strtofloat(edit3.Text);//площадь падующего тела
p:=strtofloat(edit4.Text);//плотность среды
ho:=strtofloat(edit5.Text);//начальная высота
vo:=strtofloat(edit6.Text);//начальная скорость
m:=strtofloat(edit7.Text);//масса падающего тела
c:=0.1;//коэффициент лобового сопротивления среды
k:=0;//номер графика
// 1
while c<=1.5 do
begin
ind:=0;
t:=0;dt:=0.1;
y1:=vo;
y2:=ff(m,km,r,c,s,p,vo);
while t<=10 do
begin
form5.Chart1.SeriesList[k].Add(y1,floattostr(t));
dy1:=dt*y2;
dy2:=dt*ff(m,km,r,c,s,p,y1);
y1:=y1+dy1;
y2:=y2+dy2;
t:=t+dt;
end;
c:=c+0.2;
k:=k+1;
end;
//2
k:=0;
t:=30;y1:=vo;y2:=ff(m,km,r,c,s,p,vo);
while t<=44 do
begin
c:=0.1;
while c<=2 do
begin
form5.Chart2.SeriesList[k].Add(y2,floattostr(c));
dy1:=dt*y2;
dy2:=dt*ff(m,km,r,c,s,p,y1);
y1:=y1+dy1;
y2:=y2+dy2;
c:=c+0.1;
end;
t:=t+2;
k:=k+1;
end;
end;
//Кнопка ввода данных
procedure TForm4.N1Click(Sender: TObject);
//Кнопка построения графика
procedure TForm4.N2Click(Sender: TObject);
begin
//очистка старых графиков
for ind:=0 to 7 do
begin
form4.Chart1.SeriesList[ind].Clear;
form4.Chart2.SeriesList[ind].Clear;
end;
//Входные параметры
r:=strtofloat(edit1.Text);//радиус падующего тела
km:=strtofloat(edit2.text);//коэффициент вязкости
s:=strtofloat(edit3.Text);//площадь падующего тела
p:=strtofloat(edit4.Text);//плотность среды
ho:=strtofloat(edit5.Text);//начальная высота
vo:=strtofloat(edit6.Text);//начальная скорость
m:=strtofloat(edit7.Text);//масса падающего тела
cn:=0.1;ck:=1.5;//интервал лобового сопротивления среды
dc:=(1.5-0.1)/7;//шаг изменения лобового сопротивления
k:=0;//номер графика
// цикл по лобовому сопротивлению
while cn<=ck do
begin
v:=vo;//первая производная расстояния по времени- начальная скорость
a:=1; //вторая производная расстояния по времени-ускорение
ind:=1;//счетчик записи данных в массивы
t:=0;//счетчик подчета времени падения тела
h1:=ho;//высота с которой падает тело
h2:=0; // тело лежит на земле
//цикл времени падения тела
while h1>=h2 do
begin
//запись в массивы полученных данных
arrh[ind]:=h1;//высота
arrv[ind]:=v;//скорость
arrt[ind]:=t;//время
//вывод графиков
form4.Chart1.SeriesList[k].Add(arrh[ind],floattostr(arrt[ind]));
form4.Chart2.SeriesList[k].Add(arrv[ind],floattostr(arrt[ind]));
// решение дифференциального уравнения методом Эйлера
dv:=0.01*a;
da:=0.01*ff(m,km,r,cn,s,p,a);
v:=v+dv;
a:=a+da;
h1:=h1-arrv[ind]*arrt[ind];//изменение высоты за время t
t:=t+0.01;//изменение времени
ind:=ind+1;
end;
//переход к следующему коэффициенту лобового сопротивления
// и соответсвенно к следующему графику
k:=k+1;
cn:=cn+dc;
end;
end;
procedure TForm4.N4Click(Sender: TObject);
begin
form4.Hide;
form5.hide;
form1.Show;
end;
Дата добавления: 2015-09-07; просмотров: 817;