開発環境
- OS X El Capitan - Apple (OS)
- Emacs (Text Editor)
- Python 3.5 (プログラミング言語)
Pythonからはじめる数学入門 (Amit Saha (著)、黒川 利明 (翻訳)、オライリージャパン)の4章(SymPyで代数と式を計算する)、4.6(プログラミングチャレンジ)、問題4-4(1変数の不等式を解く)を取り組んでみる。
問題4-4(1変数の不等式を解く)
コード(Emacs)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sympy
def isolve(ineq_obj):
x = sympy.Symbol('x')
lhs = ineq_obj.lhs
if lhs.is_polynomial():
print('多項式')
p = sympy.Poly(lhs, x)
rel = ineq_obj.rel_op
return sympy.solve_poly_inequality(p, rel)
if lhs.is_rational_function():
print('有理式')
numer, denom = lhs.as_numer_denom()
p1 = sympy.Poly(numer, x)
p2 = sympy.Poly(denom, x)
rel = ineq_obj.rel_op
return sympy.solve_rational_inequalities([[((p1, p2), rel)]])
print('その他')
return sympy.solve_univariate_inequality(ineq_obj, x, relational=False)
if __name__ == '__main__':
while True:
ineq_obj = input('不等式入力(変数x)(quitで終了): ')
if ineq_obj == 'quit':
break
try:
ineq_obj = sympy.sympify(ineq_obj)
except sympy.SympifyError as err:
print(err)
except Exception as err:
print(err)
else:
sympy.pprint(isolve(ineq_obj))
入出力結果(Terminal, IPython)
$ ./sample bash: ./sample: No such file or directory MacBook-Pro:ch4 kamimura$ ./sample4.py 不等式入力(変数x)(quitで終了): -x**2 + 4 < 0 多項式 [(-∞, -2), (2, ∞)] 不等式入力(変数x)(quitで終了): ((x - 1) / (x + 2)) > 0 有理式 (-∞, -2) ∪ (1, ∞) 不等式入力(変数x)(quitで終了): sin(x) - 0.6 > 0 その他 (0.643501108793284, 2.49809154479651) 不等式入力(変数x)(quitで終了): quit $
0 コメント:
コメントを投稿