题目:已知x2 + y2 + z2 = 1,求 x + y + z 的最小值
这个问题相当于在约束条件下的极值问题的求解,在高等数学里,通用的方法是用拉格朗日乘子,通过求导的方式解决,这里使用scipy中的optimize模块来解决这个问题。
from scipy.optimize import minimize import numpy as np e = 1e-10 # 非常接近0的值 fun = lambda x : x[0] + x[1] + x[2] cons = ({'type': 'eq', 'fun': lambda x: x[0]**2 + x[1]**2 + x[2]**2 - 1}, # x^2 + y^2 + z^2 = 1 ) x0 = np.array((1.0, 0, 0)) # 设置初始值 res = minimize(fun, x0, method='SLSQP', constraints=cons) print('最小值:',res.fun) print('最优解:',res.x) print('迭代终止是否成功:', res.success) print('迭代终止原因:', res.message)
结果输出
最小值: -1.7320510374842677 最优解: [-0.57735549 -0.57734777 -0.57734777] 迭代终止是否成功: True 迭代终止原因: Optimization terminated successfully.
与期望输出一致。