
МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ СВЯЗИ И
МАССОВЫХ КОММУНИКАЦИЙ
Ордена трудового Красного Знамени федеральное государственное бюджетное
образовательное учреждение высшего образования
«Московский технический университет связи и информатики»
Кафедра «Информатика»
Лабораторная работа №6
по дисциплине «Численные методы»
на тему
«Одномерная оптимизация»
Проверил:
Москва, 2024
Содержание
1.Постановка задачи 2
2.Исследование индивидуального варианта задания 3
3.Метод золотого сечения 6
4.Метод дихотомии 13
5.Вычислить число итераций, необходимых, чтобы локализовать точку минимума с точностью E1 = 10-4 методами дихотомии и золотого сечения. 14
6.Оптимизация с помощью пакета Mathcad 16
7.Выводы 16
1.Постановка задачи
1.Выбрать индивидуальное задание по номеру варианта из табл. 5-1 для решения задачи одномерной оптимизации: функцию f(x), минимум которой необходимо найти.
2.Провести
исследование индивидуального варианта
задания: построить график функции
,
выбрать начальный отрезок неопределенности
(отрезок, содержащий точку минимума),
проверить выполнение аналитического
условия унимодальности функции на
выбранном отрезке.
3.Создать в сценарии функцию для проведения значений 3-х итераций определить длину отрезка, содержащего точку минимума, после трех итераций.
4.Написать и выполнить программу, реализующую программу метода, вычисляющую координаты точки минимума функции с заданной точностью 10-4.
5.Вычислить число итераций, необходимых, чтобы локализовать точку минимума с точностью E1 = 10-4 методами дихотомии и золотого сечения.
6.Решить задачу оптимизации с использованием функции minimize пакета Mathcad.
№ вар. |
Целевая функция |
25 |
f(x) = sin(2x) – x |
2.Исследование индивидуального варианта задания
График функции, построенный на достаточно большом отрезке ОДЗ функции:
Выберем по построенному графику функции начальный отрезок неопределенности (отрезок, содержащий точку минимума): отрезок [2.4;2.8]
Проверим унимодальность функции на данном отрезке:
х
|
2.4 |
2.5 |
2.6 |
2.7 |
2.8 |
f’(x) |
-0.825002 |
-0.4326756 |
-0.0629667 |
0.2693858 |
0.5511318 |
f’’ (x) |
3.9846584 |
3.8356971 |
3.5338186 |
3.091058 |
2.5250666 |
Так как производная от функции меняет знак с минуса на плюс один раз, и производная второго порядка больше нуля на всей длине, отрезок содержит точку минимума, следовательно функция на выбранном отрезке – унимодальна.
3.Метод золотого сечения
Проведём расчёт трёх итераций методом золотого сечения в программе Mathcad:
Результаты работы:
-
N
a
b
x1
x2
f(x1)
f(x2)
Δn
0
2.4
2.8
2.5528
2.6472
-3.4764
-3.4825
0.2472
1
2.5528
2.8
2.6472
2.7055
-3.4825
-3.4712
0.1528
2
2.5528
2.7055
2.6111
2.6472
-3.4839
-3.4825
0.0944
3
2.5528
2.6472
Проведём расчёт методом золотого сечения с помощью программы:
import math
a = 2.4
b = 2.8
E = 0.0001
def Q(x):
return math.sin(2 * x) - x
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}')
Результат работы кода:
1 итерация
Текущие значения: a=2.4, b=2.8, x1=2.5527864045000417, x2=2.6472135954999576, Q1=-3.476480323858287, Q2=-3.4825575205243195, Длина интервала=0.3999999999999999
2 итерация
Текущие значения: a=2.5527864045000417, b=2.8, x1=2.6472135954999576, x2=2.705572809000084, Q1=-3.4825575205243195, Q2=-3.471215400914123, Длина интервала=0.24721359549995814
3 итерация
Текущие значения: a=2.5527864045000417, b=2.705572809000084, x1=2.611145618000168, x2=2.6472135954999576, Q1=-3.4839378380612103, Q2=-3.4825575205243195, Длина интервала=0.15278640450004222
4 итерация
Текущие значения: a=2.5527864045000417, b=2.6472135954999576, x1=2.5888543819998313, x2=2.611145618000168, Q1=-3.48253250364272, Q2=-3.4839378380612103, Длина интервала=0.09442719099991592
5 итерация
Текущие значения: a=2.5888543819998313, b=2.6472135954999576, x1=2.611145618000168, x2=2.624922359499621, Q1=-3.4839378380612103, Q2=-3.483936359715878, Длина интервала=0.058359213500126295
6 итерация
Текущие значения: a=2.5888543819998313, b=2.624922359499621, x1=2.6026311234992843, x2=2.611145618000168, Q1=-3.4836081081998986, Q2=-3.4839378380612103, Длина интервала=0.03606797749978963
7 итерация
Текущие значения: a=2.6026311234992843, b=2.624922359499621, x1=2.611145618000168, x2=2.6164078649987377, Q1=-3.4839378380612103, Q2=-3.4840149222548535, Длина интервала=0.022291236000336667
8 итерация
Текущие значения: a=2.611145618000168, b=2.624922359499621, x1=2.6164078649987377, x2=2.6196601125010512, Q1=-3.4840149222548535, Q2=-3.4840144761068945, Длина интервала=0.01377674149945296
9 итерация
Текущие значения: a=2.611145618000168, b=2.6196601125010512, x1=2.614397865502481, x2=2.6164078649987377, Q1=-3.483996853193108, Q2=-3.4840149222548535, Длина интервала=0.008514494500883263
10 итерация
Текущие значения: a=2.614397865502481, b=2.6196601125010512, x1=2.6164078649987377, x2=2.6176501130047947, Q1=-3.4840149222548535, Q2=-3.4840190770648523, Длина интервала=0.0052622469985701414
11 итерация
Текущие значения: a=2.6164078649987377, b=2.6196601125010512, x1=2.6176501130047947, x2=2.6184178644949943, Q1=-3.4840190770648523, Q2=-3.4840189704654208, Длина интервала=0.0032522475023135655
12 итерация
Текущие значения: a=2.6164078649987377, b=2.6184178644949943, x1=2.6171756164889377, x2=2.6176501130047947, Q1=-3.4840181217130604, Q2=-3.4840190770648523, Длина интервала=0.002009999496256576
13 итерация
Текущие значения: a=2.6171756164889377, b=2.6184178644949943, x1=2.6176501130047947, x2=2.6179433679791373, Q1=-3.4840190770648523, Q2=-3.484019277356933, Длина интервала=0.0012422480060565455
14 итерация
Текущие значения: a=2.6176501130047947, b=2.6184178644949943, x1=2.6179433679791373, x2=2.618124609520651, Q1=-3.484019277356933, Q2=-3.4840192521754054, Длина интервала=0.0007677514901995863
15 итерация
Текущие значения: a=2.6176501130047947, b=2.618124609520651, x1=2.6178313545463086, x2=2.6179433679791373, Q1=-3.484019236022906, Q2=-3.484019277356933, Длина интервала=0.0004744965158565151
16 итерация
Текущие значения: a=2.6178313545463086, b=2.618124609520651, x1=2.6179433679791373, x2=2.6180125960878224, Q1=-3.484019277356933, Q2=-3.4840192811690835, Длина интервала=0.00029325497434262715
17 итерация
Текущие значения: a=2.6179433679791373, b=2.618124609520651, x1=2.6180125960878224, x2=2.6180553814119665, Q1=-3.4840192811690835, Q2=-3.48401927522431, Длина интервала=0.00018124154151388794
18 итерация
Текущие значения: a=2.6179433679791373, b=2.6180553814119665, x1=2.6179861533032813, x2=2.6180125960878224, Q1=-3.48401928167258, Q2=-3.4840192811690835, Длина интервала=0.0001120134328291833
Минимум в точке x=2.61797798203348 равен -3.484019281338273 с точностью 0.0001
Всего итераций: 18
-
N
a
b
x1
x2
f(x1)
f(x2)
Δn
1
2.4
2.8
2.55279
2.64721
-3.47648
-3.48255
0.4
2
2.55
2.8
2.64721
2.70557
-3.48256
-3.47122
0.247
3
2.55
2.70
2.61115
2.64721
-3.48394
-3.48256
0.152
4
2.55
2.65
2.58885
2.61115
-3.48253
-3.48394
0.094
5
2.59
2.65
2.61115
2.62492
-3.48394
-3.48394
0.058
6
2.59
2.62
2.60263
2.61115
-3.48360
-3.48394
0.036
7
2.60
2.62
2.61115
2.61641
-3.48394
-3.48401
0.022
8
2.61
2.62
2.61641
2.61966
-3.48401
-3.48401
0.014
9
2.61
2.62
2.61439
2.61641
-3.48399
-3.48401
0.009
10
2.61
2.62
2.61641
2.61765
-3.48401
-3.48402
0.005
11
2.61
2.61
2.61765
2.61842
-3.48402
-3.48402
0.003
12
2.61
2.61
2.61718
2.61765
-3.48402
-3.48402
0.002
13
2.61
2.61
2.61765
2.61794
-3.48402
-3.48402
0.001
14
2.61
2.61
2.61794
2.61812
-3.48402
-3.48402
0.0008
15
2.61
2.61
2.61783
2.61794
-3.48402
-3.48402
0.0005
16
2.61
2.61
2.61794
2.61802
-3.48402
-3.48402
0.0003
17
2.61
2.61
2.61802
2.61806
-3.48402
-3.48402
0.0002
18
2.61
2.61
2.61799
2.61801
-3.48402
-3.48402
0.0001
Минимум в точке x=2.61797798203348 равен -3.484019281338273 с точностью 0.0001
Всего итераций: 18