Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Метод локализации экстремума



Метод локализации представляет собой модификацию метода сканирования. При его использовании существенно снижается количество выполняемых вычислений. Весь интервал поиска, как и в методе сканирования, разбивается на несколько частей, но более крупных размеров (чаще всего на 4 отрезка). Вычисление критерия R(х) осуществляется во всех точках разбиения и на краях интервала. Выбирается значение аргумента, соответствующее наименьшему значению R(х). Новый интервал поиска будет состоять из двух отрезков, на общей границе которых находится найденный минимум. Процедура повторяется.

Абсолютная ошибка в нахождении экстремума при 4 отрезках разбиения равна

,

где s – количество точек, в которых вычисляется значение критерия.

Далее приведен текст программы, позволяющий реализовать описанный выше алгоритм.

function[]=LocalizExtrem1D_170809();

%метод одномерного поиска экстремума для указанной ниже функции

function y=f(x)

%функция вычисляется от одного аргумента и возвращает одно значение

%или от вектора аргумента и возвращает вектор, каждый элемент

%которого вычислен от соответствующего элемента вектора аргумента

y=(x+2).*(x-4); %поэтому перед знаком умножения * стоит точка.

%если не ставить; точку с запятой в конце строки то произойдет

%вывод на экран

end

%метод одномерного поиска минимума: локализации экстремума

disp('МЕТОД ПОИСКА МИНИМУМА ФУНКЦИИ ЛОКАЛИЗАЦИЕЙ ЭКСТРЕМУМА');

disp('Применен для указанной функции: y=(x+2)*(x-4)');

disp('ВВОД ИСХОДНЫХ ДАННЫХ края диапазона поиска, точность по аргументу ИЛИ по функции ');

function[x, y, mas1x, mas1y, xleft1, xright1, nn]=LocExt1(); % функция локализации экстремума

disp('Одномерная оптимизация методом локализации экстремума');

disp('ЗАДАЧА найти минимум указанной ниже функции ');

disp('y=(x+2)*(x-4)');

disp('в интервале, определяемом пользователем')

% ввод диапазона значений аргумента функции

xleft=input('введите левую границу диапазона поиска=');

xright=input('введите правую границу диапазона поиска=');

choice=input('ВОПРОС завершение работы по минимальному изменению функции? Да=1 нет=0');

if choice==0

yeps=input('введите допустимую погрешность по аргументу: ');

else

yeps=input('введите минимальное изменение функции: ');

end

xleft1=xleft;

xright1=xright;

%создание массива точек

n=5; %5 точек, чтобы было 4 отрезка

nn=1;

TheEnd=0;

while TheEnd==0

dx=(xright-xleft)/4;

masx(1)=xleft;

masy(1)=f(xleft);

disp(' очередная итерация');

for i=2: n

%вычисление значений аргументов и функции от каждого из них

masx(i)=masx(i-1)+dx;

masy(i)=f(masx(i));

string=strcat(‘аргумент: ’, num2str(masx(i)), ’ функция: ’, num2str(masy(i)));

disp(string);

% проверка условий окончания работы функции

if choice==1

if abs(masy(i)-masy(i-1))< yeps

TheEnd=1;

end

else

if abs(xright-xleft)< eps

TheEnd=1;

end

end

end

%поиск минимума

min=masy(1)

num=1;

for i=2: n

if masy(i)< min

min=masy(i);

num=i;

end

end

string=strcat(‘В ДАННОЙ ИТЕРАЦИИ оптимальный аргумент: ’, num2str(masx(num)), ’ минимальная функция: ’, num2str(masy(num)));

disp(string);

%подготовка к новой итерации

if num==1

xright=masx(2);

elseif num==n

xleft=masx(n-1);

else

xleft=masx(num-1);

xright=masx(num+1);

end

%возвращаемый массив точек

for i=1: 5

mas1x(nn)=masx(i);

mas1y(nn)=masy(i);

nn=nn+1;

end

end

%возвращаемые значения минимума функции и соответствующего аргумента

x=masx(num);

y=masy(num);

end

disp('Одномерная оптимизация методом локализации экстремума');

disp('ЗАДАЧА найти минимум указанной ниже функции ');

disp('y=(x+2)*(x-4)');

disp('в интервале, определяемом пользователем')

%обращение к функции локализации экстремума

[x, y, mas1x, mas1y, xleft1, xright1, nn]=LocExt1();

nn=nn-1;

%выбор оформления вывода на экран

choiceTab=input('ВОПРОС выводить пошагово как таблицу? Да=1 нет=0 ');

choiceGraf=input('ВОПРОС выводить график? Да=1 нет=0 ');

%вывод таблицы

if choiceTab==1

disp('вывод результатов');

for i=1: nn

string=print(‘номер= %4i\tаргумент= %7.3f\tфункция= %7.3f’, i, mas1x(i), mas1y(i));

disp(string);

end

end

% подготовка к выводу текста

% num2str преобразует число в строку символов

disp('НАЙДЕН МИНИМУМ')

sx=strcat('оптимальное значение аргумента=', num2str(x));

sy=strcat('минимум функции=', num2str(y), ' с точностью: ', num2str(abs(mas1y(nn)-mas1y(nn-1))));

sn=strcat('выполнено: ', num2str(nn), ' итераций');

disp(sx) % вывод на экран

disp(sy)

% подготовка к построению графика

h=0.1;

x1=xleft1: h: xright1;

y1=f(x1);

plot(x1, y1, ’k-‘);

grid on;

title('y=(x+2)(x-4)');

xlabel('X');

ylabel('Y');

text(x, y, ’\leftarrow Minimum’);

zeroMas=x1*0;

hold on;

if choiceGraf==1

plot(mas1x, mas1y, ’r.’);

legend(‘plot with minimal step’, ’points by Localisation method’, 0);

else

legend(‘plot with minimal step’, 0);

end

hold on;

plot(x1, zeroMas, ’k-‘, zeroMas, y1, ’k-‘);

end

После выполнения этой программы пользователь видит на экране соответствующий текст, вводит нужные значения и получает график:

МЕТОД ПОИСКА МИНИМУМА ФУНКЦИИ ЛОКАЛИЗАЦИЕЙ ЭКСТРЕМУМА

Применен для указанной функции: y=(x+2)*(x-4)

ВВОД ИСХОДНЫХ ДАННЫХ края диапазона поиска, точность по аргументу ИЛИ по функции

Одномерная оптимизация методом локализации экстремума

• ЗАДАЧА найти минимум указанной ниже функции

• y=(x+2)*(x-4)

в интервале, определяемом пользователем

введите левую границу диапазона поиска=-10

введите правую границу диапазона поиска=10

• ВОПРОС завершение работы по минимальному изменению функции? Да=1 нет=01

введите минимальное изменение функции: 0.01

очередная итерация

аргумент: -5 функция: 27

аргумент: 0 функция: -8

аргумент: 5 функция: 7

аргумент: 10 функция: 72

В ДАННОЙ ИТЕРАЦИИ оптимальный аргумент: 0 минимальная функция: -8

очередная итерация

аргумент: -2.5 функция: 3.25

аргумент: 0 функция: -8

аргумент: 2.5 функция: -6.75

аргумент: 5 функция: 7

В ДАННОЙ ИТЕРАЦИИ оптимальный аргумент: 0 минимальная функция: -8

очередная итерация

аргумент: -1.25 функция: -3.9375

аргумент: 0 функция: -8

аргумент: 1.25 функция: -8.9375

аргумент: 2.5 функция: -6.75

В ДАННОЙ ИТЕРАЦИИ оптимальный аргумент: 1.25 минимальная функция: -8.9375

очередная итерация

аргумент: 0.625 функция: -8.8594

аргумент: 1.25 функция: -8.9375

аргумент: 1.875 функция: -8.2344

аргумент: 2.5 функция: -6.75

В ДАННОЙ ИТЕРАЦИИ оптимальный аргумент: 1.25 минимальная функция: -8.9375

очередная итерация

аргумент: 0.9375 функция: -8.9961

аргумент: 1.25 функция: -8.9375

аргумент: 1.5625 функция: -8.6836

аргумент: 1.875 функция: -8.2344

В ДАННОЙ ИТЕРАЦИИ оптимальный аргумент: 0.9375 минимальная функция: -8.9961

очередная итерация

аргумент: 0.78125 функция: -8.9521

аргумент: 0.9375 функция: -8.9961

аргумент: 1.0938 функция: -8.9912

аргумент: 1.25 функция: -8.9375

В ДАННОЙ ИТЕРАЦИИ оптимальный аргумент: 0.9375 минимальная функция: -8.9961

ВОПРОС выводить пошагово как таблицу? Да=1 нет=0 1

ВОПРОС выводить график? Да=1 нет=0 1

вывод результатов

номер= 1 аргумент=-10.000 функция=112.000

номер= 2 аргумент= -5.000 функция= 27.000

номер= 3 аргумент= 0.000 функция= -8.000

номер= 4 аргумент= 5.000 функция= 7.000

номер= 5 аргумент= 10.000 функция= 72.000

номер= 6 аргумент= -5.000 функция= 27.000

номер= 7 аргумент= -2.500 функция= 3.250

номер= 8 аргумент= 0.000 функция= -8.000

номер= 9 аргумент= 2.500 функция= -6.750

номер= 10 аргумент= 5.000 функция= 7.000

номер= 11 аргумент= -2.500 функция= 3.250

номер= 12 аргумент= -1.250 функция= -3.938

номер= 13 аргумент= 0.000 функция= -8.000

номер= 14 аргумент= 1.250 функция= -8.938

номер= 15 аргумент= 2.500 функция= -6.750

номер= 16 аргумент= 0.000 функция= -8.000

номер= 17 аргумент= 0.625 функция= -8.859

номер= 18 аргумент= 1.250 функция= -8.938

номер= 19 аргумент= 1.875 функция= -8.234

номер= 20 аргумент= 2.500 функция= -6.750

номер= 21 аргумент= 0.625 функция= -8.859

номер= 22 аргумент= 0.938 функция= -8.996

номер= 23 аргумент= 1.250 функция= -8.938

номер= 24 аргумент= 1.563 функция= -8.684

номер= 25 аргумент= 1.875 функция= -8.234

номер= 26 аргумент= 0.625 функция= -8.859

номер= 27 аргумент= 0.781 функция= -8.952

номер= 28 аргумент= 0.938 функция= -8.9961

номер= 29 аргумент= 1.094 функция= -8.991

номер= 30 аргумент= 1.250 функция= -8.938

НАЙДЕН МИНИМУМ

оптимальное значение аргумента=0.9375

минимум функции=-8.9961 с точностью: 0.053711

 

Рис. 2.3. Пример вывода на экран при оптимизации методом локализации экстремума

Вывод результатов исполнения той же программы при изменении условий проведения поиска:

МЕТОД ПОИСКА МИНИМУМА ФУНКЦИИ ЛОКАЛИЗАЦИЕЙ ЭКСТРЕМУМА

Применен для указанной функции: y=(x+2)*(x-4)

ВВОД ИСХОДНЫХ ДАННЫХ края диапазона поиска, точность по аргументу ИЛИ по функции

Одномерная оптимизация методом локализации экстремума

ЗАДАЧА найти минимум указанной ниже функции

• y=(x+2)*(x-4)

в интервале, определяемом пользователем

введите левую границу диапазона поиска=-10

введите правую границу диапазона поиска=10

ВОПРОС завершение работы по минимальному изменению функции? Да=1 нет=00

введите допустимую погрешность по аргументу: 0.1

очередная итерация

аргумент: -5 функция: 27

аргумент: 0 функция: -8

аргумент: 5 функция: 7

аргумент: 10 функция: 72

В ДАННОЙ ИТЕРАЦИИ оптимальный аргумент: 0 минимальная функция: -8

очередная итерация

аргумент: -2.5 функция: 3.25

аргумент: 0 функция: -8

аргумент: 2.5 функция: -6.75

аргумент: 5 функция: 7

В ДАННОЙ ИТЕРАЦИИ оптимальный аргумент: 0 минимальная функция: -8

очередная итерация

аргумент: -1.25 функция: -3.9375

аргумент: 0 функция: -8

аргумент: 1.25 функция: -8.9375

аргумент: 2.5 функция: -6.75

Часть вывода вырезана

В ДАННОЙ ИТЕРАЦИИ оптимальный аргумент: 1.0156 минимальная функция: -8.9998

очередная итерация

аргумент: 0.97656 функция: -8.9995

аргумент: 1.0156 функция: -8.9998

аргумент: 1.0547 функция: -8.997

аргумент: 1.0938 функция: -8.9912

В ДАННОЙ ИТЕРАЦИИ оптимальный аргумент: 1.0156 минимальная функция: -8.9998

очередная итерация

аргумент: 0.99609 функция: -9

аргумент: 1.0156 функция: -8.9998

аргумент: 1.0352 функция: -8.9988

аргумент: 1.0547 функция: -8.997

В ДАННОЙ ИТЕРАЦИИ оптимальный аргумент: 0.99609 минимальная функция: -9

ВОПРОС выводить пошагово как таблицу? Да=1 нет=0 1

ВОПРОС выводить график? Да=1 нет=0 1

вывод результатов

номер= 1 аргумент=-10.000 функция=112.000

номер= 2 аргумент= -5.000 функция= 27.000

номер= 3 аргумент= 0.000 функция= -8.000

номер= 4 аргумент= 5.000 функция= 7.000

номер= 5 аргумент= 10.000 функция= 72.000

номер= 6 аргумент= -5.000 функция= 27.000

номер= 7 аргумент= -2.500 функция= 3.250

номер= 8 аргумент= 0.000 функция= -8.000

номер= 9 аргумент= 2.500 функция= -6.750

номер= 10 аргумент= 5.000 функция= 7.000

номер= 11 аргумент= -2.500 функция= 3.250

номер= 12 аргумент= -1.250 функция= -3.938

номер= 13 аргумент= 0.000 функция= -8.000

номер= 14 аргумент= 1.250 функция= -8.938

номер= 15 аргумент= 2.500 функция= -6.750

Часть вывода вырезана

номер= 39 аргумент= 1.055 функция= -8.997

номер= 40 аргумент= 1.094 функция= -8.991

номер= 41 аргумент= 0.977 функция= -8.999

номер= 42 аргумент= 0.996 функция= -9.000

номер= 43 аргумент= 1.016 функция= -9.000

номер= 44 аргумент= 1.035 функция= -8.999

номер= 45 аргумент= 1.055 функция= -8.997

НАЙДЕН МИНИМУМ

оптимальное значение аргумента=0.99609

минимум функции=-9 с точностью: 0.0017548

 


Поделиться:



Популярное:

Последнее изменение этой страницы: 2017-03-03; Просмотров: 654; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.061 с.)
Главная | Случайная страница | Обратная связь