
- •Пассивный участок траектории ла.
- •Глава 1
- •1.Разработка Компьютерной модели расчета траектории неуправляемого летательного аппарата.
- •1.1 Постановка задач. Анализ и представление исходных данных.
- •1.2. Модель динамики неуправляемого ла.
- •1.2.1. Движение ла по направляющим.
- •1.2.2. Активный участок полета ла.
- •1.2.3.Пассивный участок полета ла.
- •1.3. Алгоритмы численного интегрирования на основе методов Эйлера и Рунге-Кутта.
- •1.4. Решение контрольной задачи для одного шага интегрирования методами Эйлера и Рунге-Кутта (Проведение расчетов без пк).
- •1.4.1. Начальные условия.
- •1.4.2. Расчет системы уравнений методом Эйлера (1 шаг).
- •1. Нахождение коэффициентов к1 для каждого уравнения.
- •2. Результаты одного шага интегрирования по методу Эйлера:
- •1.4.3. Расчет системы уравнений методом Рунге-Кутта (1 шаг).
- •1. Нахождение коэффициентов к1 для каждого уравнения.
- •1.4.4 Сравнение решений тестового примера на 1 шаг, полученных вручную (п.1.4.1 и 1.4.2) и с использованием программного комплекса
- •1.5. Результаты расчета траекторных параметров неуправляемого ла.
- •1.5.1. Движение по направляющим.
- •1.5.2. Активный участок траектории ла
- •1.5.3. Пассивный участок траектории ла.
- •1.5.4. Результаты расчета траекторных параметров неуправляемого ла для характерных точек траектории.
- •Примечание: Результаты расчета получены при помощи программного комплекса
- •1.6. Расчет траектории пассивного участка полета ла с использованием параболической теории.
Примечание: Результаты расчета получены при помощи программного комплекса
1.6. Расчет траектории пассивного участка полета ла с использованием параболической теории.
Параболическая теория изучает движение тяжелой материальной точки в пустоте в стационарном однородном параллельном поле земного тяготения. ЕЕ применяют для ориентировочного расчета траектории ЛА, имеющих малую скорость полета, и для расчета траектории ЛА на больших высотах, где сила сопротивления ничтожна мала.
Основные формулы параболической теории:
-
1
2
3.
4
Здесь t0=0, y0=yc=228,664 м, x0=xc=270,014 м,
-параметры
конца активного участка рассчитанные
по данным п 1.5.2
Ниже производится расчет пассивного участка траектории ЛА с использованием параболической теории для характерных точек параболической траектории.
Для вершины траектории (точка D) время вычисляется по формуле:
Подставляя tD в формулы 3 и 4, получим X(tD)=6626.495 м Y(tD)=2804.056 м
Для точки Е (конца траектории) имеем Y(tE)=0. Тогда
Результаты расчетов представлены в сравнении с расчетами реальной траектории в таблице 1.8.
Таблица 1.8
Точка |
Координата Х, м (числ/ П.Т.) |
Координата Y, м (числ/ П.Т.) |
C |
270,014/270,014 |
228,664/228,664 |
D |
5520,904/6626.495 |
2475,650/2804.056 |
E |
10534,668/19615.69 |
0/0 |
Приложение 1.
Графики
V(t) методами численного интегрирования и по параболической теории.
θ(t) методами численного интегрирования и по параболической теории.
y(x) (Метод Эйлера и параболическая теория).
y(x) (Метод Рунге-Кутта и параболическая теория).
Приложение 2.
Текст программы, разработанной для интегрирования методами Эйлера и Рунге-Кутта.
(Программа выполнена на Visual Basic 6.0 Professional Edition)
Option Base 1
Const r0 = 1.23
Dim r As Double
Dim y As Double
Dim x As Double
Dim V As Double
Dim Q As Double
Dim Xx As Double
Dim m As Double
Dim Yg As Double
Dim Xg As Double
Dim Cx As Double
Dim Vg As Double
Dim S As Double
Dim Mn As Double
Dim Rashod As Double
Dim Tg As Double
Dim Rs As Double
Dim T As Double
Dim h As Double
Dim Qg As Double
Dim i As Double
Dim K(4, 4) As Double
Dim str As String
Dim j As Double
Private Sub Command1_Click()
lbl.ForeColor = &HFF&
lbl.Caption = "идет расчет"
DoEvents
Yg = CDbl(Text4.Text) * Sin(CDbl(Text3.Text))
Xg = CDbl(Text4.Text) * Cos(CDbl(Text3.Text))
Cx = CDbl(Text5.Text)
Vg = CDbl(Text1.Text)
S = CDbl(Text6.Text)
Mn = CDbl(Text17.Text)
Rashod = CDbl(Text18.Text)
Tg = CDbl(Text2.Text)
Rs = CDbl(Text19.Text)
T = CDbl(Text16.Text)
h = CDbl(Text7.Text)
Qg = CDbl(Text3.Text)
Text33.Text = ""
Text34.Text = ""
Text36.Text = ""
Text40.Text = ""
Text38.Text = ""
'----------------------------------
'Активный участок траектории полета
'Эйлер
x = Xg
y = Yg
V = Vg
Q = Qg
j = Tg
For i = Tg To T Step h
r = r0 * Exp(-y / 7800)
Xx = 0.5 * Cx * r * S * V ^ 2
m = Mn - Rashod * i
V = V + h * (Rs - 9.81 * m * Sin(Q) - Xx) / m
Q = Q - h * 9.81 * Cos(Q) / V
x = x + h * V * Cos(Q)
y = y + h * V * Sin(Q)
If Option1.Value = True And Round(i, 2) = Round(j, 2) Then
j = j + 1
Text33.Text = Text33.Text & Round(i, 2) & vbCrLf
Text34.Text = Text34.Text & Round(V, 1) & vbCrLf
Text36.Text = Text36.Text & Round(Q, 3) & vbCrLf
Text40.Text = Text40.Text & Round(x, 0) & vbCrLf
Text38.Text = Text38.Text & Round(y, 0) & vbCrLf
End If
If i = Tg Then
str = "Значения коэфициентов" & vbCrLf & "на первом шаге Э" & vbCrLf
str = str & "V = " & Round(V, CLng(Text21.Text)) & vbCrLf
str = str & "Q = " & Round(Q, CLng(Text21.Text)) & vbCrLf
str = str & "X = " & Round(x, CLng(Text21.Text)) & vbCrLf
str = str & "Y = " & Round(y, CLng(Text21.Text)) & vbCrLf & vbCrLf
End If
Next i
Text8.Text = Round(V, CLng(Text21.Text))
Text9.Text = Round(Q, CLng(Text21.Text))
Text10.Text = Round(x, CLng(Text21.Text))
Text11.Text = Round(y, CLng(Text21.Text))
'-----------------------------
'Рунге-Кутт
x = Xg
y = Yg
V = Vg
Q = Qg
j = Tg
For i = Tg To T Step h
r = r0 * Exp(-y / 7800)
Xx = 0.5 * Cx * r * S * V ^ 2
m = Mn - Rashod * i
K(1, 1) = h * (Rs - 9.81 * m * Sin(Q) - Xx) / m
K(1, 2) = -9.81 * h * Cos(Q) / V
K(1, 3) = h * V * Cos(Q)
K(1, 4) = h * V * Sin(Q)
r = r0 * Exp(-(y + 0.5 * K(1, 4)) / 7800)
Xx = 0.5 * Cx * r * S * (V + 0.5 * K(1, 1)) ^ 2
m = Mn - Rashod * (i + h / 2)
K(2, 1) = h * (Rs - 9.81 * m * Sin(Q + K(1, 2) / 2) - Xx) / m
K(2, 2) = -9.81 * h * Cos(Q + K(1, 2) / 2) / (V + K(1, 1) / 2)
K(2, 3) = h * (V + K(1, 1) / 2) * Cos(Q + K(1, 2) / 2)
K(2, 4) = h * (V + K(1, 1) / 2) * Sin(Q + K(1, 2) / 2)
r = r0 * Exp(-(y + 0.5 * K(2, 4)) / 7800)
Xx = 0.5 * Cx * r * S * (V + 0.5 * K(2, 1)) ^ 2
m = Mn - Rashod * (i + h / 2)
K(3, 1) = h * (Rs - 9.81 * m * Sin(Q + K(2, 2) / 2) - Xx) / m
K(3, 2) = -9.81 * h * Cos(Q + K(2, 2) / 2) / (V + K(2, 1) / 2)
K(3, 3) = h * (V + K(2, 1) / 2) * Cos(Q + K(2, 2) / 2)
K(3, 4) = h * (V + K(2, 1) / 2) * Sin(Q + K(2, 2) / 2)
r = r0 * Exp(-(y + K(3, 4)) / 7800)
Xx = 0.5 * Cx * r * S * (V + K(3, 1)) ^ 2
m = Mn - Rashod * (i + h)
K(4, 1) = h * (Rs - 9.81 * m * Sin(Q + K(3, 2)) - Xx) / m
K(4, 2) = -9.81 * h * Cos(Q + K(3, 2)) / (V + K(3, 1))
K(4, 3) = h * (V + K(3, 1)) * Cos(Q + K(3, 2))
K(4, 4) = h * (V + K(3, 1)) * Sin(Q + K(3, 2))
V = V + (K(1, 1) + K(4, 1) + 2 * (K(2, 1) + K(3, 1))) / 6
Q = Q + (K(1, 2) + K(4, 2) + 2 * (K(2, 2) + K(3, 2))) / 6
x = x + (K(1, 3) + K(4, 3) + 2 * (K(2, 3) + K(3, 3))) / 6
y = y + (K(1, 4) + K(4, 4) + 2 * (K(2, 4) + K(3, 4))) / 6
If Option2.Value = True And Round(i, 2) = Round(j, 2) Then
j = j + 1
Text33.Text = Text33.Text & Round(i, 2) & vbCrLf
Text34.Text = Text34.Text & Round(V, 1) & vbCrLf
Text36.Text = Text36.Text & Round(Q, 3) & vbCrLf
Text40.Text = Text40.Text & Round(x, 0) & vbCrLf
Text38.Text = Text38.Text & Round(y, 0) & vbCrLf
End If
If i = Tg Then
str = str & "Значения коэффициентов" & vbCrLf & "на первом шаге Р-К" & vbCrLf
str = str & "K(1,1) = " & Round(K(1, 1), CLng(Text21.Text)) & vbCrLf
str = str & "K(1,2) = " & Round(K(1, 2), CLng(Text21.Text)) & vbCrLf
str = str & "K(1,3) = " & Round(K(1, 3), CLng(Text21.Text)) & vbCrLf
str = str & "K(1,4) = " & Round(K(1, 4), CLng(Text21.Text)) & vbCrLf
str = str & "K(2,1) = " & Round(K(2, 1), CLng(Text21.Text)) & vbCrLf
str = str & "K(2,2) = " & Round(K(2, 2), CLng(Text21.Text)) & vbCrLf
str = str & "K(2,3) = " & Round(K(2, 3), CLng(Text21.Text)) & vbCrLf
str = str & "K(2,4) = " & Round(K(2, 4), CLng(Text21.Text)) & vbCrLf
str = str & "K(3,1) = " & Round(K(3, 1), CLng(Text21.Text)) & vbCrLf
str = str & "K(3,2) = " & Round(K(3, 2), CLng(Text21.Text)) & vbCrLf
str = str & "K(3,3) = " & Round(K(3, 3), CLng(Text21.Text)) & vbCrLf
str = str & "K(3,4) = " & Round(K(3, 4), CLng(Text21.Text)) & vbCrLf
str = str & "K(4,1) = " & Round(K(4, 1), CLng(Text21.Text)) & vbCrLf
str = str & "K(4,2) = " & Round(K(4, 2), CLng(Text21.Text)) & vbCrLf
str = str & "K(4,3) = " & Round(K(4, 3), CLng(Text21.Text)) & vbCrLf
str = str & "K(4,4) = " & Round(K(4, 4), CLng(Text21.Text)) & vbCrLf
str = str & "V = " & Round(V, CLng(Text21.Text)) & vbCrLf
str = str & "Q = " & Round(Q, CLng(Text21.Text)) & vbCrLf
str = str & "X = " & Round(x, CLng(Text21.Text)) & vbCrLf
str = str & "Y = " & Round(y, CLng(Text21.Text))
Text20.Text = str
End If
Next i
Text12.Text = Round(V, CLng(Text21.Text))
Text13.Text = Round(Q, CLng(Text21.Text))
Text14.Text = Round(x, CLng(Text21.Text))
Text15.Text = Round(y, CLng(Text21.Text))
'----------------------------------
'Пассивный участок траектории полета
'Эйлер
V = CDbl(Text8.Text)
Q = CDbl(Text9.Text)
x = CDbl(Text10.Text)
y = CDbl(Text11.Text)
i = T
m = Mn - Rashod * T
j = T
Do While y > 0
r = r0 * Exp(-y / 7800)
Xx = 0.5 * Cx * r * S * V ^ 2
V = V - h * (9.81 * m * Sin(Q) + Xx) / m
Q = Q - h * 9.81 * Cos(Q) / V
x = x + h * V * Cos(Q)
y = y + h * V * Sin(Q)
If Option1.Value = True And Round(i, 2) = Round(j, 2) Then
j = j + 1
Text33.Text = Text33.Text & Round(i, 2) & vbCrLf
Text34.Text = Text34.Text & Round(V, 1) & vbCrLf
Text36.Text = Text36.Text & Round(Q, 3) & vbCrLf
Text40.Text = Text40.Text & Round(x, 0) & vbCrLf
Text38.Text = Text38.Text & Round(y, 0) & vbCrLf
End If
If Abs(Q) < 0.001 Then
str = "Значения параметров" & vbCrLf & "в наивысшей точке траектории" & vbCrLf & "методом Эйлера" & vbCrLf
str = str & "t = " & Round(i, 2) & vbCrLf
str = str & "V = " & Round(V, CLng(Text21.Text)) & vbCrLf
str = str & "Q = 0" & vbCrLf
str = str & "X = " & Round(x, CLng(Text21.Text)) & vbCrLf
str = str & "Y = " & Round(y, CLng(Text21.Text)) & vbCrLf & vbCrLf
End If
i = i + h
Loop
Text25.Text = Round(V, CLng(Text21.Text))
Text24.Text = Round(Q, CLng(Text21.Text))
Text23.Text = Round(x, CLng(Text21.Text))
Text22.Text = Round(y, CLng(Text21.Text))
Text31.Text = Round(i, 2)
'-----------------------------
'Рунге-Кутт
V = CDbl(Text12.Text)
Q = CDbl(Text13.Text)
x = CDbl(Text14.Text)
y = CDbl(Text15.Text)
i = T
j = T
m = Mn - Rashod * T
Do While y > 0
r = r0 * Exp(-y / 7800)
Xx = 0.5 * Cx * r * S * V ^ 2
K(1, 1) = h * (-9.81 * m * Sin(Q) - Xx) / m
K(1, 2) = -9.81 * h * Cos(Q) / V
K(1, 3) = h * V * Cos(Q)
K(1, 4) = h * V * Sin(Q)
r = r0 * Exp(-(y + 0.5 * K(1, 4)) / 7800)
Xx = 0.5 * Cx * r * S * (V + 0.5 * K(1, 1)) ^ 2
K(2, 1) = h * (-9.81 * m * Sin(Q + K(1, 2) / 2) - Xx) / m
K(2, 2) = -9.81 * h * Cos(Q + K(1, 2) / 2) / (V + K(1, 1) / 2)
K(2, 3) = h * (V + K(1, 1) / 2) * Cos(Q + K(1, 2) / 2)
K(2, 4) = h * (V + K(1, 1) / 2) * Sin(Q + K(1, 2) / 2)
r = r0 * Exp(-(y + 0.5 * K(2, 4)) / 7800)
Xx = 0.5 * Cx * r * S * (V + 0.5 * K(2, 1)) ^ 2
K(3, 1) = h * (-9.81 * m * Sin(Q + K(2, 2) / 2) - Xx) / m
K(3, 2) = -9.81 * h * Cos(Q + K(2, 2) / 2) / (V + K(2, 1) / 2)
K(3, 3) = h * (V + K(2, 1) / 2) * Cos(Q + K(2, 2) / 2)
K(3, 4) = h * (V + K(2, 1) / 2) * Sin(Q + K(2, 2) / 2)
r = r0 * Exp(-(y + K(3, 4)) / 7800)
Xx = 0.5 * Cx * r * S * (V + K(3, 1)) ^ 2
K(4, 1) = h * (-9.81 * m * Sin(Q + K(3, 2)) - Xx) / m
K(4, 2) = -9.81 * h * Cos(Q + K(3, 2)) / (V + K(3, 1))
K(4, 3) = h * (V + K(3, 1)) * Cos(Q + K(3, 2))
K(4, 4) = h * (V + K(3, 1)) * Sin(Q + K(3, 2))
V = V + (K(1, 1) + K(4, 1) + 2 * (K(2, 1) + K(3, 1))) / 6
Q = Q + (K(1, 2) + K(4, 2) + 2 * (K(2, 2) + K(3, 2))) / 6
x = x + (K(1, 3) + K(4, 3) + 2 * (K(2, 3) + K(3, 3))) / 6
y = y + (K(1, 4) + K(4, 4) + 2 * (K(2, 4) + K(3, 4))) / 6
If Option2.Value = True And Round(i, 2) = Round(j, 2) Then
j = j + 1
Text33.Text = Text33.Text & Round(i, 2) & vbCrLf
Text34.Text = Text34.Text & Round(V, 1) & vbCrLf
Text36.Text = Text36.Text & Round(Q, 3) & vbCrLf
Text40.Text = Text40.Text & Round(x, 0) & vbCrLf
Text38.Text = Text38.Text & Round(y, 0) & vbCrLf
End If
If Abs(Q) < 0.001 Then
str = str & "Значения параметров" & vbCrLf & "в наивысшей точке траектории" & vbCrLf & "методом Рунге-Кутта" & vbCrLf
str = str & "t = " & Round(i, 2) & vbCrLf
str = str & "V = " & Round(V, CLng(Text21.Text)) & vbCrLf
str = str & "Q = 0" & vbCrLf
str = str & "X = " & Round(x, CLng(Text21.Text)) & vbCrLf
str = str & "Y = " & Round(y, CLng(Text21.Text))
Text30.Text = str
End If
i = i + h
Loop
Text29.Text = Round(V, CLng(Text21.Text))
Text28.Text = Round(Q, CLng(Text21.Text))
Text27.Text = Round(x, CLng(Text21.Text))
Text26.Text = Round(y, CLng(Text21.Text))
Text32.Text = Round(i, 2)
lbl.ForeColor = &HC000&
lbl.Caption = "Расчет выполнен"
End Sub
Private Sub Command2_Click()
End
End Sub
Список литературы
1. Бахвалов Н.С. Численные методы. т.1., М.: Наука, 1975.
2. Волков Е.А. Численные методы. М.: Наука, 1982
3. Шалыгин А.С. и др. Автоматизация расчета траекторий ЛА: Учебн. пособие. – Л., 1990.
4. http://a5.bstu.spb.su