Министерство цифрового развития, связи и массовых коммуникаций Российской Федерации
Ордена Трудового Красного Знамени Федеральное государственное бюджетное образовательное учреждение высшего образования «Московский технический университет связи и информатики» (МТУСИ)
Кафедра: Информатика
Дисциплина: Численные методы
Лабораторная работа №6
Одномерная оптимизация
Выполнил:
студент группы БИК2207
Москва 2024
Содержание
1.Постановка задачи………………………………………………………………3
2.Исследование индивидуального варианта задания…………….……………..4
3.Метод золотого сечения………………………………………………………...6
4.Метод дихотомии……………………………………………………………….9
5.Вычислить число итераций, необходимых, чтобы локализовать точку минимума с точностью E1 = 10-4 методами дихотомии и золотого сечения……………………………………………………………………………12
6.Оптимизация с помощью пакета Mathcad……………………………………13
7.Выводы…………………………………………………………………………13
1.Постановка задачи
1.Выбрать индивидуальное задание по номеру варианта из таблицы для решения задачи одномерной оптимизации: функцию f(x), минимум которой необходимо найти.
2.Провести
исследование индивидуального варианта
задания: построить график функции
,
выбрать начальный отрезок неопределенности
(отрезок, содержащий точку минимума),
проверить выполнение аналитического
условия унимодальности функции на
выбранном отрезке.
3.Создать в сценарии функцию для проведения значений 3-х итераций определить длину отрезка, содержащего точку минимума, после трех итераций.
4.Написать и выполнить программу, реализующую программу метода, вычисляющую координаты точки минимума функции с заданной точностью 10-4.
5.Вычислить число итераций, необходимых, чтобы локализовать точку минимума с точностью E1 = 10-4 методами дихотомии и золотого сечения.
6.Решить задачу оптимизации с использованием функции minimize пакета Mathcad.
№ вар. |
Целевая функция |
16 |
|
2.Исследование индивидуального варианта задания
График функции, построенный на достаточно большом отрезке ОДЗ функции:
Выберем по построенному графику функции начальный отрезок неопределенности (отрезок, содержащий точку минимума): отрезок [1.3;1.7]
Проверим унимодальность функции на данном отрезке:
Так как производная от функции меняет знак с минуса на плюс один раз, и производная второго порядка больше нуля на всей длине, отрезок содержит точку минимума, следовательно функция на выбранном отрезке – унимодальна.
3.Метод золотого сечения
Проведём расчёт трёх итераций методом золотого сечения в программе Mathcad:
Результаты работы:
-
N
a
b
x1
x2
f(x1)
f(x2)
Δn
0
1.3
1.7
1.453
1.547
-0.1398
-0.2127
0.247
1
1.453
1.7
1.547
1.606
-0.2127
-0.165
0.153
2
1.453
1.606
1.511
1.547
-0.2044
-0.2127
0.094
3
1.511
1.606
Проведём расчёт методом золотого сечения с помощью программы:
import math
a = 1.3
b = 1.7
E = 0.0001
def Q(x):
return math.sin(math.e**x)-math.e**(-x)+1
k2 = (-1 + math.sqrt(5)) / 2
k1 = 1 - k2
x1 = a + k1 * (b - a)
x2 = a + k2 * (b - a)
Q1 = Q(x1)
Q2 = Q(x2)
iteration_count = 0
while abs(b - a) > E:
iteration_count += 1
print(f"Текущие значения: a={a}, b={b}, x1={x1}, x2={x2}, Q1={Q1}, Q2={Q2}, Длина интервала={b-a}")
if Q1 > Q2:
a = x1
x1 = x2
Q1 = Q2
x2 = a + k2 * (b - a)
Q2 = Q(x2)
else:
b = x2
x2 = x1
Q2 = Q1
x1 = a + k1 * (b - a)
Q1 = Q(x1)
min_x = (a + b) / 2
min_Q = Q(min_x)
print(f"Итоговые значения: a={a}, b={b}, x1={x1}, x2={x2}, Q1={Q1}, Q2={Q2}, Длина интервала={b-a}")
print(f'Минимум в точке x={min_x} равен {min_Q} с точностью {E}')
print(f'Всего итераций: {iteration_count}')
Результат работы кода:
0 итерация
значения: a=1.452786404500042, b=1.7, x1=1.547213595499958, x2=1.605572809000084, Q1=-0.21274180824887434, Q2=-0.16499141858103483, Длина интервала=0.24721359549995792
1 итерация
значения: a=1.452786404500042, b=1.605572809000084, x1=1.5111456180001681, x2=1.547213595499958, Q1=-0.2044166084757575, Q2=-0.21274180824887434, Длина интервала=0.152786404500042
2 итерация
значения: a=1.5111456180001681, b=1.605572809000084, x1=1.547213595499958, x2=1.5695048315002944, Q1=-0.21274180824887434, Q2=-0.20393025404001763, Длина интервала=0.09442719099991592
3 итерация
значения: a=1.5111456180001681, b=1.5695048315002944, x1=1.5334368540005046, x2=1.547213595499958, Q1=-0.21272785867107236, Q2=-0.21274180824887434, Длина интервала=0.058359213500126295
4 итерация
значения: a=1.5334368540005046, b=1.5695048315002944, x1=1.547213595499958, x2=1.5557280900008412, Q1=-0.21274180824887434, Q2=-0.21069387688572716, Длина интервала=0.03606797749978985
5 итерация
значения: a=1.5334368540005046, b=1.5557280900008412, x1=1.5419513485013878, x2=1.547213595499958, Q1=-0.21321490593005432, Q2=-0.21274180824887434, Длина интервала=0.022291236000336667
6 итерация
значения: a=1.5334368540005046, b=1.547213595499958, x1=1.5386991009990745, x2=1.5419513485013878, Q1=-0.21320991440603643, Q2=-0.21321490593005432, Длина интервала=0.013776741499453404
7 итерация
значения: a=1.5386991009990745, b=1.547213595499958, x1=1.5419513485013878, x2=1.5439613479976446, Q1=-0.21321490593005432, Q2=-0.21310479753534461, Длина интервала=0.008514494500883485
8 итерация
значения: a=1.5386991009990745, b=1.5439613479976446, x1=1.540709100495331, x2=1.5419513485013878, Q1=-0.2132396263938734, Q2=-0.21321490593005432, Длина интервала=0.0052622469985701414
9 итерация
значения: a=1.5386991009990745, b=1.5419513485013878, x1=1.5399413490051312, x2=1.540709100495331, Q1=-0.21323842570708074, Q2=-0.2132396263938734, Длина интервала=0.0032522475023133435
10 итерация
значения: a=1.5399413490051312, b=1.5419513485013878, x1=1.540709100495331, x2=1.541183597011188, Q1=-0.2132396263938734, Q2=-0.21323407938949623, Длина интервала=0.002009999496256576
11 итерация
значения: a=1.5399413490051312, b=1.541183597011188, x1=1.5404158455209882, x2=1.540709100495331, Q1=-0.2132406511761069, Q2=-0.2132396263938734, Длина интервала=0.0012422480060567676
12 итерация
значения: a=1.5399413490051312, b=1.540709100495331, x1=1.540234603979474, x2=1.5404158455209882, Q1=-0.21324036743840247, Q2=-0.2132406511761069, Длина интервала=0.0007677514901998084
13 итерация
значения: a=1.540234603979474, b=1.540709100495331, x1=1.5404158455209882, x2=1.5405278589538172, Q1=-0.2132406511761069, Q2=-0.21324047630858534, Длина интервала=0.0004744965158569592
14 итерация
значения: a=1.540234603979474, b=1.5405278589538172, x1=1.5403466174123033, x2=1.5404158455209882, Q1=-0.21324062545896272, Q2=-0.2132406511761069, Длина интервала=0.00029325497434307124
15 итерация
значения: a=1.5403466174123033, b=1.5405278589538172, x1=1.5404158455209882, x2=1.5404586308451322, Q1=-0.2132406511761069, Q2=-0.21324061597034505, Длина интервала=0.00018124154151388794
16 итерация
значения: a=1.5403466174123033, b=1.5404586308451322, x1=1.5403894027364473, x2=1.5404158455209882, Q1=-0.21324065341515297, Q2=-0.2132406511761069, Длина интервала=0.00011201343282896126
17 итерация
Итоговые значения: a=1.5403466174123033, b=1.5404158455209882, x1=1.540373060196844, x2=1.5403894027364473, Q1=-0.2132406473439432, Q2=-0.21324065341515297, Длина интервала=6.922810868492668e-05
Минимум в точке x=1.5403812314666459 равен -0.213240651091412 с точностью 0.0001
Всего итераций: 18
