首页 > 解决方案 > 在 Python 中求解非线性方程

问题描述

我有 11*11 的矩阵 A 和长度为 11 的向量 b。我尝试使用线性方程组找到 11 个未知数的值

z= np.linalg.lstsq(A,b)

它返回了 11 个未知因子的值,所以我得到了一个包含 11 个值的向量。现在,如果我添加所有这些值,它会给我相等的值 RHS。所以例如

3x+4y = 19
2x+2y = 23

我可以得到满足上述方程的 x 和 y 的值

但我想要一个公式,其中 LHS 值的乘积应该给出 RHS 的相等值。

3x*4y = 19
2x*2y = 23

所以我需要 python 中的一些东西,当它们是乘法系统而不是加法系统时,它们可以返回我的 x 和 y 值。

在python中可以实现吗?

标签: pythonnonlinear-optimizationscipy-optimize

解决方案


您可以将系统的左侧写为np.prod(A*z, axis=1)、 whereA = np.array([[3, 4],[2, 2]])z = [x, y]。但是,您的示例系统没有解决方案。我看到它有解决方案的唯一情况是数组np.prod(A, axis=1) / rhs中的所有值都相同。

在这种情况下,您可以通过以下方式对其进行数值求解scipy.optimize.root

from scipy.optimize import root

# note that np.prod(A, axis=1) / rhs = [1, 1]
A = np.array([[3, 4],[2, 2]])
rhs = np.array([12, 4])

def Eq(z):
    return np.prod(A*z, axis=1) - rhs

result = root(Eq, x0=np.ones(2))

其中result.x包含解决方案。请注意,解决方案不能保证是唯一的,将取决于起点x0


推荐阅读