Skip to main content
 首页 » 编程设计

python之求解仅给定几个变量的简单方程组

2025年05月04日21Terrylee

我有一组几百个简单的求和方程。例如这里有 3:

 w1 - u1 - u2 = 0  
 w1 + w2 - w3 - u3 = 0 
 w1 - w2 - w4 = 0 

我正在尝试找到一种方法来解决尽可能多的问题,只给出几个值。例如,在上面的方程组中,如果我有 u1 和 u2 我可以计算 w1,但没有别的。 给定 u1、u2 和 w2 我可以计算 w1 和 w4。等等……

目前我正在以一种相当直接的方式处理这个问题(伪代码):

while there are new results: 
     for each equation: 
         try to solve equation: 
             if solved update result set 

这可行,但感觉笨拙且效率低下。

有没有更好的方法? (如果相关,使用 Python)

编辑: 我知道这可以作为一系列线性方程求解,如果我知道足够的值。我正在寻找一种方法,当我对解决线性方程组的了解不够时使用(或者可能有一种奇特的方法以某种方式减少问题)

EDIT 2:错误,已删除

编辑 3:对于任何对我使用 sympy 的解决方案感兴趣的人:

from sympy import linsolve, symbols, linear_eq_to_matrix 
w1, w2, w3, w4, u1, u2, u3 = symbols("w1, w2, w3, w4, u1, u2, u3", integer=True) 
variables = [w1, w2, w3, w4, u1, u2, u3] 
 
def my_solver(known_vals): 
 
    eqns = [w1 - u1 - u2,  
            w1 + w2 - w3 - u3, 
            w1 - w2 - w4] 
 
    #add the known variables to equation list 
    for x in known_vals.keys(): 
        eqns.append(x - (known_vals[x])) 
 
    A, b = linear_eq_to_matrix(eqns, variables) 
    solution = linsolve((A, b), variables) 
 
    return solution 
 
 
my_solver({w1:2, u2:-2}) 

请您参考如下方法:

只需获取 SymPy 并将整个线性方程组填充到 sympy.solvers.solveset.linsolve 中即可.它将以取决于系统是否具有 0、1 或无限解的形式为您提供整个解空间,包括具有确定值的变量的值。

可能还有一种 NumPy/SciPy 方法来获取欠定系统的解集,但无论哪种方法,我都不知道。 Google 建议 singular value decomposition会很有用,但我还没有弄清楚您如何从中获得解决方案的基础。


如果不清楚,“整个线性方程组”包括将已知变量值公式化为方程。例如,如果您知道 u2 = 5,则 u2 = 5 将是线性方程之一。您可以在 eqns 列表中将其表示为 u2 - 5。