在MathCad中,它看起来像这样:
如何使用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])
答案 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])
正如评论中所提到的,没有独特的解决方案。您的起点和选择的算法决定了您获得的解决方案类型。
唯一相关的部分是目标,它应接近零!