Добавил:
ysveta99
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:2
.pyimport numpy as np
from matplotlib import pyplot as plt
writer = lambda a, b, steps: {'a':a,'b':b,'steps':steps}
f = lambda x0: np.cos(np.pi+x0)
eps = 2**(-15)
a = -np.pi/2
b = np.pi/4
eps0 = [[],[],[],[]]
res = []
#1Алгоритм равномерного поиска
n = 50
steps = 0
a1, b1 = a, b
while (abs(b1-a1) > eps):
x = np.arange(a1, b1, (b1-a1)/n)
vals = [f(i) for i in x[0:-1]]
ch = vals.index(min(vals))
a1, b1 = x[ch-1], x[ch+1]
steps += 1
eps0[0].append(b1-a1)
res.append(writer(a1, b1, steps))
#2 Алгоритм дихтомии(алгоритм деления пополам)
steps = 0
a1, b1 = a, b
while (abs(b1-a1) > eps):
n = (a1+b1)/2
x = [(a1+n)/2, (b1+n)/ 2]
vals = [f(i) for i in x]
if vals[0] < vals[1]:
b1 = n
else:
a1 = n
steps += 1
eps0[1].append(b1-a1)
res.append(writer(a1, b1, steps))
#3 Метод золотого сечения
steps = 0
a1, b1 = a, b
while (abs(b1-a1) > eps):
x = [b1-(b1-a1)*0.618, a1+(b1-a1)*0.618]
vals = [f(i) for i in x]
if vals[0] < vals[1]:
b1 = x[1]
else:
a1 = x[0]
steps += 1
eps0[2].append(b1-a1)
res.append(writer(a1, b1, steps))
#4 Метод Фибоначчи
steps = 1
a1, b1 = a, b
fib = [1, 1]
while ((b1 - a1) / fib[-1] > eps):
fib.append(fib[-2] + fib[-1])
while (abs(b1-a1) > eps):
x = [a1 + (b1 - a1) * (fib[len(fib) - 1 - steps] / fib[len(fib) - steps]),
a1 + (b1 - a1) * (fib[len(fib) - 1 - steps] / fib[len(fib) - steps])]
if x[0] == x[1]:
x[1] = x[0] + (b1 - a1)/10
vals = [f(i) for i in x]
if vals[1] < vals[0]:
a1 = x[0]
else:
b1 = x[1]
steps += 1
eps0[3].append(b1-a1)
res.append(writer(a1, b1, steps-1))
lbls = ['Алгоритм равномерного поиска', 'Метод дихтомии', 'Метод золотого сечения',
'Метод Фибоначчи']
[print(lbls[i],'\n',res[i]) for i in range(len(res))]
plt.plot(eps0[0],range(res[0]['steps']), label = lbls[0])
plt.plot(eps0[1],range(res[1]['steps']), label = lbls[1])
plt.plot(eps0[2],range(res[2]['steps']), label = lbls[2])
plt.plot(eps0[3],range(res[3]['steps']), label = lbls[3])
plt.legend()
Соседние файлы в предмете Прикладные методы оптимизации