End Function 'Ochibka
'Численное решение уравнений модели "Хищник-Жертва-Пища"
Sub HGP2001()
Dim RM(1 To 17) As Single 'рабочий массив
Dim E As Single: Dim T As Single: Dim NT As Integer: Dim s As String
Dim i As Integer: Dim W As String: Dim p As String: Dim q As Single
Dim j As Integer: Dim m As Integer: Dim n As Integer: Dim v As Integer
Dim NS As Integer: Dim I As Integer: Dim X As Single: Dim Y As Single
Dim Z As Single: I = 0: W = "Модель <Хищник-Жертва-Пища>"
p = "Задайте интервал времени, в котором моделируете процесс"
s = lnputBox(p, W): Т = CSng(s)
р = "Задайте точность решения системы уравнений": s = lnputBox(p, W)
Е = CSng(s): р = "Задайте номер таблицы для результатов прогноза"
s = lnputBox(p, W): NT = Clnt(s)
р = "Выводить данные для графической иллюстрации процесса"
j = MsgBox(p, 4, W)
s = InputВох("Предлагаю вывести на экран каждую n-ю точку", W, 10)
n = Clnt(s)
s = InputВох("Число повторных решений с новым шагом", W, 10)
NS = Clnt(s) : q = 0 : m = 0
For i = 1 To 8:RM(i) = Worksheets(NT).Cells(6 + i, 2).Value: Next i
For i = 1 To 3:RM(i + 8) = Worksheets(NT).Cells(3, i + 1).Value
RM(i +11) = RM(i + 8): RM(i + 14) = 0: Next i
Do While Ochibka(RM) > E
Do While q < T + RM(8)
lfj = 6 Then
v = m / n
If m = v * n Then
For i = 1 To 3
Worksheets(NT).Cells(16 + v, 1 + i).Value = RM(8 + i): Next i
Worksheets(NT).Cells(16 + v, 1).Value = q:End lf:End If 'j=0 'v=m
X = RM(9) + RM(8) * (HGP1(RM(1), RM(2), RM(3), RM(9), RM(10), RM(11)))
Y = RM(10) + RM(8) * (HGP2(RM(6), RM(7), RM(9), RM(10)))
Z= RM(11) + RM(8) * (HGP3(RM(4), RM(5), RM(9), RM(11)))
RM(9) = X: RM(10) = Y: RM(11) = Z:m = m + 1:q = q + RM(8)
If RM(9) < 0 Then
p = "Проверьте правильность задания параметров"
s = lnputBox(p, "Отрицательное число жертв")
GoTo Metka:
End If If RM(10)<0Then
s = lnputBox(p, "Отрицательное количество пищи")
GoTo Metka:End If
If RM(11) < 0 Then
s = lnputBox(p, "Отрицательное количество хищников")
GoTo Metka:End If:Loop 'q<T
For i = 1 To 3:RM(i + 14) = RM(i + 11):RM(i + 11) = RM(i + 8)
RM(i + 8) = Worksheets(NT).Cells(3, 1 + i).Value:Next l:RM(8) = RM(8) / 2
n = n * 2 ‘Количество точек оставляем прежним
р = "Предлагаю вывести на экран каждую n-ю точку"
s = lnputBox(p, W, CStr(n)):n = Clnt(s):l = 1 + 1
If I > NS Then
GoTo Metka:End If
Loop' Ochibka>E
Ifj = 7 Then
For i = 1 To 3:Worksheets(NT).Cells(16, 1 + i).Value = RM(11 + i):Next l:End If
Worksheets(NT).Cells(16,1).Value = q
Metka:
s = " Точность e=" + CStr(E) + ";шаг h=" + CStr(RM(8))
s = s + ";число решений L=" + CStr(l):Worksheets(NT).Cells(14, 3),Formula = s
End Sub 'HGP2001
Численное решение системы N нелинейных дифференциальных уравнений первого порядка на примере
модели динамики мирового рынка энергоресурсов( Marchetti)
Математическое описание модели :dNi/dt=Ki*Ni*Bi*(Aij*Ni*Nj)
(Ni- объем i-ro вида энергоресурса; Ki.Bi, Aij- эмпирические константы)
Дата добавления: 2016-02-04; просмотров: 575;