Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Основы оптимизации в радиотехнических системах. Практикум

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]