Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Метод локализации экстремума
Метод локализации представляет собой модификацию метода сканирования. При его использовании существенно снижается количество выполняемых вычислений. Весь интервал поиска, как и в методе сканирования, разбивается на несколько частей, но более крупных размеров (чаще всего на 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; Просмотров: 657; Нарушение авторского права страницы