Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel
- from PyQt5.QtWidgets import QLineEdit
- import sympy as sp
- import sympy.parsing.sympy_parser as spp
- from sympy.abc import x
- class AnswerWidget(QWidget):
- def __init__(self):
- super().__init__()
- self.initUI()
- def initUI(self):
- self.setGeometry(210, 100, 300, len(answer) * 30 + 60)
- for i in range(len(answer)):
- self.new_label = QLabel(self)
- self.new_label.setText('Интервал [' + str(answer[i][0]) + ';' + str(answer[i][1]) + ']' + '\n' +
- ' Решение: ' + str(answer[i][2]))
- self.new_label.move(30, 30 + i * 30)
- answer.clear()
- class MainWidget(QWidget):
- def __init__(self):
- super().__init__()
- self.initUI()
- def initUI(self):
- self.setGeometry(100, 100, 300, 400)
- self.eq_label = QLabel(self)
- self.eq_label.setText('Введите уравнение:')
- self.eq_label.move(80, 30)
- self.eq_gap = QLineEdit(self)
- self.eq_gap.move(80, 100)
- self.solve_btn1 = QPushButton('Решить 1', self)
- self.solve_btn1.resize(self.solve_btn1.sizeHint())
- self.solve_btn1.move(75, 170)
- self.solve_btn1.clicked.connect(self.solve1)
- self.solve_btn2 = QPushButton('Решить 2', self)
- self.solve_btn2.resize(self.solve_btn2.sizeHint())
- self.solve_btn2.move(75, 230)
- self.solve_btn2.clicked.connect(self.solve2)
- def get_f(self):
- s = self.eq_gap.text()
- transform = spp.standard_transformations + (spp.implicit_multiplication_application, spp.convert_xor)
- lhs = spp.parse_expr(s.split("=")[0], transformations=transform)
- rhs = spp.parse_expr(s.split("=")[1], transformations=transform)
- self.f = sp.lambdify(x, lhs - rhs)
- def solve1(self):
- global answer
- self.get_f()
- L = -50
- while L + 5 <= 50:
- R = L + 5
- if self.f(L / 10) * self.f(R / 10) <= 0:
- ep = 0.001
- delta = 2 * ep
- a = L
- while self.f(a / 10) * self.f((a + delta) / 10) > 0:
- a += delta
- answer.append((L / 10, R / 10, (a + ep) / 10))
- L += 5
- self.open_show_wind = AnswerWidget()
- self.open_show_wind.show()
- def solve2(self):
- global answer
- self.get_f()
- L = -50
- while L + 5 <= 50:
- R = L + 5
- if self.f(L / 10) * self.f(R / 10) <= 0:
- ep = 0.001
- a = L
- b = R
- while b - a > 2 * ep:
- c = (a + b) / 2
- if self.f(a / 10) * self.f(c / 10) <= 0:
- b = c
- else:
- a = c
- answer.append((L / 10, R / 10, ((a + b) / 2) / 10))
- L += 5
- self.open_show_wind = AnswerWidget()
- self.open_show_wind.show()
- if __name__ == '__main__':
- global answer
- answer = []
- app = QApplication(sys.argv)
- wid = MainWidget()
- wid.show()
- sys.exit(app.exec())
Advertisement
Add Comment
Please, Sign In to add comment