Ангармонические колебания

 

Dim k, l, h, W, W2, lt, ll, v2, vx, t As Single

Dim n As Integer

 

Public Function en(X)  ‘Потенциальная энергия

a = (Sqr(X * X + h * h) - l)

en = k * a * a / 2

End Function

 

Public Function fx(X) ‘ Сила

fx = -k * X * (Sqr(X * X + h * h) - l) / Sqr(X * X + h * h)

End Function

 

Public Function en2(X) ‘Потенциальная энергия

a = (Sqr(X * X + h * h) - ll)

en2 = k / 2 * (2 * a * a + (h + X - lt) * (h + X - lt) + (h - X - lt) * (h - X - lt))

End Function

 

Public Function f2(X)

f2 = -2 * k * X * (Sqr(X * X + h * h) - ll) / Sqr(X * X + h * h) - 2 * k * X

End Function

 

Private Sub Command1_Click()

vx = 0

l = Text1.Text

h = Text2.Text

k = 0.001

X1 = (Label4.Left - Shape2.Left) / 430

W = en(X1)

Timer1.Interval = 5

End Sub

 

Private Sub Command2_Click()

End

End Sub

 

Private Sub Command3_Click()

Timer1.Interval = 0 ‘ Выключение таймера

End Sub

 

Private Sub Timer1_Timer()

X = (Label4.Left - Shape2.Left) / 430

dt = Timer1.Interval

Label4.Left = Label4.Left + (fx(X) * dt * dt / 2 + vx * dt) * 430

Line2.X1 = Label4.Left + Label4.Width / 2

vx = fx(X) * dt + vx

xx1 = (Label4.Left - Shape2.Left) / 430

w1 = en(xx1) + vx * vx / 2

xx11 = Sqr(W / w1)

vx = vx * xx11

xx1 = xx1 * xx11

If Sgn(Y) <> Sgn(Y1) Then

n = n + 1

Text4.Text = n \ 2

If n \ 2 = n / 2 Then Text3.Text = t

End If

End Sub