Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Метод поиска минимума функции обратным половинным шагом




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

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

метод обратным половинным шагом

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

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

исходные данные

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

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

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

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

аргумент:-9.8 функция:107.64

аргумент:-9.6 функция:103.36

аргумент:-9.4 функция:99.16

аргумент:-9.2 функция:95.04

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

аргумент:-8.8 функция:87.04

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

аргумент:-0.2 функция:-7.56

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

аргумент:0.2 функция:-8.36

аргумент:0.4 функция:-8.64

аргумент:0.6 функция:-8.84

аргумент:0.8 функция:-8.96

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

аргумент:1.2 функция:-8.96

В отличии от приведенного выше примера, работа при достижении минимального изменения функции завершена не была, поэтому произошла смена знака шага по аргументу и его уменьшение вдвое.

dx = -0.1000

аргумент:1.1 функция:-8.99

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

xeps

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

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

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

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

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

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

номер= 4 аргумент= -9.200 функция= 95.040

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

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

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

номер= 54 аргумент= 0.800 функция= -8.960

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

номер= 56 аргумент= 1.200 функция= -8.960

номер= 57 аргумент= 1.100 функция= -8.990

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

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

оптимальное значение аргумента=1 с точностью (по аргументу):0.1

минимум функции=-9 с точностью (по функции):0.01

выполнено:58 итераций

 

Метод золотого сечения

В основе этого метода лежит правило геометрического отношения или золотого сечения:

или ,

где – длина всего отрезка; – длина его большей части; – длина его меньшей части.

Рис. 2.5. Графическая иллюстрация правила золотого сечения

 

В соответствии с этим правилом определяются точки исследуемого интервала, в которых необходимо производить вычисление функции .

Из рис. 2.5 следует, что:

. (1)

Тогда, подставляя в (1) соотношение (2) получим:

 

. (2)

Обозначив отношение и подставив его в (2), получим:

, (3)

откуда следует:

. (4)

Решение этого уравнения дает:

. (5)

Поскольку , то его значение принимается равным:

. (6)

R
х 3
х 1
х 2
х 4
х min
х max

Рис. 2.6. Графическая иллюстрация метода золотого сечения

На исследуемом интервале (рис. 2.6) определяются две точки X 1 = X min + k ² a и X 2 = X min + ka, где а – длина интервала [ X min, X max]. Находим значения функции в точках X min, X 1, X 2, X max. Если наименьшее значение R будет соответствовать точке X 1, то новым интервалом поиска будет [ X min, X 2], и на этом интервале находится новая точка X 3 = X min + k ² a, где ka – длина интервала [ X min, X 2] Если наименьшее значение R будет в соответствовать точке X 2, то новым интервалом поиска будет [ X 1, X max], и на этом интервале находится новая точка X 4 = X 1 + ka, где ka – длина интервала [ X 1, X max]. Затем процедура повторяется. Абсолютная ошибка в определении экстремума после s вычислений будет вычисляться по формуле:

. (7)

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

function[]=ZolotSechenie1D_170809();

function y=f(x)

y=(x+2).*(x-4);

end

disp('МЕТОД ПОИСКА МИНИМУМА ФУНКЦИИ МЕТОДОМ ЗОЛОТОГО СЕЧЕНИЯ');

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

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

function [x,y,xleft1,xright1,nn]=ZolS1()

eps=input('точность=');

xleft=input('левый край поиска=');

xright=input('правый край поиска=');

xleft1=xleft; %возвращаемые значения

xright1=xright; %возвращаемые значения

k=(sqrt(5)-1)/2; %число К, показывающее отношения длин отрезков

x1=xleft+k*k*abs(xleft-xright);

x2=xleft+k*abs(xleft-xright);

z=0;

j=0;

nn=1;

disp('ВЫВОД ПРОМЕЖУТОЧНЫХ РЕЗУЛЬТАТОВ ПОШАГОВО ');

while abs(xleft-xright)>eps

R1=f(x1);

R2=f(x2);

if R1<R2 % если минимум в точке Х1

z=x1; % для возвращения значения минимума

j=R1; % для возвращения значения минимума

%для следующей итерации подготавливаем интервал с четырьмя точками по правилу золотого сечения вместо xleft,x1,x2

xright=x2;

x2=x1;

x1=xleft+k*k*abs(xleft-xright);

%возвращаемые значения

mas1x(nn)=x1;

mas1y(nn)=R1;

else %если минимум в точке Х2

z=x2;

j=R2;

%для следующей итерации подготавливаем интервал с четырьмя точками по правилу золотого сечения вместо x1,x2,xright

xleft=x1;

x1=x2;

x2=xleft+k*abs(xleft-xright);

%возвращаемые значения

mas1x(nn)=x2;

mas1y(nn)=R2;

end %конец if

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

string=strcat('шаг номер:',int2str(nn),' аргумент:',num2str(mas1x(nn)),' функция от него:',num2str(mas1y(nn)));

disp(string);

nn=nn+1;

end %конец while

%возвращаемые значения найденного минимума и возвращения значения

x=z;

y=j;

nn=nn-1;

end

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

[x,y,xleft1,xright1,nn]=ZolS1();

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

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

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

sx=strcat('оптимальное значение аргумента=',num2str(x),' с точностью:',num2str(abs(mas1x(nn)-mas1x(nn-1))));

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

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

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

disp(sy)

disp(sn)

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

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 Gold 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)

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

точность=0.1

левый край поиска=-10

правый край поиска=10

ВЫВОД ПРОМЕЖУТОЧНЫХ РЕЗУЛЬТАТОВ ПОШАГОВО

шаг номер:1 аргумент:5.2786 функция от него:-7.1486

шаг номер:2 аргумент:0.55728 функция от него:-7.1486

шаг номер:3 аргумент:-0.55728 функция от него:-8.804

шаг номер:4 аргумент:1.2461 функция от него:-8.804

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

шаг номер:9 аргумент:0.92089 функция от него:-8.9997

шаг номер:10 аргумент:1.0214 функция от него:-8.9997

шаг номер:11 аргумент:0.95928 функция от него:-8.9997

шаг номер:12 аргумент:0.99767 функция от него:-8.9997

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

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

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

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

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

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

номер= 4 аргумент= 1.246 функция= -8.804

номер= 5 аргумент= 1.672 функция= -8.939

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

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

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

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

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

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

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

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

оптимальное значение аргумента=0.98301 с точностью:0.038388

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

выполнено:12 итераций

Рис. 2.7. Пример применения метода золотого сечения






Поделиться с друзьями:


Дата добавления: 2016-11-18; Мы поможем в написании ваших работ!; просмотров: 486 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Своим успехом я обязана тому, что никогда не оправдывалась и не принимала оправданий от других. © Флоренс Найтингейл
==> читать все изречения...

2376 - | 2185 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.