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

Sympy求解方程组时无法分离目标未知变量的技术咨询

问题解决:用SymPy将X_ai表示为仅含已知变量的函数

你的问题出在没有将替换后的表达式保存下来,且当前代码仅尝试解单个含Y_ao的方程,自然会保留未知变量。下面是两种可行的解决方法:

方法一:直接求解方程组

既然你有两个方程、两个未知数,直接把两个方程传入solve(),SymPy会自动消元并给出X_ai的解:

from sympy import symbols, solve

# 已知变量
X_0 = symbols('X_0', positive=True)
Y_0 = symbols('Y_0', positive=True)
X_vi = symbols('X_vi', positive=True)
Y_vo = symbols('Y_vo', positive=True)

# 未知变量
X_ai = symbols('X_ai', positive=True)
Y_ao = symbols('Y_ao', positive=True)

# 定义两个方程(需写成等于0的形式,SymPy默认求解等式为0的情况)
eq_Y_ao = Y_0 - ((Y_vo * (((X_0 + X_ai) * 1000) + (X_vi * 997))) / (X_vi * 997))
eq_X_ai = 1 + ((X_0 * Y_ao * 1000) / ((Y_0 - Y_ao) * 997)) - X_ai

# 直接求解方程组,指定解X_ai
solution = solve([eq_Y_ao, eq_X_ai], [X_ai], dict=True)
print(solution)

方法二:手动替换后求解单变量方程

如果你想先替换Y_ao,需要把subs()的结果赋值给新变量(或覆盖原变量),再解这个单变量方程:

from sympy import symbols, solve

# 已知变量
X_0 = symbols('X_0', positive=True)
Y_0 = symbols('Y_0', positive=True)
X_vi = symbols('X_vi', positive=True)
Y_vo = symbols('Y_vo', positive=True)

# 未知变量
X_ai = symbols('X_ai', positive=True)
Y_ao = symbols('Y_ao', positive=True)

# 定义方程
eq_Y_ao = Y_0 - ((Y_vo * (((X_0 + X_ai) * 1000) + (X_vi * 997))) / (X_vi * 997))
eq_X_ai = 1 + ((X_0 * Y_ao * 1000) / ((Y_0 - Y_ao) * 997)) - X_ai

# 关键:将替换后的表达式保存到新变量中
eq_X_ai_substituted = eq_X_ai.subs(Y_ao, eq_Y_ao)

# 求解替换后的单变量方程
solution = solve(eq_X_ai_substituted, X_ai, dict=True)
print(solution)

注意点

  • SymPy的subs()方法不会修改原表达式,而是返回一个新的表达式,必须赋值给变量才能使用。
  • 确保方程是等于0的形式,因为solve()默认求解expr = 0的解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:15:12