我有一个用 sympy 构建的非线性方程组,其变量多于方程。 使用 python 解决此类系统的最佳包是哪个? 我不确定如何管理自由变量的存在。
我不展示我的系统,因为我认为它没什么用,我只需要了解大概的路径。
谢谢!
我尝试使用 sympy.nonlinsolve 但它给出了我的符号变量(例如第一个变量是 a1,结果是 'a1')
您可以使用 scipy.optimize.minimize,您的变量将是 p 作为 numpy 1D 数组。 您的方程将采用 ax+by+... = cst 的形式 得分函数的返回将是所有方程的总和(如果过度约束,它可能不为零,如果约束不足,则它可能为零) 由于变量少于方程,因此您有无限可能的解决方案。
这里是文档:https://docs.scipy.org/doc/scipy/reference/ generated/scipy.optimize.minimize.html
let 表示你有一个 python 变量 A ,代表行的所有方程和列的变量:
def fun(x, A, B):
return numpy.sum(numpy.abs(numpy.dot(A, x) - B))
A = numpy.array([
[1, 2, 3], # 1*x + 2*y + 3*z = B[0]
[0, 2, 1] # 0*x + 2*y + 1*z = B[1]
])
B = numpy.array([5, 10])
x0 = numpy.array([var1_init, var2_init, ...])
variables = scipy.optimize.minimize(fun, x0, args=(A)).x
结果将取决于您使用的最小化方法和 x0 初始化。如果您只想要一种解决方案,则无需填写方法字段并将 x0 的每个变量初始化为 0。