Вы находитесь на странице: 1из 11

МОДЕЛИРОВАНИЕ И ИССЛЕДОВАНИЕ РЕАЛЬНОГО Лаб

ФИЗИЧЕСКОГО ПРОЦЕССА НА ЭВМ №2

Цель работы : 1 Изучить методику построения математической модели для


конкретной физической системы.
2. Составить математические модели физической системы с различными
допущениями.
3. Исследовать полученные модели на ЭВМ для различных входных
параметров.
Краткая теория
Процесс построения математической модели называют формализацией объекта, с нее
начинается любое исследование. При этом следует учитывать, что математическая
модель не определяется однозначно исследуемым объектом. Степень сложности
выбранной математической модели определяется требованием точности – чем выше
точность, тем больше приходиться усложнять матмодель, учитывая новые и новые
особенности изучаемого объекта
Математическая модель – система уравнений математического описания,
отражающая сущность явлений, протекающих в объекте моделирования, и
позволяющая с помощью определенного алгоритма прогнозировать поведение объекта
при изменении входных и управляющих параметров.
Математическая модель основана на некотором упрощении, идеализации и не
тождественна объекту, а является его приближенным описанием. Однако, благодаря ей
появляется возможность сформулировать задачу изучения объекта как математическую,
что позволяет предсказать, как поведет себя объект в различных условиях и
спрогнозировать результаты будущих наблюдений.
Рассмотрим математическую модель физической системы. Для ее построения
необходимо:
1) сделать предположения о возможной идеализации этой системы, то есть
определить возможные допущения (например, рассматривать некоторое тело как
материальную точку);
2) определить некоторые физические законы, которые нужно принять во внимание
при ее изучении;
3) записать эти законы в виде математических уравнений.
Алгоритм и программы на языке Паскаль с результатами расчетов
Программа 1
program lab2;
{Моделирование полета снаряда с различными допущениями}
Uses Crt,Graph;
const ndim=4;{Число дифференциальных уравнений}
n=500;
g=9.8;
w=500;
type mdim=array[1..ndim] of real;
var y, dery:mdim;
t,tend,h,hput:real;
tpr,it,a:real;
c,r,ro:real;
max,max1,mx,my,ix,xt,iy,u:real;
m,v0,alf,gd,gm,i,k,dm:integer;
my1,my2,x,z:array [0..n+1] of real;
my11:array [0..w] of real;
f:text;st1,st2:string;
procedure fct;
begin
dery[1]:=y[3];
dery[2]:=y[4];
dery[3]:=-c*pi*sqr(r)*ro/(2*m)*sqrt(sqr(y[3])+sq[4]))*y[3];
dery[4]:=-g-c*pi*sqr(r)*ro/(2*m)*sqrt(sqr(y[3])+sqr(y[4]))*y[4];
end;
procedure outp;
const i:word=0;
begin
if i mod 5=0 then
writeln(f,'t=',t:6:3,' x=',y[1]:7:3,' y=',y[2]:7:3);
my1[i]:=y[1];
my2[i]:=y[2];
i:=i+1
end;
{$I rkgs.pas}
begin
assign(f,'krut_pike.dat');
rewrite(f);
writeln('введите начальную скорость V0:');
readln(v0);
writeln(f,'начальная скорость V0=',v0:2);
writeln('введите начальный угол полета тела');
readln(alf);
writeln(f,'угол полета тела ',alf:3);
writeln(f);
m:=10;
c:=0.15;
r:=0.07;
ro:=1.3;
y[1]:=0;
y[2]:=0;
y[3]:=v0*cos(pi/180*alf);
y[4]:=v0*sin(pi/180*alf);
t:=0;
h:=0.1;
tend:=30;
hput:=tend/n;
rkgs;
gd:=0;
initgraph(gd,gm,'c:\tp_7_0\bgi');
max:=my1[0];
max1:=my2[0];
for i:=0 to n do
begin
if my1[i]>max then max:=my1[i];
if my2[i]>max1 then
begin max1:=my2[i];
dm:=i
end
end;
mx:=300/max;
my:=200/max1;
cleardevice;
setcolor(5);
line(50,400,50,50);
line(50,50,54,60);
line(50,50,46,60);
setcolor(white);
outtextXY(37,47,'Y');
outtextXY(47,405,'0');
setcolor(5);
line(50,400,600,400);
line(600,400,590,396);
line(600,400,590,404);
setcolor(white);
outtextXY(598,405,'X');
MoveTo(50,400);
k:=1;
while (my2[k]>0)and(k<=n) do k:=k+1;
k:=k-1;
mx:=300/my1[k];
setcolor(9);
for i:=1 to k do
LineTo(50+round(mx*my1[i]),400-round(my*my2[i]));
setcolor(6);
{______________________________________________}
a:=(pi/180)*alf; {Перевод градусов в радианы}
{Определение времени полета без учета сопротивления}
tpr:=2*(V0*abs(sin(a)))/g;
it:=tpr/n;
{Моделируем полет без учета сопротивления воздуха}
for i:=1 to n-1 do
begin
x[i]:=V0*it*i*abs(cos(a));
z[i]:=V0*it*i*abs(sin(a))-g*sqr(it*i)/2
end;
MoveTo(50,400);
Setcolor(14);
{Рисуем траекторию полета}
for i:=1 to n-1 do
LineTo(50+round(x[i]*mx),400-round(z[i]*my));
str(x[n-1]:4:2,st1);
outtextXY(80+round(mx*x[n-1]),390,st1);
{_____________________________________________}
Setcolor(6);
for i:=1 to k do
my11[i]:=my1[i]/100;
ix:=x[n-1]/5;
xt:=ix;
repeat
str(xt:4:2,st1);
outtextXY(50+round(mx*xt)-16,410,st1);
line(50+round(mx*xt),400,50+round(mx*xt),400-round(my*z[250]));
xt:=xt+ix
until xt>x[n-1]+ix/2;
iy:=z[250]/5;
u:=iy;
repeat
line(50,400-round(my*u),50+round(mx*x[n-1]),400-round(my*u));
str(u:4:2,st2);
outtextXY(5,400-round(my*u),st2);
u:=u+iy
until u>z[250]+iy/2;
Setcolor(9);
str(my1[k]:4:2,st1);
outtextXY(round(mx*my1[k])+60,390,st1);
str(my2[dm]:4:1,st2);
setcolor(white);
outtextXY(10,10,'"Нажмите ENTER"');
readln;
closeGraph;
end.
Программа 2
procedure rkgs;
label 1,2,3;
type m=array[1..4] of real;
const a:m=(1/6,1/3,1/3,1/6);
b:m=(0.5,0.5,1.0,1.0);
var y1,y2:mdim;
pz,pv:array[1..ndim] of boolean;
signz:array[1..ndim] of shortint;
r,aj,bj,ht,h1,tput:real;
iput,iend:boolean;
i,j:integer;
function sign(x:real):shortint;
begin
if x>0 then sign:=1
else if x<0 then sign:=-1
else sign:=0
end;
procedure p1;
var i:word;
begin
for i:=1 to ndim do
begin
if pv[i] then
begin
y[i]:=0;
pv[i]:=false
end;
pz[i]:=true
end
end;
procedure p2;
var signv:shortint;
i:word;
begin
for i:=1 to ndim do
begin
signv:=sign(y[i]);
if not pv[i] then
if signv<>0 then
if pz[i] then begin signz[i]:=signv;pz[i]:=false end
else if signv<>signz[i] then pv[i]:=true
end
end;
begin for i:=1 to ndim do
begin
pv[i]:=false;pz[i]:=true
end;
tput:=t; fct;
iend:=false;
1:iput:=false;outp;tput:=tput+hput;
2: ht:=h; y1:=y;y2:=y;
h1:=tput-t;
if h1<=h then begin ht:=h1; iput:=true end;
h1:=tend-t;
if h1<=ht then
begin if h1<ht then
begin
ht:=h1;iput:=false
end;
iend:=true
end;
j:=1;
3: aj:=a[j]; bj:=b[j];
for i:=1 to ndim do
begin
r:=dery[i]*ht;
y2[i]:=y2[i]+aj*r;
if j<>4 then y[i]:=y1[i]+bj*r;
end;
if j<>4 then
begin
j:=j+1;
if j<>3 then t:=t+0.5*ht;
p2; fct;
goto 3
end;
y:=y2;p1; p2;
fct;
if iend then begin outp;exit end;
if iput then goto 1;
goto 2
end;
начало

v0

l:=(v0/g)sin 2a

tend:=l/(v0*cos α)

wag:=tend/(n-1)

Вывод в файл
исходных
данных

t:=0
i:=0..n-1

m1[2,i]>a2

a2:=m1[2,i]

m1[2,i]>=0

t:=2t+wag

k:=i

Построение траектории
полета снаряда с учетом
сопротивления воздуха

Вывод координат
полета снаряда в файл

i:=k

Вывод в файл результатов


моделирования с учетом
сопротивления воздуха

Вывод на экран результатов


моделирования с учетом
сопротивления воздуха

readln

Закрытие
графики

конец
Исходные данные и графики полета снаряда.
начальная скорость V0=150
угол полета тела 30
Вывод: была изучена методика построения математической модели для конкретной
физической системы. Составлены математические модели физической системы с
различными допущениями. Исследованы полученные модели на ЭВМ для различных
входных параметров.