Описание программы
Работа была выполнена на языке MATLAB с использованием среды разработки Octave версии 9.4.0.
function [xmin, fmin, n] = golddiv()
function [xmin, fmin, n] = fibonaccimethod()
Функция №1 метода золотого сечения заключается в поиске минимума унимодальной функции на заданном интервале путем последовательного сокращения этого интервала. Метод использует постоянное отношение золотого сечения для выбора двух внутренних точек внутри текущего интервала на каждой итерации. Сравнивая значения функции в этих точках, алгоритм определяет, в какой из двух подинтервалов находится минимум, и отбрасывает больший интервал, который гарантированно не содержит минимум. Этот процесс повторяется до тех пор, пока длина интервала неопределенности не станет меньше заданной точности (eps), обеспечивая таким образом нахождение приближенного значения x, минимизирующего функцию, и соответствующего значения функции в этой точке.
Метод Фибоначчи, реализованный в функции fibonaccimethod, также предназначен для поиска минимума унимодальной функции на заданном интервале, но, в отличие от метода золотого сечения, он стремится быть оптимальным в смысле минимизации количества вычислений функции для достижения определенной точности. Основная функция метода Фибоначчи заключается в использовании чисел Фибоначчи для определения положения внутренних точек на каждой итерации, что позволяет достичь максимального сокращения интервала неопределенности при каждом сравнении значений функции.
Сравнение и тестирование
Выполним
оптимизацию функции
при точности в
(табл. 3)
Таблица 3. Сравнение методов
F: (х-0,5)^2 |
Ɛ: 0,01 |
|
|
|
|
|
|
Метод |
золотого |
сечения: |
|
|
|
|
|
Итерация |
a |
y |
z |
b |
f(y) |
|
f(z) |
1 |
0.000000 |
0.381966 |
0.618034 |
1.000000 |
0.013932 |
= |
0.013932 |
2 |
0.381966 |
0.618034 |
0.763932 |
1.000000 |
0.013932 |
< |
0.069660 |
3 |
0.381966 |
0.527864 |
0.618034 |
0.763932 |
0.000776 |
< |
0.013932 |
4 |
0.381966 |
0.472136 |
0.527864 |
0.618034 |
0.000776 |
= |
0.000776 |
5 |
0.381966 |
0.437694 |
0.472136 |
0.527864 |
0.003882 |
> |
0.000776 |
6 |
0.437694 |
0.472136 |
0.493422 |
0.527864 |
0.000776 |
> |
0.000043 |
7 |
0.472136 |
0.493422 |
0.506578 |
0.527864 |
0.000043 |
= |
0.000043 |
8 |
0.472136 |
0.485292 |
0.493422 |
0.506578 |
0.000216 |
> |
0.000043 |
9 |
0.485292 |
0.493422 |
0.498447 |
0.506578 |
0.000043 |
> |
0.000002 |
10 |
0.493422 |
0.498447 |
0.501553 |
0.506578 |
0.000002 |
= |
0.000002 |
Метод |
Фибоначчи: |
|
|
|
|
|
|
Итерация |
a |
y |
z |
b |
f(y) |
|
f(z) |
1 |
0.000000 |
0.381944 |
0.618056 |
1.000000 |
0.013937 |
= |
0.013937 |
2 |
0.381944 |
0.472144 |
0.527856 |
0.618056 |
0.000776 |
> |
0.000775 |
3 |
0.472144 |
0.527856 |
0.562344 |
0.618056 |
0.000776 |
< |
0.003887 |
4 |
0.472144 |
0.506632 |
0.527856 |
0.562344 |
0.000044 |
< |
0.000776 |
5 |
0.472144 |
0.493368 |
0.506632 |
0.527856 |
0.000044 |
> |
0.000043 |
6 |
0.493368 |
0.506632 |
0.514591 |
0.527856 |
0.000044 |
< |
0.000213 |
7 |
0.493368 |
0.501326 |
0.506632 |
0.514591 |
0.000002 |
< |
0.000044 |
8 |
0.493368 |
0.498674 |
0.501326 |
0.506632 |
0.000002 |
= |
0.000002 |
9 |
0.498674 |
0.501326 |
0.503979 |
0.506632 |
0.000002 |
< |
0.000016 |
Результат: |
|
|
|
|
|
|
|
Золотое сечение |
Фибоначчи |
|
|
||||
x_min |
= |
0.497488 |
x_min |
= |
0.501326 |
|
|
f_min |
= |
0.000006 |
f_min |
= |
0.000002 |
|
|
Число |
итераций: |
10 |
Число |
итераций: |
9 |
|
|
Золотое сечение.
Шаг 1
Вычисляется первая итерация, задаются начальные значения интервала L — интервала неопределённости, начало интервала A = 0, конец интервала B = 1. Вычисляются значения y и z, значения функций f(z) и f(y). Одинаковыми цветами далее будут отмечены соответствующие значения переменных.
Шаг 2
Значение начала интервала меняется, A = y, так как в первой итерации значение функции f(y) равно значению f(z). Величина конца интервала не сдвигается.
Шаг 3
Значение конца интервала меняется, B = z, так как на втором шаге интеграции значение функции f(y) меньше f(z). Величина начала интервала не сдвигается.
Шаг 4
Значение конца интервала меняется, B = z, так как на втором шаге интеграции значение функции f(y) меньше f(z). Величина начала интервала не сдвигается.
Шаг 5
Значение конца интервала меняется, B = z, так как на втором шаге интеграции значение функции f(y) меньше f(z). Величина начала интервала не сдвигается.
Шаг 6
Значение начала интервала меняется, A = y, так как в первой интеграции значение функции f(y) равно значению f(z). Величина конца интервала не сдвигается.
Шаг 7
Значение начала интервала меняется, A = y, так как в первой интеграции значение функции f(y) равно значению f(z). Величина конца интервала не сдвигается.
Шаг 8
Значение конца интервала меняется, B = z, так как на втором шаге интеграции значение функции f(y) меньше f(z). Величина начала интервала не сдвигается.
Шаг 9
Значение начала интервала меняется, A = y, так как в первой интеграции значение функции f(y) равно значению f(z). Величина конца интервала не сдвигается.
Шаг 10
Значение начала интервала меняется, A = y, так как в первой интеграции значение функции f(y) равно значению f(z). Величина конца интервала не сдвигается.
Метод Фибоначчи.
Шаг 1
Вычисляется первая итерация, задаются начальные значения интервала L — интервала неопределённости, начало интервала A = 0, конец интервала B = 1. Вычисляются значения y и z, значения функций f(z) и f(y).
Шаг 2
На втором шаге значение начала интервала A становится равным y, а конца интервала B равным z, так как значения функций f(y) и f(z) равны. Значения начала и конца сдвигаются.
Шаг 3
На третьем шаге значение конца интервала B не меняется, а значение начала интервала A меняется и становится равным y, так как функция f(y) больше, чем f(z).
Шаг 4
На четвёртом шаге значение начала интервала A не меняется, а значение конца интервала B меняется и становится равным z, так как функция f(y) меньше, чем f(z).
Шаг 5
На пятом шаге значение начала интервала A не меняется, а значение конца интервала B меняется и становится равным z, так как функция f(y) меньше, чем f(z).
Шаг 6
На шестом шаге значение конца интервала B не меняется, а значение начала интервала A меняется и становится равным y, так как функция f(y) больше, чем f(z).
Шаг 7
На седьмом шаге значение начала интервала A становится равным y, а конца интервала B равным z, так как значения функций f(y) и f(z) равны. Значения начала и конца сдвигаются.
Шаг 8
На восьмом шаге значение начала интервала A не меняется, а значение конца интервала B меняется и становится равным z, так как вычисленное значение функции f(y) меньше, чем f(z).
Шаг 9
На девятом шаге значение конца интервала B не меняется, а значение начала интервала A меняется и становится равным y, так как функция f(y) больше, чем f(z).
