求解变量多于方程的非线性系统的最佳方法

问题描述 投票:0回答:1

我有一个用 sympy 构建的非线性方程组,其变量多于方程。 使用 python 解决此类系统的最佳包是哪个? 我不确定如何管理自由变量的存在。

我不展示我的系统,因为我认为它没什么用,我只需要了解大概的路径。

谢谢!

我尝试使用 sympy.nonlinsolve 但它给出了我的符号变量(例如第一个变量是 a1,结果是 'a1')

python sympy nonlinear-optimization equation-solving
1个回答
0
投票

您可以使用 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。

© www.soinside.com 2019 - 2024. All rights reserved.