def solve(expression, *variables, **kw): ensemble = kw.get("ensemble", "R") if not variables: variables = syms(expression) if len(variables) == 1: # Bug de sympy si la variable est réelle. # solve(sqrt(x)) renvoie une erreur par exemple. # cf. test_solve_reals() # On supprime toutes les assertions. var = variables[0] x = Dummy() expression = expression.subs(var, x) solutions = solve_(expression, x) if ensemble == "R": solutions_reelles = [] for solution in solutions: if solution.is_real: solutions_reelles.append(solution) elif solution.is_real is None: real, imag = solution.as_real_imag() if abs(imag.evalf(n=200)) < 1e-150: solutions_reelles.append(real) return solutions_reelles elif ensemble == "Q": return [solution for solution in solutions if solution.is_rational] elif ensemble == "N": return [solution for solution in solutions if solution.is_integer] else: # On essaie de donner les solutions sous forme algébrique, # si ce n'est pas trop affreux. return [_forme_algebrique(s) for s in solutions] else: return solve_(expression, variables)
def solve(expression, *variables, **kw): ensemble = kw.get("ensemble", "R") if not variables: variables = syms(expression) if len(variables) == 1: # Bug de sympy si la variable est réelle. # solve(sqrt(x)) renvoie une erreur par exemple. # cf. test_solve_reals() # On supprime toutes les assertions. var = variables[0] x = Dummy() expression = expression.subs(var, x) solutions = solve_(expression, x) if ensemble == "R": solutions_reelles = [] for solution in solutions: if solution.is_real: solutions_reelles.append(solution) elif solution.is_real is None: real, imag = solution.as_real_imag() if abs(imag) < 10**-200: solutions_reelles.append(real) return solutions_reelles elif ensemble == "Q": return [solution for solution in solutions if solution.is_rational] elif ensemble == "N": return [solution for solution in solutions if solution.is_integer] else: return solutions else: return solve_(expression, variables)
def solve(expression, *variables, **kw): ensemble = kw.get("ensemble", "R") if not variables: variables = syms(expression) if len(variables) == 1: solutions = solve_(expression, variables[0]) if ensemble == "R": return tuple(solution for solution in solutions if solution.is_real) elif ensemble == "Q": return tuple(solution for solution in solutions if solution.is_rational) elif ensemble == "N": return tuple(solution for solution in solutions if solution.is_integer) else: return solutions else: return solve_(expression, variables)
def solve(expression, *variables, **kw): ensemble = kw.get("ensemble", "R") if not variables: variables = syms(expression) if len(variables) == 1: solutions = solve_(expression, variables[0]) if ensemble == "R": solutions_reelles = [] for solution in solutions: if solution.is_real: solutions_reelles.append(solution) elif solution.is_real is None: real, imag = solution.as_real_imag() if abs(imag) < 10**-200: solutions_reelles.append(real) return solutions_reelles elif ensemble == "Q": return [solution for solution in solutions if solution.is_rational] elif ensemble == "N": return [solution for solution in solutions if solution.is_integer] else: return solutions else: return solve_(expression, variables)