如何用SciPy解决这个等式

时间:2016-09-05 16:36:14

标签: python numpy scipy sympy

在MathCad中,它看起来像这样:

enter image description here

如何使用python(scipy或sympy)解决它?

也许是这样的?

def fun(n):
    x, y, z = n
    return -0.7353 + 3.306 * np.absolute(0.706 - x) + 1.247 * np.absolute(0.7210 - y) - (0.89072 - 1.4829*x + 0.23239*y - z)
scipy.optimize.fsolve(fun, [1,1,1])

1 个答案:

答案 0 :(得分:2)

代码

重要的是(对于这种基于scipy.minimize的方法)是错误的二次惩罚(这是两边的差异)。当然还有其他方法,但要小心限制目标。

from scipy.optimize import minimize

fun = lambda x: ((-0.7353 + 3.306 * (abs(0.706 - x[0])) + 1.247 * (abs(0.721 - x[1]))) - \
                (0.89072 - 1.4829 * x[0] + 0.23239 * x[1] - x[2]))**2
x0 = [1, 1, 1]
res = minimize(fun, x0, tol=1e-6)
print(res)

结果

fun: 1.180300596982825e-18
hess_inv: array([[ 0.01850105, -0.02426119, -0.04300235],
 [-0.02426119,  0.23287182,  0.24090596],
 [-0.04300235,  0.24090596,  0.61570727]])
jac: array([  5.34881862e-08,   3.58270711e-08,   1.27283284e-08])
message: 'Optimization terminated successfully.'
nfev: 50
nit: 6
njev: 10
status: 0
success: True
x: array([ 0.69247018, -0.38146035, -0.90898925])

正如评论中所提到的,没有独特的解决方案。您的起点和选择的算法决定了您获得的解决方案类型。

唯一相关的部分是目标,它应接近零!