微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

求解非线性方程组

如何解决求解非线性方程组

我收到一个关于这个简单代码错误,问题是错误只出现在我需要的一个方程 (78 * x**0.3 * y**0.8 - 376) 中。

错误invalid value encountered in double_scalars ; F[0] = 78 * x**0.3 * y**0.8 - 376

如果我从第一个方程中删除 * y**0.8代码运行良好,但显然它对我不起作用。

代码

import numpy as np
from scipy.optimize import fsolve

def Funcion(z):
   x = z[0]
   y = z[1]

   F = np.empty((2))
   F[0] = 78 * x**0.3 * y**0.8 - 376
   F[1] = 77 * x**0.5 * y - 770
   return F

zGuess = np.array([1,1])
z = fsolve(Funcion,zGuess)
print(z)

解决方法

如果 F[0] 为负数,

y 将是复杂的。 fsolve 不支持复杂的根查找。

,

你需要求解非线性方程组F(x,y) = 0 服从x,y >= 0,这相当于最小化欧几里德范数||F(x,y)||英石。 x,y >= 0。要解决这个约束优化问题,您可以使用 scipy.optimize.minimize 如下:

import numpy as np
from scipy.optimize import minimize

def Funcion(z):
   x = z[0]
   y = z[1]

   F = np.empty((2))
   F[0] = 78 * x**0.3 * y**0.8 - 376
   F[1] = 77 * x**0.5 * y - 770
   return F

# initial point
zGuess = np.array([1.0,1.0])

# bounds x,y >= 0
bounds = [(0,None),(0,None)]

# Solve the constrained optimization problem
z = minimize(lambda z: np.linalg.norm(Funcion(z)),x0=zGuess,bounds=bounds)

# Print the solution
print(z.x)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。