開発環境
- macOS High Sierra - Apple
- Emacs (Text Editor)
- Python 3.6 (プログラミング言語)
Pythonからはじめる数学入門 (Amit Saha (著)、黒川 利明 (翻訳)、オライリージャパン)の4章(SymPyで代数と式を計算する)、4.6(プログラミングチャレンジ)、問題4-4(1変数の不等式を解く)を取り組んでみる。
コード(Emacs)
Python 3
#!/usr/bin/env python3 from sympy import pprint, symbols, sympify, SympifyError, Poly, solve_poly_inequality, solve_rational_inequalities, solve_univariate_inequality def isolve(ineq_obj, v): lhs = ineq_obj.lhs if lhs.is_polynomial(): p = Poly(lhs, v) rel = ineq_obj.rel_op return solve_poly_inequality(p, rel) if lhs.is_rational_function(): numer, denom = lhs.as_numer_denom() p1 = Poly(numer) p2 = Poly(denom) rel = ineq_obj.rel_op return solve_rational_inequalities([[((p1, p2), rel)]]) return solve_univariate_inequality(ineq_obj, v, relational=False) if __name__ == '__main__': v = input('変数: ') v = symbols(v) while True: ineq_obj = input('不等式: ') if ineq_obj == 'q': break try: ineq_obj = sympify(ineq_obj) except SympifyError as err: print(type(err), err) else: pprint(isolve(ineq_obj, v))
入出力結果(Terminal, Jupyter(IPython))
$ ./sample4.py 変数: x 不等式: -x ** 2 + 4 < 0 [(-∞, -2), (2, ∞)] 不等式: -x ** 2 + 4 > 0 [(-2, 2)] 不等式: (x - 1) / (x + 2) > 0 (-∞, -2) ∪ (1, ∞) 不等式: (x - 1) / (x + 2) > 0 (-∞, -2) ∪ (1, ∞) 不等式: sin(x) - 0.6 > 0 (0.643501108793284, -0.643501108793284 + π) 不等式: sin(x) - 0.6 < 0 [0, 0.643501108793284) ∪ (-0.643501108793284 + π, 2⋅π] 不等式: q $
0 コメント:
コメントを投稿