Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #Реализация оптимизационного алгоритма методом парабол
- import math
- import random
- def I(t):
- return math.cos(t)*math.exp(-t**2/2)
- def trapezoidal(f, a, b, n):
- #Вычисляет приближенное значение интеграла с помощью формулы трапеций
- # f - подынтегральная функция
- #a, b - пределы интегрирования#
- #n - количество частичных отрезков
- H = float(b - a)/n
- result = 0.5*(f(a) + f(b))
- for i in range(1, n):
- result += f(a + i*H)
- result *= H
- return result
- I=trapezoidal(I,0,1,100)
- def f(s):
- return (math.fabs((-I+s)*math.exp(1/2)))**1.5
- eps=float(input(" Enter approximity and click enter:"))
- h=0.001 #определяем шаг для метода
- x0=0.01
- x=[0.05,0.1,0.5]
- m=1
- #в цикле получаем выпуклую тройку точек x1,x2,x3
- while (f(x[2])-f(x[1]))<0 or (f(x[0])-f(x[1]))<0 or (f(x[2])+f(x[0])-2*f(x[1]))<=0:
- if f(x0+h)<f(x0):
- x[0]=x0+2**(m-1)*h
- x[1]=x0+2**(m)*h
- x[2]=x0+2**(m+1)*h
- else:
- x[0]=x0-2**(m-1)*h
- x[1]=x0-2**(m)*h
- x[2]=x0-2**(m+1)*h
- m+=1
- k=0
- while math.fabs(f(x[1])-f(x[0]))>eps:
- f1=f(x[0])
- f2=f(x[1])
- f3=f(x[2])
- a1=(f2-f1)/(x[1]-x[0])
- a2=((f3-f1)/(x[2]-x[0])-(f2-f1)/(x[1]-x[0]))/(x[2]-x[1])
- x4=(x[0]+x[1])/2-a1/(2*a2) #нахождения вершины
- f4=f(x4)
- x.append(x4) #добавление в список точки х4
- x.sort(key=f) #сортировка точек
- if f(x[2])-f(x[1])>=0 and f(x[0])-f(x[1])>=0 and f(x[2])+f(x[0])-2*f(x[1])>0:
- x.remove(x[3])
- else:
- x.remove(x[2])
- k+=1
- xmin=x[0]
- print("xmin =",xmin)
- print("f = ",[f(x[0]), f(x[1]), f(x[2])])
- print("Number of iteration:",k)
Add Comment
Please, Sign In to add comment