2016年8月23日火曜日

開発環境

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 コメント:

コメントを投稿