Guest User

Untitled

a guest
Mar 20th, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.79 KB | None | 0 0
  1. #Реализация оптимизационного алгоритма методом парабол
  2.  
  3. import math
  4. import random
  5. def I(t):
  6. return math.cos(t)*math.exp(-t**2/2)
  7. def trapezoidal(f, a, b, n):
  8. #Вычисляет приближенное значение интеграла с помощью формулы трапеций
  9. # f - подынтегральная функция
  10. #a, b - пределы интегрирования#
  11. #n - количество частичных отрезков
  12.  
  13. H = float(b - a)/n
  14. result = 0.5*(f(a) + f(b))
  15. for i in range(1, n):
  16. result += f(a + i*H)
  17. result *= H
  18. return result
  19. I=trapezoidal(I,0,1,100)
  20. def f(s):
  21. return (math.fabs((-I+s)*math.exp(1/2)))**1.5
  22.  
  23. eps=float(input(" Enter approximity and click enter:"))
  24.  
  25. h=0.001 #определяем шаг для метода
  26. x0=0.01
  27. x=[0.05,0.1,0.5]
  28. m=1
  29. #в цикле получаем выпуклую тройку точек x1,x2,x3
  30. 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:
  31. if f(x0+h)<f(x0):
  32. x[0]=x0+2**(m-1)*h
  33. x[1]=x0+2**(m)*h
  34. x[2]=x0+2**(m+1)*h
  35. else:
  36. x[0]=x0-2**(m-1)*h
  37. x[1]=x0-2**(m)*h
  38. x[2]=x0-2**(m+1)*h
  39. m+=1
  40. k=0
  41. while math.fabs(f(x[1])-f(x[0]))>eps:
  42. f1=f(x[0])
  43. f2=f(x[1])
  44. f3=f(x[2])
  45. a1=(f2-f1)/(x[1]-x[0])
  46. a2=((f3-f1)/(x[2]-x[0])-(f2-f1)/(x[1]-x[0]))/(x[2]-x[1])
  47. x4=(x[0]+x[1])/2-a1/(2*a2) #нахождения вершины
  48. f4=f(x4)
  49. x.append(x4) #добавление в список точки х4
  50. x.sort(key=f) #сортировка точек
  51. 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:
  52. x.remove(x[3])
  53. else:
  54. x.remove(x[2])
  55. k+=1
  56. xmin=x[0]
  57. print("xmin =",xmin)
  58. print("f = ",[f(x[0]), f(x[1]), f(x[2])])
  59. print("Number of iteration:",k)
Add Comment
Please, Sign In to add comment