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
相关产品推荐
相关产品推荐

