Guest User

Untitled

a guest
Dec 17th, 2017
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.25 KB | None | 0 0
  1. from tkinter import *
  2.  
  3.  
  4. def calculate():
  5. step = float(e1.get())
  6. x = float(e21.get())
  7. y = float(e22.get())
  8. prec = float(e3.get())
  9. dx = float(e41.get())
  10. dy = float(e42.get())
  11.  
  12. x0 = x, y
  13. x1 = research(x0, dx, dy, prec, step, False)
  14. if x1:
  15. while True:
  16. x = x0[0] + 2.0 * (x1[0] - x0[0])
  17. y = x0[1] + 2.0 * (x1[1] - x0[1])
  18. x2 = x, y
  19. x3 = research(x2, dx, dy, prec, step, False)
  20. if x3 and x3 == x2:
  21. x0 = x1[0], x1[1]
  22. x1 = x3[0], x3[1]
  23. else:
  24. break
  25.  
  26. e5['state'] = 'normal'
  27. e6['state'] = 'normal'
  28. e7['state'] = 'normal'
  29. e5.delete(0, END)
  30. e6.delete(0, END)
  31. e7.delete(0, END)
  32.  
  33. e5.insert(0, str(x0[0]))
  34. e6.insert(0, str(x0[1]))
  35. e7.insert(0, str(func(x0[0], x0[1])))
  36. e5['state'] = 'disabled'
  37. e6['state'] = 'disabled'
  38. e7['state'] = 'disabled'
  39.  
  40.  
  41. def func(x1, x2):
  42. # return pow(1 - x1, 2) + 100 * pow(x2 - pow(x1, 2), 2)
  43. return 4 * pow(x1 - 5, 2) + pow(x2 - 6, 2)
  44.  
  45. def research(x0, dx, dy, prec, step, step_fixed=False):
  46. step_x = dx
  47. step_y = dy
  48. x1 = x0
  49. while step_y >= prec or step_x >= prec:
  50. if func(x0[0], x0[1]) > func(x1[0] + step_x, x1[1]):
  51. return x1[0] + step_x, x1[1]
  52. elif func(x0[0], x0[1]) > func(x1[0] - step_x, x1[1]):
  53. return x1[0] - step_x, x1[1]
  54. else:
  55. if not step_fixed:
  56. step_x = step_x / step
  57. val1 = func(x1[0] + step_x, x1[1])
  58. val2 = func(x1[0] - step_x, x1[1])
  59. if val1 < val2:
  60. x1 = x1[0] + step_x, x1[1]
  61. else:
  62. x1 = x1[0] - step_x, x1[1]
  63.  
  64. if func(x0[0], x0[1]) > func(x1[0], x1[1] + step_y):
  65. return x1[0], x1[1] + step_y
  66. elif func(x0[0], x0[1]) > func(x1[0], x1[1] - step_y):
  67. return x1[0], x1[1] - step_y
  68. else:
  69. if not step_fixed:
  70. step_y = step_y / step
  71. val1 = func(x1[0], x1[1] + step_y)
  72. val2 = func(x1[0], x1[1] - step_y)
  73. if val1 < val2:
  74. x1 = x1[0], x1[1] + step_y
  75. else:
  76. x1 = x1[0], x1[1] - step_y
  77.  
  78.  
  79.  
  80. master = Tk()
  81. Label(master, text="Коэффициент уменьшения шага").grid(row=0)
  82. e1 = Entry(master, width=40)
  83. e1.grid(row=0, columnspan=2, column=1)
  84.  
  85. Label(master, text="Начальная точка X0(X1:X2)").grid(row=1)
  86. e21 = Entry(master)
  87. e21.grid(row=1, column=1)
  88. e22 = Entry(master)
  89. e22.grid(row=1, column=2)
  90.  
  91. Label(master, text="Точность").grid(row=3)
  92. e3 = Entry(master, width=40)
  93. e3.grid(row=3, columnspan=2, column=1)
  94.  
  95. Label(master, text="Приращение (dX1: dX2)").grid(row=4)
  96. e41 = Entry(master)
  97. e41.grid(row=4, column=1)
  98. e42 = Entry(master)
  99. e42.grid(row=4, column=2)
  100.  
  101. Button(master, text="Исследовать", command=calculate).grid(
  102. row=5, columnspan=2, sticky='n'
  103. )
  104.  
  105. Label(master, text="X1").grid(row=6)
  106. e5 = Entry(master, state='disabled')
  107. e5.grid(row=6, column=1)
  108. Label(master, text="X2").grid(row=7)
  109. e6 = Entry(master, state='disabled')
  110. e6.grid(row=7, column=1)
  111. Label(master, text="f(x)").grid(row=8)
  112. e7 = Entry(master, state='disabled')
  113. e7.grid(row=8, column=1)
  114.  
  115. master.title('Метод Хука-Дживса')
  116. mainloop()
Add Comment
Please, Sign In to add comment