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

五元方程组求解函数咨询及SymPy代码无结果问题求助

问题排查与修复方案

你的方程组属于分式非线性方程组,SymPy默认的solve函数在处理这类复杂系统时,要么不存在解析解,要么因计算量过大陷入无响应状态,因此会出现无输出无报错的情况。以下是具体修复步骤:

1. 替换浮点数为精确有理数

SymPy对浮点数的处理容易引入精度误差,将所有小数转为有理数可以提升求解效率和准确性:

from sympy import symbols, Eq, solve, Rational

A,B,C,D,E = symbols('A B C D E')

# 将所有小数转为Rational类型
eq1 = Eq((Rational('0.1638')*A + Rational('0.1831')*B)/(Rational('0.16617')*C + Rational('0.7679')*D) + E , Rational('0.317'))
eq2 = Eq((Rational('0.1130')*A + Rational('0.1126')*B)/(Rational('0.4766')*C + Rational('0.6885')*D) + E , Rational('0.256'))
eq3 = Eq((Rational('0.2465')*A + Rational('0.2922')*B)/(Rational('0.4562')*C + Rational('0.6312')*D) + E , Rational('0.533'))
eq4 = Eq((Rational('0.077')*A + Rational('0.0594')*B)/(Rational('0.4849')*C + Rational('0.6147')*D) + E , Rational('0.177'))
eq5 = Eq((Rational('0.0743')*A + Rational('0.074')*B)/(Rational('0.3666')*C + Rational('0.5413')*D) + E , Rational('0.178'))

2. 先消去变量E,简化方程组

所有方程都包含E,可先将E从每个方程中解出,再联立消元减少变量数量:

# 从每个方程中解出E的表达式
e1 = eq1.rhs - (eq1.lhs - E)
e2 = eq2.rhs - (eq2.lhs - E)
e3 = eq3.rhs - (eq3.lhs - E)
e4 = eq4.rhs - (eq4.lhs - E)
e5 = eq5.rhs - (eq5.lhs - E)

# 联立消去E,得到关于A,B,C,D的方程组
new_eqs = [Eq(e1, e2), Eq(e1, e3), Eq(e1, e4), Eq(e1, e5)]

# 尝试求解简化后的方程组
sol_abcd = solve(new_eqs, (A,B,C,D), dict=True)
# 若得到解,代入求E
if sol_abcd:
    for sol in sol_abcd:
        sol[E] = e1.subs(sol)
        print(sol)

3. 若无解析解,使用数值求解(nsolve)

如果符号求解仍无结果,说明方程组可能只有数值解,使用nsolve并提供初始猜测值:

from sympy import nsolve

# 定义方程组的零值表达式
f1 = (0.1638*A + 0.1831*B)/(0.16617*C + 0.7679*D) + E - 0.317
f2 = (0.1130*A + 0.1126*B)/(0.4766*C + 0.6885*D) + E - 0.256
f3 = (0.2465*A + 0.2922*B)/(0.4562*C + 0.6312*D) + E - 0.533
f4 = (0.077*A + 0.0594*B)/(0.4849*C + 0.6147*D) + E - 0.177
f5 = (0.0743*A + 0.074*B)/(0.3666*C + 0.5413*D) + E - 0.178

# 提供初始猜测值(可根据实际情况调整)
initial_guess = (1, 1, 1, 1, 0)

# 数值求解
solution = nsolve((f1,f2,f3,f4,f5), (A,B,C,D,E), initial_guess)
print(solution)

关键说明

  • 非线性分式方程组通常不存在解析解,优先尝试数值求解更高效。
  • 初始猜测值会影响nsolve的求解结果,若第一次求解失败,可尝试调整初始值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 21:00:25