Beispiel #1
0
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)
Beispiel #2
0
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)
Beispiel #3
0
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)
Beispiel #4
0
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)
Beispiel #5
0
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)