sympy で a == -b (a,bは非負) を解きたい
Q&A
解決したいこと
$0\leq a , 0 \leq b$ のとき、 $a=-b$ は $a=0, b=0$ と解けます。
このことを sympy で解く方法が分からずにおります。
失敗例
import sympy
from sympy import *
sympy.__version__
'1.9'
失敗例1: assumptionを用いる
a = Symbol("a", nonnegative=True)
b = Symbol("b", nonnegative=True)
assert a.is_nonnegative and b.is_nonnegative
solve(Eq(a,-b), a, dict=True)
[{a: -b}]
失敗例2: solveに不等式をぶち込む (python 演算子)
solve([Eq(a,-b), a>=0, b>=0])
{a:-b}
ちなみに a>=0
と b>=0
は True
と評価されているので、本質的には solve([Eq(a,-b)])
と同じ。
失敗例3: solveに不等式をぶち込む (sympyの不等式型)
solve([Eq(a,-b), GreaterThan(a,0, evaluate=False), GreaterThan(b,0, evaluate=False)])
NotImplementedError:
inequality has more than one symbol of interest.
solve
に 変数の不等式を持ち込むこと自体が not implemented のようだ。
失敗例4: solveset
solveset(Eq(a,-b), a)
{-b}
失敗例5: solveset
solveset(Eq(a,-b) & GreaterThan(a,0, evaluate=False) & GreaterThan(b,0, evaluate=False), a)
ValueError: (a >= 0) & (b >= 0) & Eq(a, -b) is not a valid SymPy expression
失敗例6: nsolve
数値的に解けないか試した
nsolve(Eq(a,-b), a, dict=True)
ValueError:
expected a one-dimensional and numerical function