Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Министерство образования Республики Беларусь
БЕЛОРУССКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра “Теория механизмов и машин”
Курсовая работа
по информатике
на тему: “Исследование колебаний математического маятника”
вариант № 24
Выполнил____________ Хтей Д.
Группа 103814
Руководитель_________ Луцко Н. Я.
Минск 2006
[1] СОДЕРЖАНИЕ [2] ВВЕДЕНИЕ [3] 1. ПОСТАНОВКА ЗАДАЧИ [4] 2. МАТЕМАТИЧЕСКАЯ МОДЕЛЬ РЕШЕНИЯ ЗАДАЧИ [5] 3. АЛГОРИТМ РЕШЕНИЯ ЗАДАЧИ [6] 4. СХЕМА АЛГОРИТМА [7] 5. ТАБЛИЦА ИДЕНТИФИКАТОРОВ [8] 6. ТЕКСТ ПРОГРАММЫ [9] 7. РЕЗУЛЬТАТЫ РАБОТЫ ПРОГРАММЫ [10] 8. ГРАФИЧЕСКАЯ ЧАСТЬ [11] 9. АНАЛИЗ РЕЗУЛЬТАТОВ [12] ЛИТЕРАТУРА [13] ПРИЛОЖЕНИЕ [13.1] Решение задачи с использование Microsoft Excel [13.2] Решение задачи с помощью MathCAD |
При осуществлении проектов в машиностроительной области, начальной стадией реализации этого проекта является создание модели, которая по возможности могла бы учитывать все факторы, влияющие на качество, надежность, долговечность, заданные характеристики работы при эксплуатации. В соответствии с условиями работы и заданными техническими характеристиками необходимо спроектировать такую модель, которая бы отвечала всем поставленным требованиям. Однако в процессе разработки приходится воплощать несколько моделей и сравнивать их характеристики между собой для более оптимального решения проблемы, в этих случаях наиболее целесообразно использовать ЭВМ.
Автоматизация машиностроения требует не только автоматического управления режимами, например, механической обработки, прессования, термической, физико-химической обработки и других рабочих процессов машиностроения. Для полной механизации работ требуется автоматизация транспортирования (перемещения в пространстве) и переориентация объекта производства. В качестве такого объекта манипулирования может быть обрабатываемая деталь, инструмент или другой предмет самой разнообразной конфигурации. Чаще всего требуется не только переместить в пространстве, но и сориентировать деталь определенным образом, т.е. не только изменить ее местонахождение, но и развернуть в пространстве определенным образом. Эти операции выполняются манипуляторами промышленных роботов.
В данном курсовом проекте рассматривается движение математического маятника, как один из примеров разнообразия решаемых на ЭВМ задач. Компьютерные технологии очень ускорили изучение человеком различных процессов: физических, химических, математических, решение инженерных задач.
Математический маятник представляет собой шарик, подвешенный на нити, при сообщении шарику некоторой начальной скорости он начнёт колебательное движение. Причём если пренебречь силами сопротивления (создать идеальные условия), то маятник будет совершать гармонические колебания неограниченное количество времени. Это и помогают доказать исследования проводимые на ЭВМ.
Математическому маятнику массой m и длиной нити l в низшем положении сообщена горизонтальная скорость (рисунок 1).
Исследовать характер колебаний маятника при изменении времени от 0 до tкон, определив зависимость S(t) и построив её график. Силами сопротивления пренебречь.
Рисунок 1
Значения исходных данных:
Начальная скорость v0 = 0,05 м/с;
Длина нити l = 1 м;
Конечное время tкон = 1,8 с;
Количество разбиений n = 40.
Математическую модель задачи построим, используя второй закон Ньютона. Дифференциальное уравнение движения имеет вид:
.
Так как для окружности , то мы получим
.
Зададим следующие начальные условия движения тела: , .
Таким образом, для исследования характера движения тела необходимо найти решение задачи Коши:
.
Преобразуем её к системе дифференциальных уравнений первого порядка с начальными условиями:
.
Решим построенную систему методом Эйлера, используя формулы:
, , , ,
, , , для i = 2, 3, …, n + 1.
Получим таблично заданную зависимость S(t).
1. Вводим исходные данные
V0, l, Tkon, n;
2. t1:=0; V1:=V0; S1:=0;
Проверка исходных данных производиться с помощью процедуры schityvanie.
3. schityvanie(var v0,l,Tkon:real; var n:integer);
4. Запись исходных данных производиться с помощью процедуры vvod_parametrov;
5. Записываем введённые данные с помощью процедуры zapis_parametrov в файл dannye.dan.
6. С помощью процедуры Max_Min определяем значения скорости V и пройденный путь S, а также находим максимальные и минимальные значения этих величин.
7. С помощью процедуры osi_koordinat строим оси координат для изображения графика зависимости S(t) и V(t).
8. С помощью процедуры MyGraphInit переводим режим работы компьютера с текстового на графический.
9. С помощью процедуры Graph_V выполняется построение графика зависимости V(t).
10. С помощью процедуры Graph_S выполняется построение графика зависимости S(t).
11. Результаты вычисления записываются в файл rezultat.dan с помощью процедуры Zapis_rez.
12. Процедура vybor обеспечивает выбор требуемой операции: ввод и контроль исходных данных, просмотр графиков V(t) и S(t), а также выход из программы.
13. Выполнение самой программы - последовательное выполнение всех процедур.
Алгоритм процедуры Max_Min
1. dt:=Tkon/n;
2. Для i:=2..n+1;
2.1. t:=(i-1)*dt;
2.2. v:=v-dt*9.8*sin(s/l);
2.3. s:=s+dt*v;
Процедура schityvanie |
Процедура vvod_parametrov |
Процедура zapis_parametrov |
Процедура Max_Min |
Процедура osi_koordinat |
Процедура MyGraphInit |
Процедура Graph_V |
Процедура Graph_S |
Процедура Zapis_rez
Процедура vybor
Схема головной программы
Наименование |
физический смысл |
идентификатор |
Начальная скорость |
V0 |
V0 |
Длина нити |
l |
l |
Начальное время |
t1 |
t |
Конечное время |
tкон |
Tkon |
Число повторений |
n |
n |
Отклонение маятника |
S |
S |
Максимальное отклонение маятника |
Smax |
maxS |
Минимальное отклонение маятника |
Smin |
minS |
Скорость маятника |
V |
V |
Максимальная скорость маятника |
Vmax |
maxV |
Минимальная скорость маятника |
Vmin |
minV |
Счётчик |
--------- |
i |
program kursovoi_variant_24;
uses graph,crt;
var
dan,rez:text;
graphdriver,
GraphMode,
ErrorCode:integer;
v0,l,Tkon:real;
n:integer;
maxV,minV, maxS,minS:real;
procedure schityvanie(var v0,l,Tkon:real; var n:integer);
var z:integer;
s:char;
begin
clrscr;
{$I-}
assign(dan,'dannye.dan');
reset(dan);
z:=ioresult;
{I+}
if z<>0 then
begin
writeln('oshibka faila ''dannye.dan'' No:',z);
readkey;
Halt(1);
end;
readln(dan,s);
readln(dan,s);
read(dan,v0);
read(dan,l);
read(dan,Tkon);
read(dan,n);
close(dan);
end;
procedure vvod_parametrov(var v0,l,Tkon:real; var n:integer);
var i:integer;
s:char;
begin
repeat
clrscr;
writeln('ishodnymi dannumi yavlyautsa:');
writeln('na4al''naya skorost'' Vo: ',v0:4:3);
writeln('dlinna niti mayatnika L: ',l:4:3);
writeln('kone4noe vremya Tkon: ',tkon:4:3);
writeln('koli4estvo razbienei po vremeni n: ',n);
writeln('Vi hotite izmenit'' eti dannye?');
write('Da- y, Net- n, sdelaite vybor: ');
read(s);
if (s='y') or (s='Y') then
begin
write('vvedite na4al''nuju skorost'' Vo:');
readln(v0);
write('vvedite dlinnu niti mayatnika L: ');
readln(l);
write('vvedite kone4noe vremya Tkon (v sekundah): ');
readln(Tkon);
write('vvedite koli4estvo razbienei po vremeni n: ');
readln(n);
end;
if (s='n') or(s='N') then break
until (s='n') or (s='N');
end;
procedure zapis_parametrov(v0,l,Tkon:real;n:integer);
var z:integer;
s:char;
begin
clrscr;
{$I-}
assign(dan,'dannye.dan');
rewrite(dan);
z:=ioresult;
{I+}
if z<>0 then
begin
writeln('oshibka faila ''dannye.dan'' No:',z);
readkey;
Halt(1);
end;
writeln(dan,'na4al''nymi dannymi yavlyautsa:');
writeln(dan,' Vo L Tkon n');
write(dan,v0:10:3);
write(dan,l:10:3);
write(dan,Tkon:10:3);
write(dan,n:10);
close(dan);
end;
procedure Max_Min(var MaxV,MinV,maxS,minS:real);
var i:integer;
S,V,dt,t:real;
begin
v:=v0;s:=0; maxS:=s;minS:=s;maxV:=v;minV:=v;
dt:=Tkon/n;i:=1;t:=0;
for i:=2 to n+1 do
begin
t:=(i-1)*dt;
v:=v-dt*9.8*sin(s/l);
s:=s+dt*v;
if maxS<s then maxS:=s;
if minS>s then minS:=s;
if maxV<v then maxV:=v;
if minV>v then minV:=v;
end;
end;
procedure osi_koordinat(t,maxy,miny:real);
var i:integer;
dt,dy,x:real;
s:string;
begin
dt:=t/10;
dy:=abs(maxy-miny)/10;
setlinestyle(0,1,1);
line(100,20,100,320);
line(100,320,600,320);
for i:=0 to 10 do
begin
line(99,20+30*i,101,20+30*i);
x:=maxy-i*dy;
str(x:4:4,s);
moveTo(40,15+30*i);
outText(s);
line(100+50*i,319,100+50*i,321);
x:=0+i*dt;
str(x:4:3,s);
outtextXY(90+50*i,324,s);
end;
for I:=1 to 10 do
begin;
setLineStyle(1,1,1);
setColor(8);
line(103,20+30*(i-1), 600,20+30*(i-1));
line(100+50*i,318,100+50*i,20);
setLineStyle(0,1,1);
setColor(15);
end;
end;
procedure MyGraphInit;
begin
GraphDriver:=detect;
initGraph(graphdriver,GraphMode,'d:\bp\bgi');
ErrorCode:=graphresult;
if Errorcode<>grOk then
begin
writeln('proizoshla oshibka grafiki: ',grapherrormsg(errorCode));
writeln('rabota programmy prervana');
readln;
Halt(1);
end;
end;
procedure Graph_V;
var i,x,y:integer;
S,V,dt,t:real;
zn1:string;
begin
setcolor(6);
v:=v0;s:=0;
t:=0;
dt:=Tkon/n;
moveTo(round(100+t*500/Tkon),round( 320-(V-minV)*300/(maxV-minV) ));
for i:=2 to n+1 do
begin
t:=(i-1)*dt;
v:=v-dt*9.8*sin(s/l);
s:=s+dt*v;
str(v:4:4,zn1);
if v=maxV then begin x:=getX; y:=getY;
zn1:='maxV='+zn1;
outTextXY(100,380,zn1);moveTo(x,y);
end;
if v=minV then begin x:=getX; y:=getY;
zn1:='minV='+zn1;
outTextXY(100,400,zn1);moveTo(x,y);
end;
lineTo(round(100+t*500/Tkon),round( 320-(V-minV)*300/(maxV-minV) ));
end;
setcolor(15);outTextXY(100,420,'graphik zavisimosti V(t)')
end;
procedure Graph_S;
var i,x,y:integer;
S,V,dt,t:real;
zn1:string;
begin setcolor(6);
v:=v0;s:=0;
t:=0;
dt:=Tkon/n;
moveTo(round(100+t*500/Tkon),round( 320-(s-mins)*300/(maxS-minS) ));
for i:=2 to n+1 do
begin
t:=(i-1)*dt;
v:=v-dt*9.8*sin(s/l);
s:=s+dt*v;
str(S:4:4,zn1);
if s=maxS then begin x:=getX; y:=getY;
zn1:='maxS='+zn1;
outTextXY(100,380,zn1);moveTo(x,y);
end;
if S=minS then begin x:=getX; y:=getY;
zn1:='minS='+zn1;
outTextXY(100,400,zn1);moveTo(x,y);
end;
lineTo(round(100+t*500/Tkon),round( 320-(S-minS)*300/(maxS-minS) ));
end;setcolor(15);
outTextXY(100,420,'graphik zavisimosti S(t)')
end;
procedure Zapis_rez;
var i,z:integer;
S,V,dt,t:real;
begin
clrscr;
{$I-}
assign(rez,'rezultat.dan');
rewrite(rez);
z:=ioresult;
{I+}
if z<>0 then
begin
writeln('oshibka faila ''rezultat.dan'' No:',z);
readkey;
Halt(1);
end;
writeln(rez,'_________________________________________');
writeln(rez,'| i t V S|');
writeln(rez,'`---------------------------------------''');
v:=v0;s:=0;
dt:=Tkon/n;i:=1;t:=0;
if v=maxV then writeln(rez,i:4,t:12:3,v:12:5,s:12:7,'====== maxV') else
if v=minV then writeln(rez,i:4,t:12:3,v:12:5,s:12:7,'====== minV') else
if s=maxS then writeln(rez,i:4,t:12:3,v:12:5,s:12:7,'====== maxS') else
if s=minS then writeln(rez,i:4,t:12:3,v:12:5,s:12:7,'====== minS') else
writeln(rez,i:4,t:12:3,v:12:5,s:12:7);
for i:=2 to n+1 do
begin
t:=(i-1)*dt;s:=s+dt*v;
v:=v-dt*9.8*sin(s/l);
if v=maxV then writeln(rez,i:4,t:12:3,v:12:5,s:12:7,'====== maxV') else
if v=minV then writeln(rez,i:4,t:12:3,v:12:5,s:12:7,'====== minV') else
if s=maxS then writeln(rez,i:4,t:12:3,v:12:5,s:12:7,'====== maxS') else
if s=minS then writeln(rez,i:4,t:12:3,v:12:5,s:12:7,'====== minS') else
writeln(rez,i:4,t:12:3,v:12:5,s:12:7);
end;
close(rez);
end;
procedure vybor;
var s:char;
begin
repeat
RESTORECRTmODE;
clrscr;
writeln('1-ishodnue dannye');
writeln('2-graphik V(t)');
writeln('3-grafik S(t)');
writeln('9-EXIT');
writeln('sdelaite vybor nazhatiem');
writeln('sootvetstvyuschei knopki');
writeln;
writeln('rezultat vy4islenei sohranyaetsya v faile ''rezultat.dan'' ');
read(s);
clrscr;
begin
if s='1' then
begin
schityvanie(v0,l,Tkon,n);
vvod_parametrov(v0,l,Tkon,n);
zapis_parametrov(v0,l,Tkon,n);
Max_Min(MaxV,MinV,maxS,minS);
end;
if s='2' then
begin
myGraphInit;
getgraphmode;
ClearDevice;
osi_koordinat(Tkon,maxV,minV);
graph_V;readkey;
end;
if s='3' then
begin
myGraphInit;
getgraphmode;
ClearDevice;
osi_koordinat(Tkon,maxS,minS);
graph_S;readkey;
end;
end;
until s='9';
zapis_rez;
end;
begin
schityvanie(v0,l,Tkon,n);
Max_Min(MaxV,MinV,maxS,minS);
vybor;
closegraph;
end.
_________________________________________
| i t V S|
`---------------------------------------'
1 0.000 0.05000 0.0000000====== maxV
2 0.045 0.04901 0.0022500
3 0.090 0.04704 0.0044553
4 0.135 0.04414 0.0065723
5 0.180 0.04037 0.0085588
6 0.225 0.03579 0.0103754
7 0.270 0.03051 0.0119862
8 0.315 0.02462 0.0133591
9 0.360 0.01824 0.0144669
10 0.405 0.01150 0.0152876
11 0.450 0.00453 0.0158050
12 0.495 -0.00253 0.0160087====== maxS
13 0.540 -0.00954 0.0158947
14 0.585 -0.01636 0.0154653
15 0.630 -0.02286 0.0147290
16 0.675 -0.02890 0.0137004
17 0.720 -0.03437 0.0124000
18 0.765 -0.03915 0.0108535
19 0.810 -0.04316 0.0090916
20 0.855 -0.04632 0.0071492
21 0.900 -0.04855 0.0050650
22 0.945 -0.04982 0.0028803
23 0.990 -0.05010 0.0006384====== minV
24 1.035 -0.04939 -0.0016161
25 1.080 -0.04770 -0.0038386
26 1.125 -0.04506 -0.0059849
27 1.170 -0.04152 -0.0080124
28 1.215 -0.03717 -0.0098809
29 1.260 -0.03207 -0.0115534
30 1.305 -0.02634 -0.0129965
31 1.350 -0.02009 -0.0141818
32 1.395 -0.01343 -0.0150856
33 1.440 -0.00651 -0.0156901
34 1.485 0.00053 -0.0159832====== minS
35 1.530 0.00757 -0.0159591
36 1.575 0.01446 -0.0156184
37 1.620 0.02106 -0.0149677
38 1.665 0.02724 -0.0140200
39 1.710 0.03288 -0.0127941
40 1.755 0.03787 -0.0113142
41 1.800 0.04211 -0.0096099
В результате работы был исследован характер движения математического маятника в идеальных условиях, то есть без учёта сил сопротивления. В ходе исследования выяснилось, что если ничего не препятствует движению маятника, он может колебаться бесконечно, поддерживая постоянную скорость и амплитуду, наблюдаются гармонические колебания. Графики зависимости S(t) и V(t) изображают идеальные синусоиду и косинусоиду.
При данной длине нити маятника равной l = 1 м, начальной скорости, сообщённой маятнику, равной V0 = 0,05 м/с, в промежутке времени tкон = 1,8 c, были получены следующие результаты:
В абсолютном значении наибольшая величина скорости V = 0,05010 м/с зафиксировалась при t = 0.990 c, это скорость в момент, когда шарик проходит перпендикулярно оси X.
Минимальное значение скорости V = 0,00053 м/с зафиксирована при t = 1,485 с.
Решим поставленную задачу методом Эйлера, используя формулы:
, , , ,
, , , для i = 2, 3, …, n + 1.
Получим таблично заданную зависимость S(t).
l
φ
φ
S
0
EMBED Equation.3
EMBED Equation.3
x
y
Выход
n
Tkon
V0
S
oshibka faila
нет
да
z<>0
z = ioresult
V0, L, Tkon, n
Вход
vvedite na4al''nuju skorost'' Vo
нет
S
Da- y, Net- n, sdelaite vybor:
Vi hotite izmenit'' eti dannye?
koli4estvo razbienei po vremeni n:
kone4noe vremya Tkon:
dlinna niti mayatnika L:
na4al''naya skorost'' Vo:
S
ishodnymi dannumi yavlyautsa:
V0, L, Tkon, n
Вход
да
S=y, или S=Y
vvedite dlinnu niti mayatnika L:
vvedite kone4noe vremya Tkon
vvedite koli4estvo razbienei po vremeni n:
нет
да
S=n, или S=N
break
Выход
S
S=n, или S=N
oshibka faila
нет
да
z<>0
z = ioresult
V0, l, Tkon, n
Вход
na4al''nymi dannymi yavlyautsa:
Vo, L, Tkon, n
Vo
L
Tkon
n
Выход
V = V0
MaxV, MinV, MaxS, MinS
Вход
S = 0
MaxS = S
MinS = S
MaxV = V
MinV = V
dt = Tkon/n
i = 1
t = 0
i = 2, n+1
t = (i - 1)*dt
V = V dt*9,8*sin(S/L)
S = S + dt*V
MaxS = S
нет
да
MaxS < S
MinS = S
нет
да
MinS > S
MaxV = V
нет
да
MaxV < V
MinV = V
нет
да
MinV > V
Выход
dt = t/10
T, maxy, miny
Вход
dy = |(maxy miny)|/10
setlinestyle
line
line
i = 0, 10
line
x = maxy i*dy
str
moveTo
outText
line
x = 0 + i*dt
str
outTextXY
i = 1, 10
setlinestyle
setColor
line
line
setlinestyle
setColor
Выход
Вход
GraphDriver = detekt
InitGraph
ErrorCode = graphresult
proizoshla oshibka grafiki:
нет
да
ErrorCode<>0
rabota programmy prervana
Выход
Вход
setColor
V = V0
S = 0
t = 0
dt = Tkon/n
moveTo
i = 2, n + 1
t = (i 1)*dt
V = V dt*9,8*sin(S/l)
x = getx
str
V = maxV
y = gety
S = S + dt*V
zn1=maxV=+zn1
outTextXY
moveTo
moveTo
outTextXY
zn1=minV=+zn1
y = gety
V = minV
x = getx
нет
lineTo
да
да
нет
setColor
outTextXY
Выход
Выход
outTextXY
setColor
нет
да
да
нет
lineTo
moveTo
outTextXY
zn1=minS=+zn1
y = gety
S = minS
x = getx
moveTo
outTextXY
S = S + dt*V
zn1=maxS=+zn1
y = gety
S = maxS
str
x = getx
V = V dt*9,8*sin(S/l)
t = (i 1)*dt
i = 2, n + 1
moveTo
dt = Tkon/n
t = 0
S = 0
V = V0
setColor
Вход
z = ioresult
Вход
oshibka faila
нет
да
z<>0
i, t, V, S
V = V0
S = 0
dt = Tkon/n
i = 1
t = 0
i, t, V, S, maxV
нет
да
V = maxV
i, t, V, S, minV
нет
да
V = minV
i, t, V, S, maxS
нет
да
S = maxS
i, t, V, S, minS
нет
да
S = minS
1-ishodnue dannye
S
Вход
Выход
i, t, V, S, minS
нет
да
S = minS
i, t, V, S, maxS
нет
да
S = maxS
i, t, V, S, minV
нет
да
V = minV
i, t, V, S, maxV
нет
A
A
да
V = maxV
V = V dt*9,8*sin(S/l)
S = S + dt*V
t = (i 1)*dt
i = 2, n+1
2-graphik V(t)
3-grafik S(t)
9-EXIT
sdelaite vybor nazhatiem
sootvetstvyuschei knopki
rezultat vy4islenei sohranyaetsya v faile ''rezultat.dan''
S
schityvanie
нет
да
S = 1
vvod_parametrov
zapis_parametrov
Max_Min
osi_koordinat
ClearDevice
getgraphmode
myGraphInit
нет
да
S = 2
graph_V
Б
Б
graph_S
osi_koordinat
ClearDevice
getgraphmode
myGraphInit
нет
да
S = 3
S
S = 9
zapis_rez
Выход
Начало
schityvanie
Max_Min
vybor
closegraph
Конец
V0, l, Tkon, n
V0, L, Tkon, n
V0, L, Tkon, n
V0, L, Tkon, n
maxV, minV, maxS, minS
Tkon,
maxV, minV
Tkon,
maxS, minS
maxV, minV, maxS, minS