Программная модель поиска глобального минимума нелинейных "овражных" функций двух переменных
8. Ларичев О.И., Горвиц Г.Г. «Методы поиска локальных экстремумов овражных функций» М.: Наука, 2003. С.5-12
Приложение
Код модуля
Option Explicit
Dim i, s, j, h1, h2
Sub Кнопка2_Щелкнуть()
Form1.Show 'Ввод исходных данных
End Sub
Sub Кнопка3_Щелкнуть()
j = 1
i = 2 'Номер шага(этапа)
Do 'Цикл нахождения минимума функции
h1 = Range("aa3") 'Присвоение переменным
h2 = Range("aa4") 'h1,h2 значения шага
Do
Range("z1").Select 'Сохранение предыдущего
s = ActiveCell 'значения функции
'Вычисление новых начальных точек
Range("v1").Select
ActiveCell = Range("x1")
Range("v2").Select
ActiveCell = Range("x2")
Range("x1").Select
ActiveCell = ActiveCell - h1
Range("x2").Select
ActiveCell = ActiveCell - h2
'Вывод в таблицу новых начальных
'точек и значение функции в этих точках
Range("a3", "f23").Select
ActiveCell(j, "a") = Range("x1")
ActiveCell(j, "b") = Range("x2")
ActiveCell(j, "f") = Range("z1")
j = j + 1
'Cравнение нового значения функции с предыдущим
Loop While Range("z1") < s
j = j - 1
Range("x1").Select
ActiveCell = Range("v1")
Range("x2").Select
ActiveCell = Range("v2")
'Вывод в таблицу новых начальных точек,
'градиент поля функции, модуль градиента
'и значение функции в новых начальных точках
Range("a3", "g23").Select
ActiveCell(j, "a") = Range("x1")
ActiveCell(j, "b") = Range("x2")
ActiveCell(j, "c") = Range("w1")
ActiveCell(j, "d") = Range("w2")
ActiveCell(j, "e") = Range("w3")
ActiveCell(j, "f") = Range("z1")
'Вывод номера шага(этапа) вычисления минимума функции
ActiveCell(j, "g") = i
j = j + 1
i = i + 1
Range("w3").Select
'Сравнение значения модуля градиента и погрешности
Loop While ActiveCell > Range("y3")
End Sub
Sub Кнопка4_Щелкнуть()
'Очистка диапазона ячеек
Range("a2", "g40").Clear
Range("x1", "x2").Clear
Range("y1", "y3").Clear
Range("v1", "v2").Clear
Range("z1").Clear
End Sub
Код формы “Метод наискорейшего спуска”
Private Sub CB1_Click()
End
End Sub
Private Sub CB2_Click()
Range("Z1").Select
Lbl1.Caption = ActiveCell
Range("c2").Select
ActiveCell = Range("w1")
Range("d2").Select
ActiveCell = Range("w2")
Range("e2").Select
ActiveCell = Range("w3")
'Вывод номера шага нахождения минимума функции
Range("g2").Select
ActiveCell = 1
End Sub
Private Sub TB1_Change()
Range("X1").Select
ActiveCell = TB1.Text
Range("a2").Select
ActiveCell = Range("x1")
End Sub
Private Sub TB2_Change()
Range("X2").Select
ActiveCell = TB2.Text
Range("b2").Select
ActiveCell = Range("x2")
End Sub
Private Sub TB3_Change()
Range("Y1").Select
ActiveCell = TB3.Text
End Sub
Private Sub TB5_Change()
Range("Y3").Select
ActiveCell = TB5.Text
End Sub
Private Sub TB4_Change()
Range("Y2").Select
ActiveCell = TB4.Text
End Sub
Private Sub TB6_Change()
Range("Z1").Select
ActiveCell = TB6.Text
Range("f2").Select
ActiveCell = Range("z1")
End Sub