Скажите, что я хотел бы оценить уравнение. Обычно я решаю уравнение для конкретной переменной, а затем уточняю для оценки. Вот пример:
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
, работающей с конкретным исключением. Есть ли другие подходы?