Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Основы оптимизации в радиотехнических системах. Практикум
.pdf
z
1
a
x
a
x
L
R
=
−
−
z
1
xb
xb
R
L
=
−
−
z/
n1n≈−
FF
Отметим, что после сжатия исходного интервала, например, до ин-
тервала [a, xR] (рис. 1.6), будет выполняться соотношение
.
Таким образом, значение xL может быть использовано в качестве значения xR на следующей итерации. Поэтому после сжатия интервала в соответствии с рис. 1.6 вычисления xR по формуле (1.4) не требуется, т. к.
оно может быть найдено путем присваивания xR := xL. Аналогично для
случая, показанного на рис. 1.7, будет выполняться соотношение
,
и значение xL на следующей итерации может быть найдено путем присваивания xL:= xR.
Схема алгоритма оптимизации функции по методу золотого сечения
представлена на рис. 1.8.
Метод Фибоначчи реализует алгоритм, обеспечивающий максимальное сокращение интервала неопределенности при заданном количестве
выполненных итераций. Основой алгоритма являются числа Фибоначчи,
которые вычисляются по следующей формуле:
F0 = F1 = 1, Fn = F
n-1
+ F
n-2
,
где n – индекс числа Фибоначчи, представляющий собой целое число, n ≥ 2.
Использование данной рекуррентной формулы дает последовательность чисел F0 = 1, F1 = 1, F2 = 2, F3 = 3, F4 = 5, F5 = 8, F6 = 13, F7 = 21,
F8 = 34, F9 = 55, F10 = 89 и т. д. Числа Фибоначчи связаны с соотношением,
соответствующим золотому сечению. Так, например, при n ≥ 3 будет выполняться условие
.
Чем больше значение n, тем ближе отношение F
n-1/Fn
к числу z, опре-
деляемому золотым сечением.
11

a:= xL, xL:=xR,
Начало
b – a < ε
Вычисление значений
Вычисление значений
A ≤ B
ДА
НЕТ
b:= xR, xR:= xL,
НЕТ
ДА
Конец
Ввод значений a, b, ε
Ввод значения z
xL = z∙a + (1–z) ∙b,
= (1–z)∙a + z∙b
x
R
A=f(xL), B=f(xR)
B:=A,
x
= z∙a + (1–z) ∙b,
L
A:=f(x
)
L
A:=B,
x
= (1–z)∙a + z∙b,
R
B:= f(x
Рис. 1.8
)
R
Оптимизация функции по методу Фибоначчи выполняется за строго
определенное число итераций. При этом число необходимых итераций
определяется требуемым значением погрешности результата численного
решения задачи.
12

ε
a
b
−
≥
N
F
)
ab(ax
2
L
−
+=
−NN
F
F
)
ab
(
ax
1
R
−
+=
−
N
N
F
F
)
a
b(
ax
1
1
L
−+
=
+
−
−
−
kN
kN
F
F
)ab(ax
1
R
−+=
+−−kN
kN
F
F
На первой итерации (k = 1) из чисел Фибоначчи выбирается мини-
мальное число, удовлетворяющее условию
,
где N – индекс выбранного числа Фибоначчи. Число необходимых итераций метода определяется значением N–1. В пределах текущего интервала
неопределенности вычисляются значения
,
.
Далее находятся значения функций f(xL), f(xR) и сравниваются между
собой. Сжатие интервала производится по правилам, изложенным при
описании метода золотого сечения. Далее следует выполнить следующие
итерации, вычисляя значения xL, xR по формулам
,
.
Вычисления заканчиваются после выполнения итерации с номером
k = N–1.
Схема алгоритма оптимизации функции по методу золотого сечения
представлена на рис. 1.9.
Существенным недостатком метода Фибоначчи является необходимость предварительной оценки требуемого числа итераций. Эта особенность метода обуславливает его невысокую эффективность при решении
одномерных подзадач многомерной оптимизации. Например, на практике
нередко требуется найти минимум функции f(x) с некоторой относительной погрешностью δ либо в результате выполнения алгоритма значение
функции f(x) должно быть уменьшено в некоторое число раз. В рассмотренных случаях выполнение предварительно установленного количества
итераций может не привести к достижению требуемого значения погрешности.
13

a := xL, xL := xR,
)ab(ax
1
R
−+=
+−−kN
kN
F
F
Начало
k = N
Вычисление значений
A < B
ДА
НЕТ
b := xR, xR := xL,
)ab(ax
1
1
L
−+=
+−−−kN
kN
F
F
НЕТ
ДА
Конец
Выбор минимального числа,
ε
ab −
≥
N
F
Вычисление значений
)ab(
ax
2
L
−+
=
−
N
N
F
F
)a
b(
a
x
1
R
−
+
=
−
N
N
F
F
K := 2
k := k+1
k := k+1
Ввод значений a, b, ε
удовлетворяющего условию
, ввод значения N
,
A = f(xL), B = f(xR)
B := A,
A := f(xL)
A := B,
,
,
B := f(x
)
R
Рис. 1.9
14

f(x)
0
x
x0 x0+h
x0–h
f(x) x
0
x
Значительным недостатком всех рассмотренных методов оптимизации одномерных функций является требование наличия единственного
экстремума в пределах интервала [a, b].
Во многих случаях задача численного нахождения минимума функции является обусловленной [2]. Под обусловленностью вычислительной
задачи понимают чувствительность ее решения к погрешностям входных
данных [7]. Задача называется хорошо обусловленной, если малым погрешностям исходных данных соответствуют малые погрешности решения. В противном случае задача называется плохо обусловленной [7]. Для
оценки обусловленности задачи используется так называемое число обусловленности [7]. Обусловленность вычислительной задачи связана с метрологическими характеристиками вычислительного устройства, на базе
которого эта задача решается [5].
Погрешности входных данных могут иметь различные составляющие.
Одной из наиболее существенных составляющих является инструментальная погрешность, вызванная конечной разрядностью аналого-цифрового преобразователя или вычислительного устройства. На рис. 1.10 показан график некоторой функции, построенный в результате выполнения
высокоточных вычислений. Для данной функции результат численного
решения задачи поиска минимума также может быть найден с высокой
точностью, т. е. интервал неопределенности может быть уменьшен до
очень малых размеров.
0
Рис. 1.10 Рис. 1.11
На рис. 1.11 представлен график функции, вычисляемой с погрешностью. В соответствии с рисунком на графике функции может быть выделена такая малая окрестность точки минимума (x0 – h, x0 + h), для которой
15

положение точки минимума не может быть определено достоверно (минимум функции не может быть достоверно определен на основе сравнения
вычисляемых значений функции). В данном случае интервал неопределенности положения локального минимума функции будет задан значениями [x0 – h, x0 + h]. Таким образом, погрешность нахождения минимума
функции в значительной мере зависит от погрешности вычисления значений функции.
Одним из основных источников вычислительных погрешностей является приближенное представление чисел в компьютере, обусловленное его
конечной разрядностью. Современные вычислительные устройства могут
использовать различные микропроцессоры, поддерживающие представление чисел в формах с фиксированной и плавающей запятой (точкой). При
решении вычислительных задач на базе персонального компьютера (ПК),
как правило, используется представление чисел в форме с плавающей запятой. Более подробную информацию о том, как организуется представление таких чисел в вычислителях, можно найти в работах [7, 8, 9].
В настоящее время ПК поддерживают стандарт двоичной арифметики
с плавающей запятой IEEE 754-2008 (IEEE Standard for Floating-Point
Arithmetic) [10]. Стандарт предусматривает следующие основные типы
чисел с плавающей точкой: числа одинарной, двойной и учетверенной
точности. В стандарте также предусмотрены расширенные форматы данных [7]. Числа одинарной точности представляются 32 битами (4 байтами)
в виде: 1 бит под знак, 8 бит под порядок, 23 бита под мантиссу. Числа
двойной точности представляются 64 битами (8 байтами) в виде: 1 бит под
знак, 11 бит под порядок, 52 бита под мантиссу. Для представления числа
учетверенной точности используются 128 бит: 1 бит под знак, 15 бит под
порядок, 112 бит под мантиссу.
В программной среде MATLAB по умолчанию используется представление чисел с двойной точностью (тип данных – double). Для опреде-
ления любых других типов данных указание типа при объявлении переменной является обязательным.
В соответствии со стандартом арифметика с плавающей запятой поддерживает ряд специальных символов (бесконечность, нечисловое значение и др.). В программной среде MATLAB символ ±∞ имеет обозначение
«inf», а нечисловое значение обозначается словом «NaN». Любая опера-
16

%
1002
δ
-52
⋅
=
ция, результат которой не может быть определен корректно, генерирует
символ NaN (Not a Number – нечисловое значение) [7].
Относительная погрешность представления чисел в ПК определяется
разрядностью мантиссы. Значение относительной погрешности представления числа не превышает значения так называемого «машинного эпсилона» [7, 8].
В системе MATLAB значение «машинного эпсилона» обозначено переменной eps = 2
отводится 52 бита), что примерно равно 2,2204∙10
-52
(для типа данных с двойной точностью под мантиссу
-16
. Таким образом, отно-
сительная погрешность представления числа в среде MATLAB (выражен-
ная в процентах) не превышает значения
. Для чисел с плавающей запятой относительная погрешность имеет фиксированное значение, а абсолютная погрешность может изменяться.
Относительная погрешность любой арифметической операции над
числами, представленными в форме с плавающей точкой, также не превышает значения «машинного эпсилона» [7].
Ход работы
1. Запустить программную среду Matlab, установить текущую папку
«X:\…\Komplex_MO\Lab1», где X – условное обозначение литеры диска.
Поле для установки текущей папки показано на рис. 1.12;
Рис. 1.12
2. В текстовом редакторе среды Matlab создать новый файл и сохранить его под именем f11.m на жестком диске ПК в папке
X:\…\Komplex_MO\Lab1;
17

3. В файле f11.m поместить заголовок файла-функции:
function y = f11(x)
4. В файле f11.m после имеющегося кода поместить запись выражения анализируемой функции (согласно варианту заданий, указанному
преподавателем):
y=x.*x-sin(x);
5. Cохранить изменения файла f11.m;
6. В текстовом редакторе среды Matlab создать новый файл и сохра-
нить его под именем gs_minimum.m на жестком диске ПК в папке
X:\…\Komplex_MO\Lab1;
7. В файле gs_minimum.m поместить заголовок файла-функции:
function gs_minimum(a,b,eps)
%-------------------------------------------% gs_minimum(a,b,eps) - функция для нахождения
% минимума функции f11(x). %%%
% Поиск производится методом золотого сечения
% на интервале [a, b] с погрешностью eps.
% Функция f11(x) задаётся в виде M-файла,
% который должен находиться в текущей папке.
% (!!!) Для правильной работы функции необходимо,
% чтобы выполнялось условие a<b и
% искомое значение было единственным
% на интервале [a, b].
8. В файле gs_minimum.m поместить следующий программный код
(после имеющегося кода):
%-------------------------------------------% Вывод сообщения об ошибке
if a>b
error('"а" должно быть меньше "b"');
end;
%-------------------------------------------% Построение графика
18

x=a:0.001:b; y=f11(x);
plot(x,y,'k',a,f11(a),'o',b,f11(b),'o');
text(a,f11(a)+5,'f11(a)','FontSize',14);
text(b,f11(b)+5,'f11(b)','FontSize',14);
xlabel('x'); ylabel('f11(x)');
grid on; hold on;
9. В файле gs_minimum.m поместить следующий программный код
(после имеющегося кода):
%--------------------------------------------
% Выполнение итераций
n=0; % Количество итераций
z=(sqrt(5)-1)/2;
xL=z*a+(1-z)*b; xR=(1-z)*a+z*b;
A=f11(xL); B=f11(xR);
while 1
if b-a<eps break;
else
if A<=B %%%
b=xR;
xR=xL; B=A; xL=z*a+(1-z)*b; A=f11(xL);
else
a=xL;
xL=xR; A=B; xR=(1-z)*a+z*b; B=f11(xR);
end;
end;
x=(a+b)/2;
disp( sprintf('%s %.15f', 'x_min=',x) );
disp( sprintf('%s %.15f', 'f11=',f11(x)) );
plot(x, f11(x),'o');
n=n+1;
end;
%-------------------------------------------% Вывод результатов
plot(x,f11(x),'or');
text(x,f11(x)-10,'X_{min}','FontSize',14);
disp( sprintf('%s', ' ') );
disp(sprintf('%s', 'Границы интервала неопр.:'));
disp( sprintf('%s %.15f', 'a=',a) );
disp( sprintf('%s %.15f', 'b=',b) );
disp( sprintf('%s', ' ') );
disp( sprintf('%s %d', 'n=', n) );
hold off;
19

10. Cохранить изменения файла gs_minimum.m;
11. Выполнить поиск минимума функции методом золотого сечения.
Значения границ интервала поиска выбрать согласно варианту заданий,
указанному преподавателем. Например, для запуска процесса поиска минимума функции в интервале [–5, 10] в главном окне среды Matlab следует
выполнить следующую команду:
>> gs_minimum(-5, 10, 0.01)
12. В текстовом редакторе среды Matlab создать новый файл и сохранить его под именем gs_maximum.m на жестком диске ПК в папке
X:\…\Komplex_MO\Lab1;
13. В файле gs_maximum.m поместить код файла-функции, выпол-
няющего поиск максимума методом золотого сечения;
14. Cохранить изменения файла gs_maximum.m;
15. Выполнить поиск максимума функции методом золотого сечения.
Значения границ интервала поиска выбрать согласно варианту заданий,
указанному преподавателем. Например, для запуска процесса поиска максимума функции в интервале [–5, 10] в главном окне среды Matlab следует
выполнить следующую команду:
>> gs_maximum(-5, 10, 0.01)
16. В текстовом редакторе среды Matlab создать новый файл и сохранить его под именем fib_minimum.m на жестком диске ПК в папке
X:\…\Komplex_MO\Lab1;
17. В файле fib_minimum.m поместить заголовок файла-функции:
function fib_minimum(a,b,eps)
%-------------------------------------------% fib_minimum(a,b,eps) - функция для нахождения
% минимума функции f11(x). %%%
% Поиск производится методом Фибоначчи
% на интервале [a, b] с погрешностью eps.
% Функция f11(x) задаётся в виде M-файла,
% который должен находиться в текущей папке.
% (!!!) Для правильной работы функции необходимо,
20
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
