【问题标题】:Solve for x using python使用 python 求解 x
【发布时间】:2020-03-07 11:16:47
【问题描述】:

我遇到了一个问题。一个字符串作为输入说

input_string = "12345 + x = x * 5 + (1+x)* x + (1+18/100)"

并使用 python 获取 x 的输出。我无法弄清楚这个的逻辑。

【问题讨论】:

    标签: python-3.x string optimization discrete-mathematics prefix-operator


    【解决方案1】:

    嗯,这个例子显示了一个二次方程,它可能没有解、一个解或两个解。您必须象征性地重新排列这些术语才能到达

    input_string = "x**2 + 5*x - 12345 + (118/100)"

    但这意味着您需要实现乘法、加法、减法和可能的除法规则。至少对于 Python,有一个名为 SymPy 的库,它可以解析此类字符串并提供一个您可以评估的表达式,甚至是 solve。

    【讨论】:

      【解决方案2】:

      这是一个完整的 SymPy 示例供您输入:

      from sympy import Symbol, solve, Eq
      from sympy.parsing.sympy_parser import parse_expr
      
      input_string = "12345 + x = x * 5 + (1+x)* x + (1+18/100)"
      x = Symbol('x', real=True)
      lhs = parse_expr(input_string.split('=')[0], local_dict={'x':x})
      rhs = parse_expr(input_string.split('=')[1], local_dict={'x':x})
      
      print(lhs, "=", rhs)
      sol = solve(Eq(lhs, rhs), x)
      print(sol)
      print([s.evalf() for s in sol])
      

      这个输出:

      x + 12345 = x*(x + 1) + 5*x + 59/50
      [-5/2 + 9*sqrt(15247)/10, -9*sqrt(15247)/10 - 5/2]
      [108.630868798908, -113.630868798908]
      

      请注意,solve() 提供了解决方案列表。 SymPy 通常不会评估分数和平方根,因为它更喜欢不损失精度的解决方案。 evalf() 为这些表达式计算一个浮点值。

      【讨论】:

        猜你喜欢
        • 2019-07-25
        • 2020-08-24
        • 2020-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-18
        相关资源
        最近更新 更多