You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Sympy solve()返回复有理数而非浮点数结果?

问题:SymPy求解复数方程组时,如何返回有理数形式的结果而非浮点数

现有代码:

from sympy import *

a, b = symbols("a b")
eqs = [ a + b - 3j, a - b - 2 ]
print(solve(eqs, [a, b]))

运行输出:

{a: 1.0 + 1.5*I, b: -1.0 + 1.5*I}

期望得到有理数形式的结果:

{a: 1 + 3/2*I, b: -1 + 3/2*I }

解决方案

核心问题在于你使用了Python原生的浮点数虚数3j,这会让SymPy默认采用浮点数类型计算。要得到精确的有理数形式,需改用SymPy提供的虚数单位I和精确有理数定义方程:

修改后的代码:

from sympy import *

a, b = symbols("a b")
# 用SymPy的I代替3j,保持常数的精确符号类型
eqs = [a + b - 3*I, a - b - 2]
print(solve(eqs, [a, b]))

运行输出:

{a: 1 + 3*I/2, b: -1 + 3*I/2}

如果需要严格匹配3/2*I的写法,可显式用有理数构造:

from sympy import *

a, b = symbols("a b")
eqs = [a + b - Rational(3,2)*I*2, a - b - 2]
print(solve(eqs, [a, b]))

本质是让方程中的所有常数都保持SymPy的精确符号类型,避免引入Python原生浮点数,求解器就会输出精确的有理数形式结果。


内容的提问来源于stack exchange,提问作者ErikR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:25:23