Sympy - определить, можно ли оценить равенство только итеративно - PullRequest
0 голосов
/ 30 октября 2019

Скажите, что я хотел бы оценить уравнение. Обычно я решаю уравнение для конкретной переменной, а затем уточняю для оценки. Вот пример:

sp.var('a b')
c = sp.Eq(4 / a, 3 * b)
d = sp.solve(c, a)
func = sp.lambdify(d[0].free_symbols, d[0], 'numpy')
display(func)

Output: <function _lambdifygenerated(b)>

Все работало так, как ожидалось, потому что уравнение можно было решить для параметра a. Проблема возникает, когда уравнение может быть решено только итеративно. Вот еще один пример:

sp.var('a b')
c = sp.Eq(1 / sp.sqrt(a), sp.log(b + 1 / sp.sqrt(a)))
display(sp.solve(c, a))

NotImplementedError: multiple generators [log(b + 1/sqrt(a)), sqrt(a)]
No algorithms are implemented to solve equation -log(b + 1/sqrt(a)) + 1/sqrt(a)

Это уравнение не может быть решено напрямую для параметра a. Вместо этого следует использовать итеративный подход.

Один из способов обнаружить, что уравнение может быть решено только итеративно, - это использование конструкции try ... catch, работающей с конкретным исключением. Есть ли другие подходы?

...