Файл: Исследование операций и методы оптимизации км1.docx

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

Категория: Не указан

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

Добавлен: 22.11.2023

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

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

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Исследование операций и методы оптимизации КМ-1

Выполнил студент

Группы: ИЭ-62-21

ФИО: Купчик Ю. Г.

1.Задание.

Составить программы реализующие методы поиска и найти точку минимума функции x^2+e^x на отрезке [-1;0] с количеством итераций n=18

Сравнить заданные в варианте методы по получаемой длине локализации.

1.1 Метод перебора на равномерной сетке.

f = @(x) x^2 + exp(x);

a = -1;

b = 0;

n = 18;

x_vals = linspace(a, b, n+1);

min_value = inf;

for i = 1:length(x_vals)

curr_value = f(x_vals(i));

if curr_value < min_value

min_value = curr_value;

x_min = x_vals(i);

end

end

disp(['Минимальное значение функции: ', num2str(min_value)]);

disp(['Точка минимума: ', num2str(x_min)]);

1.2 Метод дихотомии.

f = @(x) x^2 + exp(x);

a = -1;

b = 0;

n = 18;

for k = 1:n

x_k = (a + b - 0.1) / 2;

y_k = (a + b + 0.1) / 2;

if f(x_k) < f(y_k)

b = y_k;

else

a = x_k;

end

end

x_min = (a + b) / 2;

min_value = f(x_min);

disp(['Минимальное значение функции: ', num2str(min_value)]);

disp(['Точка минимума: ', num2str(x_min)]);

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

f = @(x) x^2 + exp(x);

a = -1;

b = 0;

n = 18;

phi = (1 + sqrt(5)) / 2;

x_k = b - (b - a) / phi;

y_k = a + (b - a) / phi;

for k = 1:n

if f(x_k) < f(y_k)

b = y_k;

y_k = x_k;

x_k = b - (b - a) / phi;

else

a = x_k;

x_k = y_k;

y_k = a + (b - a) / phi;

end

end

x_min = (a + b) / 2;

min_value = f(x_min);

disp(['Минимальное значение функции: ', num2str(min_value)]);

disp(['Точка минимума: ', num2str(x_min)]);

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

f = @(x) x^2 + exp(x);

a = -1;

b = 0;

n = 18;

F = zeros(1, n + 1);

F(1) = 1;

F(2) = 1;

for i = 3:n+1

F(i) = F(i-1) + F(i-2);

end

x_k = zeros(1, n+1);

y_k = zeros(1, n+1);

x_k(1) = a + (b - a) * F(n-1) / F(n+1);

y_k(1) = a + b - x_k(1);

for k = 2:n

if f(x_k(k-1)) > f(y_k(k-1))

a = x_k(k-1);

x_k(k) = y_k(k-1);

y_k(k) = a + b - x_k(k);

else

b = y_k(k-1);

y_k(k) = x_k(k-1);

x_k(k) = a + b - y_k(k);

end

end

x_min = (a + b) / 2;

min_value = f(x_min);

disp(['Минимальное значение функции: ', num2str(min_value)]);

disp(['Точка минимума: ', num2str(x_min)]);

1.5 Метод Больцано.

f = @(x) x^2 + exp(x);

a = -1;

b = 0;

n = 18;

for k = 1:n

x_k = a + (b - a) / 3;

y_k = b - (b - a) / 3;

if f(x_k) < f(y_k)

b = y_k;

else

a = x_k;

end

end

x_min = (a + b) / 2;

min_value = f(x_min);

disp(['Минимальное значение функции: ', num2str(min_value)]);

disp(['Точка минимума: ', num2str(x_min)]);

1.6 Метод касательных.

f = @(x) x^2 + exp(x);

df = @(x) 2*x + exp(x);

x0 = -0.5;

n = 18;

x_k = x0;

for k = 1:n

x_k1 = x_k - f(x_k) / df(x_k);

x_k = x_k1;

end

min_value = f(x_k);

disp(['Минимальное значение функции: ', num2str(min_value)]);

disp(['Точка минимума: ', num2str(x_k)]);

1.7 Метод парабол.

f = @(x) x^2 + exp(x);

a = -1;

b = 0;

n = 18;

tol = 1e-6;

x1 = a;

x2 = (a + b) / 2;

x3 = b;

f1 = f(x1);

f2 = f(x2);

f3 = f(x3);

for i = 1:n

a0 = f1;

a1 = (f2 - f1) / (x2 - x1);

a2 = ((f3 - f1) / (x3 - x1) - (f2 - f1) / (x2 - x1)) / (x3 - x2);


x_min = 0.5 * (x1 + x2 - a1 / a2);

f_min = f(x_min);

if x_min < x2

if f_min < f2

x3 = x2;

f3 = f2;

x2 = x_min;

f2 = f_min;

else

x1 = x_min;

f1 = f_min;

end

else

if f_min < f2

x1 = x2;

f1 = f2;

x2 = x_min;

f2 = f_min;

else

x3 = x_min;

f3 = f_min;

end

end

% Проверка точности

if abs(x3 - x1) < tol

break;

end

end

disp(['Минимальное значение функции: ', num2str(f_min)]);

disp(['Точка минимума: ', num2str(x_min)]);

2. Таблица результатов.

Название метода

Точка минимума

Перебор на равномерной сетке

-0.33333

Метод дихотомии

-0.35184

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

-0.35173

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

-0.35195

Метод Больцано

-0.3516

Метод касательных

-1.0063

Метод парабол

-0.35173

2.1 Вывод.

Наиболее точные результаты дали методы касательных и метод Больцано с очень маленькой длиной локализации, а метод золотого сечения и перебора на равномерной сетке дали наименее точные результаты.