Sympy使用solve函数求解后如何返回分数形式结果
Sympy solve函数返回分数形式结果的实现方法
你用Rational、Fraction未生效,通常是传入solve的方程参数本身为浮点数类型,Sympy默认优先做数值计算返回浮点结果,按以下方案处理即可:
- 方案1:定义方程时所有数值用Rational包裹
从根源保证求解时就用精确有理数定义方程的所有系数、常数项,避免使用Python原生float数值:
from sympy import symbols, solve, Rational x = symbols('x') # 错误写法:直接用float定义方程 eq_float = 0.5*x + 1.2 - 3.4 print(solve(eq_float, x)) # 输出 [4.4] # 正确写法:所有数值用Rational定义 eq_rational = Rational(1,2)*x + Rational(6,5) - Rational(17,5) print(solve(eq_rational, x)) # 输出 [22/5]
- 方案2:solve调用时传入
rational=True参数
Sympy的solve支持传入rational参数,会自动把输入的浮点数转成有理数再求解,不需要手动修改原方程定义:
print(solve(eq_float, x, rational=True)) # 输出 [22/5]
- 方案3:用
nsimplify()转换已有浮点结果
如果已经拿到浮点形式的解,可以直接用nsimplify函数转成精确分数:
from sympy import nsimplify res = solve(eq_float, x) frac_res = [nsimplify(item) for item in res] print(frac_res) # 输出 [22/5]
内容的提问来源于stack exchange,提问作者Shean
相关产品推荐
相关产品推荐

