Guest User

Untitled

a guest
Apr 6th, 2020
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.25 KB | None | 0 0
  1. import sys
  2. from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel
  3. from PyQt5.QtWidgets import QLineEdit
  4. import sympy as sp
  5. import sympy.parsing.sympy_parser as spp
  6. from sympy.abc import x
  7.  
  8. class AnswerWidget(QWidget):
  9.     def __init__(self):
  10.         super().__init__()
  11.         self.initUI()
  12.  
  13.     def initUI(self):
  14.         self.setGeometry(210, 100, 300, len(answer) * 30 + 60)
  15.  
  16.         for i in range(len(answer)):
  17.             self.new_label = QLabel(self)
  18.             self.new_label.setText('Интервал [' + str(answer[i][0]) + ';' + str(answer[i][1]) + ']' + '\n' +
  19.                                   '  Решение: ' + str(answer[i][2]))
  20.             self.new_label.move(30, 30 + i * 30)
  21.         answer.clear()
  22.  
  23.  
  24. class MainWidget(QWidget):
  25.     def __init__(self):
  26.         super().__init__()
  27.         self.initUI()
  28.  
  29.     def initUI(self):
  30.         self.setGeometry(100, 100, 300, 400)
  31.  
  32.         self.eq_label = QLabel(self)
  33.         self.eq_label.setText('Введите уравнение:')
  34.         self.eq_label.move(80, 30)
  35.  
  36.         self.eq_gap = QLineEdit(self)
  37.         self.eq_gap.move(80, 100)
  38.  
  39.         self.solve_btn1 = QPushButton('Решить 1', self)
  40.         self.solve_btn1.resize(self.solve_btn1.sizeHint())
  41.         self.solve_btn1.move(75, 170)
  42.         self.solve_btn1.clicked.connect(self.solve1)
  43.  
  44.         self.solve_btn2 = QPushButton('Решить 2', self)
  45.         self.solve_btn2.resize(self.solve_btn2.sizeHint())
  46.         self.solve_btn2.move(75, 230)
  47.         self.solve_btn2.clicked.connect(self.solve2)
  48.  
  49.     def get_f(self):
  50.         s = self.eq_gap.text()
  51.         transform = spp.standard_transformations + (spp.implicit_multiplication_application, spp.convert_xor)
  52.         lhs = spp.parse_expr(s.split("=")[0], transformations=transform)
  53.         rhs = spp.parse_expr(s.split("=")[1], transformations=transform)
  54.         self.f = sp.lambdify(x, lhs - rhs)
  55.  
  56.     def solve1(self):
  57.         global answer
  58.         self.get_f()
  59.         L = -50
  60.         while L + 5 <= 50:
  61.             R = L + 5
  62.             if self.f(L / 10) * self.f(R / 10) <= 0:
  63.                 ep = 0.001
  64.                 delta = 2 * ep
  65.                 a = L
  66.                 while self.f(a / 10) * self.f((a + delta) / 10) > 0:
  67.                     a += delta
  68.                 answer.append((L / 10, R / 10, (a + ep) / 10))
  69.             L += 5
  70.         self.open_show_wind = AnswerWidget()
  71.         self.open_show_wind.show()
  72.  
  73.     def solve2(self):
  74.         global answer
  75.         self.get_f()
  76.         L = -50
  77.         while L + 5 <= 50:
  78.             R = L + 5
  79.             if self.f(L / 10) * self.f(R / 10) <= 0:
  80.                 ep = 0.001
  81.                 a = L
  82.                 b = R
  83.                 while b - a > 2 * ep:
  84.                     c = (a + b) / 2
  85.                     if self.f(a / 10) * self.f(c / 10) <= 0:
  86.                         b = c
  87.                     else:
  88.                         a = c
  89.                 answer.append((L / 10, R / 10, ((a + b) / 2) / 10))
  90.             L += 5
  91.         self.open_show_wind = AnswerWidget()
  92.         self.open_show_wind.show()
  93.  
  94.  
  95. if __name__ == '__main__':
  96.     global answer
  97.     answer = []
  98.     app = QApplication(sys.argv)
  99.     wid = MainWidget()
  100.     wid.show()
  101.     sys.exit(app.exec())
Advertisement
Add Comment
Please, Sign In to add comment