Метод золотого сечения в excel
VBA Excel. Нахождение экстремума функции Методом Золотого Сечения.
О методе Золотого Сечения:
Безусловно, простой и быстрый метод. И как водится, скорость не способствует аккуратности. Это я о том, что если на заданном интервале поиска будут находиться несколько минимумов (максимумов), то данный алгоритм легко может вернуть локальный (не самый большой, не абсолютный) экстремум.
Задание:
Составить программу позволяющую протестировать алгоритм поиска экстремума методом Золотого Сечения на примере пяти произвольных функций. Исходными данными для поиска должны являться границы интервала, точность и тип экстремума (MAX или MIN). Программа должна отображать график функции на заданном интервале и координаты точки экстремума.
- Модуль листа Excel (SheetGoldCutting), на котором как на форме будут располагаться необходимые органы управления ходом тестирования;
- Форма для ввода данных FormDann;
- Класс ExtremGC, вычисляющий координаты точки экстремума с заданной точностью, а также массив точек графика функции на заданном интервале (для отображения на диаграмме);
- Стандартный модуль GoldCutting для описания глобальных констант, переменных и функций.
Например, так.
Рис.1 Рабочий лист Excel с диаграммой, двумя командными кнопками и кнопками выбора функции
Рис.2 Форма для ввода исходных данных
Данная форма вызывается явно при щелчке по первой командной кнопке (расположенной на листе Excel) или косвенно, если в момент нажатия на вторую командную кнопку (расположенную на листе Excel), исходные данные не обеспечивают необходимых условий начала выполнения алгоритма.
Для удобства пользователя, все элементы TextBox допускают ввод только числовых значений.
При щелчке по кнопке «Отмена» все переменные получат значения, которые существовали на момент открытия формы.
При открытии файла (если макросы включены) или включении макросов (если они были отключены на момент открытия файла) выполняется обработчик события с целью задать (определить) одну из заготовленных функций, как функцию для тестирования по умолчанию. Для этого достаточно отметить одну (например, первую) OptionButton (или как часто называют - радиокнопку) и вызвать макрос назначенный этой кнопке.
Private Sub Workbook_Open()
' радиокнопки нумеруются в этой книге от 5 до 9.
' Поэтому по умолчанию выделяю первую кнопку.
Sheets(1).Shapes("Option Button 5").ControlFormat.Value = 1
SheetGoldCutting.OptBut1_Click
End Sub
Метод theAlgoritm класса ExtremGC, который, собственно, и выполняет определение координат точки экстремума выглядит приблизительно так:
'Нахождение экстремума функции на отрезке. Метод золотого сечения
Public Sub theAlgoritm(v1 As Double, v2 As Double, v3 As Double, v4 As Double, findMax As Boolean)
Dim x1 As Double, x2 As Double, y1 As Double, y2 As Double, sme As Double
FullArrayOnly v1, v2, v3, v4 'для проверки допустимости аргумента
If Not BadDann Then
zc = (1 + Sqr(5)) / 2
n = 0 'количество разбиений (переменная модуля класса)
Do While b - a > ep
sme = (b - a) / zc
x1 = b - sme: x2 = a + sme
y1 = theFunc(x1): y2 = theFunc(x2)
If findMax Then
'поиск максимума
If y1 = y2 Then
a = x1
Else
b = x2
End If
End If
n = n + 1 'количество разбиений (переменная модуля класса)
Loop
dxk = Abs(b - a) ' конечное значение шага
xe = (a + b) / 2: ye = theFunc(xe) ' результат: координаты точки экстремума
Кому интересен остальной код – обращайтесь…
Если нужно что-то изменить в проекте под Ваши требования (например, заменить функции) – пожалуйста, проблем не будет!
исходный код уже открыт. Используйте !
Если у Вас не появляется форма ввода данных, значит вы забыли включить макросы…
Хочу обратить внимание, что для первой функции значения аргумента не могут быть меньше или равны нулю.
Чтобы увидеть, как ошибается алгоритм и находит локальный экстремум вместо абсолютного, задайте достаточно большой интервал (например: от 0 до 25) для 4 или 5 функций, имеющих явную периодичность…
Найти минимум функции методом золотого сечения.
Помогите пожалуйста. Нужно найти минимум функции у=х*х-sinх методом золотого сечения. в СИ.
Найти максимум функции методом золотого сечения
Здравствуйте, в университете задали задачу, которую необходимо сделать в Mathcad'е. Необходимо.
Найти минимум функции x^2-sinx методом золотого сечения
Найти минимум функции x^2-sinx методом золотого сечения
Как насчёт график нарисовать в том же Экселе и определить пределы расположения локальных экстремумов? Сколько их вообще будет?
Вот блок-схема нахождения локального минимума функции на отрезке [a;b] с заданной точностью jogano, К сожалению, я абсолютно ничего не понимаю в этом.. Это так решается? К примеру в решении приводится один из локальных экстремумов - min функции
Если решение верное, то мне надо таким же образом получить max функции, хотя я не уверен, что именно так должно решаться, даже не имею представления
Хочу сообщить, что тема все еще АКТУАЛЬНА. Спасибо!
jogano, а как быть, если в условии задачи не указаны отрезки [a;b]?
Вот блок-схема нахождения локального минимума функции на отрезке [a;b] с заданной точностью Добрый вечер, jogano, хочу уточнить одну вещь. В блок-схеме приводится метод решения задачи, при известных отрезках (интервалах) [a;b]. В моем же случае отрезки не указаны, как мне определить эти отрезки, для дальнейшего решения задачи? Спасибо! Dr_Mann, вам уже промолчали по этому поводу. Намёков вы, видимо, не понимаете. Отвечаю прямо - когда я делал вашу задачу, я сначала нарисовал график в Экселе, и визуально определил нужный отрезок. Как это сделать без графика, я не знаю. Надеюсь, больше вопросов вида "а если не рисовать?", "а как можно по другому?" не будет. Добрый вечер, jogano, хочу уточнить одну вещь. В блок-схеме приводится метод решения задачи, при известных отрезках (интервалах) [a;b]. В моем же случае отрезки не указаны, как мне определить эти отрезки, для дальнейшего решения задачи? Спасибо! Постройте график функции в том же самом табличном редакторе которым вы пользуетесь, Excel или Calc из libreOffice / OpenOffice. WH, Получилось вот так, по-моему не совсем правильно..Потому что для построения тоже нужны значения для аргумента x. Я ввел значения от 0 до 10, наверно нужны другие значения.. Нужно просто взять большее чило значений, не через 1, а к примеру через 0,1, и копированием формулы построить ряд данных, секундное дело. И подобрать подходящий вид графика и его тип. Если Вам нужно в пределах 0. 10, то вот что у меня получилось в программе Calc, все выглядит вполне нормально.
Ответ у Вас должен получиться такой
х = 2.3896
f(x) = 0.5979
правда я не в табличном редакторе считал, так что не спрашивайте меня как это сделать в таблицах. WH, Так получается я могу любые значения х ввести и всегда будет разный график и соответственно разные интервалы. Возвращаясь к самой задачи, какие значения х мне следует вводить, чтобы получить верный график функции и его верные интервалы [a;b], для дальнейшего решения моей задачи? От 0 до 10 я ввел рандомно.
Решение
У Вас в условиях задачи сказано - найти локальные экстремумы. Строим график функции что бы понять где они находятся. Видим, что экстремумов 3, причем 2 из них являются еще и глобальными и равными друг другу (это будет понятно если построить графики в более широком диапазоне значений X и более узких границах, а так же и по формуле функции). Теперь методом золотого сечения находим значения:
Глобальные экстремумы выделил красными кружочками, находятся в диапазонах X где то между -4. -1 и между 1. 4.
Локальный экстремум можно выделить в диапазоне значений Х на промежутке -1. 1 (синий кружочек), находится он по оси X в районе нуля.
Результат который у Вас должен получиться.
Минимизация функции методом золотого сечения
Здравствуйте, помогите с лабораторной. Нужно написать код, исходя из следующей блок схемы.
Минимизировать Функции методом золотого сечения
Минимизировать Функции f(x) = |x| + e^10x методом золотого сечения Отрезок неопределнности .
Определить минимум функции методом золотого сечения
Ребята помогите с решением задачи в маткаде по золотому сечению: Определить методом золотого.
Поиск экстремума функции методом золотого сечения
Напишите программу, которая находит все минимумы и максимумы функции (см. варианты на следующей.
Читайте также: