開発環境
- 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 コメント:
コメントを投稿