ВУЗ: Не указан

Категория: Отчет по практике

Дисциплина: Не указана

Добавлен: 05.12.2023

Просмотров: 57

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
МИНОБРНАУКИ РОССИИСанкт-Петербургский государственныйэлектротехнический университет«ЛЭТИ» им. В.И. Ульянова (Ленина)Кафедра информационных системотчетпо лабораторной работе №1по дисциплине «Системы ППР»Тема: Минимизация функций однойпеременной в пакете Matlab.Вариант: 6

Студент гр. 6373







Преподаватель






Санкт-Петербург2020Цель работы.Четырьмя методами найти локальные минимумы следующих функций:




Нахождение минимумов формулы №1Вид функции на языке Matlab:function y = fx(x) y = x.^2.*exp(-1/5*x);end Таблица 1 – Нахождение локального минимума




Оптимальный

пассивный

поиск

(delta = 0.0001)

Метод деления отрезка пополам (delta = 0.0001)

Метод Фибоначчи

(eps = 0.0001)

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

(eps = 0.0001)

X локального минимума

1.6859e-12

0

6.2931e-05

5.9609e-05

Значение функции в точке минимума

2.8423e-24

0

3.9603e-09

3.5532e-09
Точки минимума получились разные, но они близки друг к другу. Разный результат объясняется погрешностью. Убедимся в правильности найденных точек, построив график функции (рис. 1).
Рисунок 1 – График функции.Из графика видно, что точки найдены верно.Нахождение минимумов формулы №2Вид функции на языке Matlab:function y = fx(x) y = x*exp(x)+sin(x); end Таблица 2 – Нахождение локального минимума




Оптимальный

пассивный

поиск

(delta = 0.0001)

Метод деления отрезка пополам (delta = 0.0001)

Метод Фибоначчи

(eps = 0.0001)

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

(eps = 0.0001)

X локального минимума

-1.4633, -7.8513,

-14.1372, -2πn

-1.4633, -7.8513,

-14.1372, -2πn

-1.4633, -7.8513,

-14.1372, -2πn

-1.4633, -7.8513,

-14.1372, -2πn

Значение функции в точке минимума

-1.3329, -1,

-1, …, -1

-1.3329, -1,

-1, …, -1

-1.3329, -1,

-1, …, -1

-1.3329, -1,

-1, …, -1
Так как на промежутке [-∞:-2] функция представляет собой синусоиду c периодом 2πn, то у неё бесконечное количество локальных минимумов. Убедимся в правильности найденных точек, построив график функции (рис. 2).Рисунок 2 – График функции.Из графика видно, что точки найдены верно.Выводы.В данной лабораторной работе были найдены локальные минимумы двух функций с помощью: оптимального пассивного поиска, метода деления отрезка пополам, метода Фибоначчи и метода золотого сечения. При нахождении локальных минимумов первой функции получилось 4 разных ответа, но они очень близки друг к другу. Эту разницу можно объяснить погрешностью. Полученные результаты были проверены с помощью графика.Найти все локальные минимумы второй функции невозможно, так как на промежутке [-∞:-2] функция представляет собой синусоиду c периодом 2πn. Полученные результаты были проверены с помощью графика.ПРИЛОЖЕНИЕ 1Используемый код

  1. Метод оптимального пассивного поиска – Файл passiveSearch.m
function x=passiveSearch(a,b,delta)%Вход - a - Начало интервала% - b - Конец интервала

% - delta - Расстояние между точками%Выход - x - Минимальный локальный минимумi = a;min_x = i;min_y = fx(min_x);while i<=b if (min_y > fx(i))min_x = i;min_y = fx(min_x);endi = i + delta;endx = min_x; end

  1. Метод деления отрезка пополам – Файл delotrpopolam.m
function x=delotrpopolam(a,b,delta)ak=a;bk=b; xkc=0;l2k=bk-ak;while l2k>delta %3 этап%l2k=bk-ak;xkc=(ak+bk)/2;Fxkc=fx(xkc);%4 этап%yk=ak+l2k/4;zk=bk-l2k/4;Fyk=fx(yk);Fzk=fx(zk);if Fykbk=xkc;elseif Fzkak=xkcelseak=yk;bk=zk;endendx=xkc; end

  1. Поиск по золотому сечнию – Файл goldcut.m
function x=goldencut(a,b,eps,func)m=1/eps;d(1)=b-a;a1=2/(3+sqrt(5));a2=2/(1+sqrt(5));alf=a+a1*d(1);bet=a+a2*d(1);ak(1)=a;bk(1)=b;fa(1)=func(alf);fb(1)=func(bet);for i=1:mif fa(i)>fb(i)ak(i+1)=alf;bk(i+1)=bk(i);d(i+1)=bk(i+1)-ak(i+1);alf=bet;bet=ak(i+1)+a2*d(i+1);fa(i+1)=fb(i);fb(i+1)=func(bet);endif fa(i)<=fb(i)ak(i+1)=ak(i);bk(i+1)=bet;d(i+1)=bk(i+1)-ak(i+1) ;bet=alf;alf=ak(i+1)+a1*d(i+1);fa(i+1)=func(alf);fb(i+1)=fa(i);endepsilon=bet-alf;if epsilonbreak;endendx=(alf+bet)/2;end

  1. Метод фибоначчи –
Файл Fibb.mfunction Bn=Fibb(n)if(n==1)or (n==2)Bn=1;end;if(n==3)Bn=2;end;B(1)=1;B(2)=1;for i=3:n+1B(i)=B(i-1)+B(i-2);end;B(n)=B(n+1);Bn=B(n);endФайл MethodFibb.mfunction x=MetodFibb(a,b,eps) m=1/eps;d(1)=b-a;n=1;for i=3:mB=Fibb(i);a1=d(1)/B;if a1>epsn=i-1;end;end;alf=a+d(1)*Fibb(n-1)/Fibb(n+1);bet=a+d(1)*Fibb(n)/Fibb(n+1) ;fa(1)=fx(alf);fb(1)=fx(bet);ak(1)=a;bk(1)=b;for i=1:nk=i-1;k0=n-k;k1=k0-1;k2=k0+1;if fa(i)>fb(i)ak(i+1)=alf;bk(i+1)=bk(i);d(i+1)=bk(i+1)-ak(i+1);alf=bet;bet=ak(i+1)+d(i+1)*Fibb(k0)/Fibb(k2);fa(i+1)=fb(i);fb(i+1)=fx(bet);end;if fa(i)<=fb(i)ak(i+1)=ak(i);bk(i+1)=bet;d(i+1)=bk(i+1)-ak(i+1);bet=alf;alf=ak(i+1)+d(i+1)*Fibb(k1)/Fibb(k2);fa(i+1)=fx(alf);fb(i+1)=fa(i);end;epsilon=bet-alf;if epsilonbreak;end;end;x=(alf+bet)/2;end