Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sympy
- def solve_equation(e, **kwargs):
- e = e.replace('^', '**')
- left, right = e.split('=')
- left_expr = sympy.sympify(left)
- right_expr = sympy.sympify(right)
- equation = sympy.Eq(left_expr, right_expr)
- symbols = equation.free_symbols
- symbol_names = {str(s): s for s in symbols}
- knowns = {}
- missing_var = None
- for name, value in kwargs.items():
- if name in symbol_names:
- if value is None:
- if missing_var is not None:
- raise ValueError("Only one variable can be missing")
- missing_var = symbol_names[name]
- else:
- knowns[symbol_names[name]] = value
- else:
- raise ValueError(f"Variable '{name}' not found in equation")
- if missing_var is None:
- raise ValueError("No missing variable specified (use None)")
- equation_sub = equation.subs(knowns)
- solution = sympy.solve(equation_sub, missing_var)
- if not solution:
- raise ValueError("No solution found")
- result = solution[0]
- if result.is_real and result.is_number:
- return float(result) if not result.is_Integer else int(result)
- return result
- # Example usage:
- # print(solve_equation('a+b*c=d', a=1, b=2, d=5, c=None)) # Output: 2.0
- # print(solve_equation('a=exp(x)', a=2, x=None)) # Output: 0.6931471805599453
Advertisement
Add Comment
Please, Sign In to add comment