def _get_coefs(eq, A1, A2, *xs): eqe = eq.expand() X = tools.get_max_coef(eqe, A1) eqe = eqe.xreplace({A1: tools.ZERO}) Y = tools.get_max_coef(eqe, A2) Z = eqe.xreplace({A2: tools.ZERO}) # is_ok = not X.has(A2) and not X.has(A1) and not Y.has(A2) is_ok = True is_ok &= _check_const((X, Y, Z), *xs) return X, Y, Z, is_ok
def test_get_max_coef(self): print("\n") expr1 = A*B*X + C**2 - X expr2 = Y*Z - B self.assertEqual(tools.get_max_coef(expr1*X + expr2, X), expr1) expr3 = -A**3*B**2*X**5*(X-Y)**7 expr3x = -A**3*B**2*X**5*(-X-Y)**7 expr3y = -A**3*B**2*X**5*(-X+Y)**7 expr4 = B*X**2*(X-Y)**3 self.assertEqual(tools.get_max_coef(expr3*expr4, expr4), expr3) self.assertEqual(tools.get_max_coef(expr3x, expr4), tools.ZERO) res = tools.get_max_coef(expr3y, expr4)*expr4-expr3y self.assertEqual(res.expand(), tools.ZERO)
def _try_solve_0(symo, eq_sys, knowns): res = False for eq, [r], th_names in eq_sys: X = tools.get_max_coef(eq, r) if X != 0: Y = X*r - eq symo.write_line("# Solving type 1") X = symo.replace(trigsimp(X), 'X', r) Y = symo.replace(trigsimp(Y), 'Y', r) symo.add_to_dict(r, Y/X) knowns.add(r) res = True return res