Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.abitu.ru/en2002/closed/viewwork.html?work=87
Дата изменения: Fri May 5 15:26:19 2006
Дата индексирования: Tue Oct 2 02:31:14 2012
Кодировка: koi8-r

Поисковые слова: carina


Смешанный маятник.


Автор: Снигирёв Степан Александрович


11 В класс, гимназия высшей категории ?86.


г. Нижний Тагил Свердловской обл., e-mail: snigirev@inbox.ru


Руководитель: Грегер Сергей Эдуардович.


Теория

На данный момент в физике существует множество систем, описываемых,
например, с помощью не решаемых дифуров или сложных систем уравнений,
изменение параметров которых с течением времени трудно описать одним
уравнением в явном виде (x(t)=f(t)). Одной из таких систем является
смешанный маятник, состоящий из резинки (или пружины) и груза. Его
отклонение вызывает как бы одновременное колебание пружинного и
математического маятника с изменяющейся со временем длиной (и,
соответственно, периодом). Современные возможности ПК позволяют
промоделировать этот процесс и решить для него основную задачу механики -
определение координат тела в любой момент времени.
Именно эту задачу и пытается решить автор. В качестве примера
рассматривается грузик на резинке, причём учитывается свойство резинки
проявлять силу упругости только при растяжении (при сжатии резинка
провисает). В школьном курсе физики при изучении колебаний делается ряд
упрощений, облегчающих математические вычисления. Например, рассматриваются
малые колебания идеального (без затухания) маятника. В данной работе автор
не видит необходимости в этих упрощениях.

Математическая модель и алгоритм решения задачи

Записав второй закон Ньютона (в векторном виде и в проекциях на оси
координат) в данный момент времени, kx+mg=ma, находим проекции скорости и
координаты в следующий момент.
Для этого найдём угол (:
Sin(()= (x(t)-xo)/ ((x(t)-xo)2+( y(t)-yo)2
Cos(() = (y(t)-yo) / ((x(t)-xo)2 + (y(t)-yo)2
Таким образом, находим проекции сил.
Fy = - k. ?l. cos(() + m.g
Fx = k. ?l.sin(()
В этих формулах ?l вычисляется по теореме Пифагора: (Lo+?l)2 =
x(t)2+y(t)2
[pic]
Далее:
(x(t+dt) = (x(t) + (Fx / m) *dt
(y(t+dt) = (y(t) + (Fy / m)*dt
x(t+dt) = x(t) + (x(t+dt)*dt + Fx*dt2/ (2 * m)
y(t+dt) = y(t) + (y(t+dt)*dt + Fy*dt2 / (2 * m)
Таким образом, мы находим координаты тела в следующий момент времени.
В общем виде:
1. Вводим начальные данные.
2. По координатам тела в данный момент времени (x(t),y(t)), находим
направление и величину сил, действующих на него (mg и kx), а также
их проекции по осям.
3. Из формул кинематики находим скорость (модуль и направление) и
координаты тела в следующий момент времени (v(t+dt), x(t+dt),
y(t+dt), dt(0).
4. Перемещаем тело в новые координаты.
5. Возвращаемся к пункту 2.
Алгоритм решения данной задачи для Visual Basic 6.0 представлен ниже.

Решение задачи на Visual Basic 6.0

Ниже изложено решение данной задачи на VB6.0. На рисунке представлен
внешний вид программы, приведённой в действие. Чтобы запустить программу
необходимо отклонить груз от положения равновесия (вверх, вниз, вправо или
влево - без разницы), отпустить и нажать кнопку. Сбоку на картинке
изобразится траектория движения данного маятника, причём красной линией
отобразится часть траектории, где резинка провисает. На жесткость и массу
сделаны ограничения т. к. при других значениях этих параметров графическое
изображение и наблюдение за маятником неудобны (+ защита "от дурака")
Поскольку интервал времени между двумя ближайшими расчетными точками в
300 раз меньше среднего периода колебаний ((300мс), то можно утверждать
о достаточно высокой степени совпадения вычисленной и реальной кривых.
[pic]
Dim dx, g, sx, sy, xi, yi, vy, vx, xx, k, m, cosa, sina, Fy, Fx, i As
Integer
Dim Ind As Boolean
'Определяем переменные
Private Sub Form_Load()
m = 3
k = 1
g = 9.8
'ускорение свободного падения
End Sub
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X
As Single, Y As Single)
If X < Shape1.Left + Shape1.Width And X > Shape1.Left - Shape1.Width
Then
If Y < Shape1.Top + Shape1.Height And Y > Shape1.Top - Shape1.Height
Then
Ind = True
'Если ткнули на грузик, то его можно перетаскивать.
End If
End If
End Sub
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X
As Single, Y As Single)
If Ind = True Then
Shape1.Left = X - 50
Shape1.Top = Y - 50
Line1.X2 = Shape1.Left + 50
Line1.Y2 = Shape1.Top + 50
End If
'перетаскиваем грузик за мышью
End Sub
Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As
Single, Y As Single)
Ind = False
'Отпустили - перетаскивать грузик нельзя
End Sub
Private Sub Check1_DragDrop(Source As Control, X As Single, Y As
Single)
Check1.Value = Abs(Check1.Value + 1)
'Включаем / выключаем периодическую очистку картинки с траекторией
End Sub
Private Sub HScroll1_Change()
k = HScroll1.Value / 2
Label1.Caption = "k=" & k
'Задаём жесткость
End Sub
Private Sub HScroll2_Change()
m = HScroll2.Value / 2
Label3.Caption = "m=" & m
'Задаём массу
End Sub
Private Sub Command1_Click()
'При нажатии кнопки...
xx = m * g * 13 / k
'расчет начальной деформации.
vy = 0
vx = 0
Timer1.Enabled = Abs(Timer1.Enabled + 1)
'Включаем / выключаем таймер.
If Timer1.Enabled = True Then
Command1.Caption = "Stop"
'смена надписи кнопки.
Else
Command1.Caption = "Start"
Picture2.Cls
'Очистка картинки с траекторией
Shape1.Top = 1300
Shape1.Left = 1500
Line1.X2 = 1550
Line1.Y2 = 1350
'помещаем грузик в начало отсчёта
End If
End Sub
Private Sub Timer1_Timer()
' Таймер включается каждую миллисекунду.
i = i + 1
If (i Mod 150 = 0) And (Check1.Value = 1) Then Picture2.Cls
'очистка картинки раз в 150 миллисекунд, если включена очистка экрана
sx = Shape1.Left
sy = Shape1.Top
' записываем координаты перед изменениями
xi = sx
yi = sy
'изменяемые координаты
dx = ((yi ^ 2 + (xi - 1500) ^ 2) ^ 0.5 - 1300 + xx) / 13
' dx - деформация резинки
sina = (Abs(xi - 1500)) / ((xi - 1500) ^ 2 + yi ^ 2) ^ 0.5
cosa = (Abs(yi)) / ((xi - 1500) ^ 2 + yi ^ 2) ^ 0.5
'определили угол отклонения
Fy = -k * dx * cosa + m * g
Fx = k * dx * sina
' проекции сил на оси координат
If xi > 1500 Then Fx = -Fx
'направление сил (права/влево)
If yi ^ 2 + (xi - 1500) ^ 2 < (1300 - xx) ^ 2 Then
Fy = m * g
Fx = 0
'силы при «отрицательной» деформации (резинка - не пружина, при сжатии
провисает)
Line1.BorderColor = &H40&
' цвет провисающей резинки другой
Else
Line1.BorderColor = &H400000
End If
vx = vx + Fx / m
vy = vy + Fy / m
' скорость в след. момент времени.
xi = xi + vx + Fx / (2 * m)
yi = yi + vy + Fy / (2 * m)
'координаты в следующий момент времени
If yi ^ 2 + (xi - 1500) ^ 2 < (1300 - xx) ^ 2 Then
Picture2.Line (xi / 2, yi / 2)-(sx / 2, sy / 2), RGB(255, 0, 100)
Else
Picture2.Line (xi / 2, yi / 2)-(sx / 2, sy / 2), RGB(100, 0, 255)
End If
'изображение траектории на эскизе
Shape1.Left = xi
Shape1.Top = yi
Line1.X1 = 1550
Line1.X2 = Shape1.Left + 50
Line1.Y1 = 0
Line1.Y2 = Shape1.Top + 50
'присвоение грузу новых координат
End Sub
Private Sub Exit_Click()
'Выход при нажатии Exit
Unload Me
End Sub

Результат

Таким образом, при помощи ПК удалось решить основную задачу механики
для довольно сложного процесса - колебаний смешанного маятника, и построить
его траекторию с приличной точностью. При помощи данного алгоритма можно
решить и другие подобные (не только механические) задачи, чем автор и
предполагает заняться далее.