📅  最后修改于: 2023-12-03 15:37:40.908000             🧑  作者: Mango
在本文中,我们将探讨如何最小化函数 $f(x, y) = x^2 + y^2$ 在双曲线 $xy=5$ 上的取值。我们将使用 Python 和 SciPy 库中的最优化函数来解决这个问题。
首先,我们需要理解这个问题的几何意义。双曲线 $xy=5$ 是一个双曲线,在平面上呈现出一种类似于X轴和Y轴的形状。函数 $f(x, y) = x^2 + y^2$ 给出任意点 $(x, y)$ 到原点的欧几里得距离的平方。因此,我们的目标是找到在双曲线上的一个点 $(x, y)$,使得函数 $f(x, y)$ 的值最小。
为了解决这个问题,我们将使用 SciPy 中的优化函数 minimize。该函数可以找到给定函数的最小值,并提供一个初始点作为起点。
下面是解决方案的 Python 代码片段:
import numpy as np
from scipy.optimize import minimize
def objective(x):
return x[0]**2 + x[1]**2
def constraint(x):
return x[0]*x[1] - 5
x0 = [0, 0] # 初始点
b = (2, 3) # x的取值范围
bounds = [b, b]
con = {'type': 'ineq', 'fun': constraint}
solution = minimize(objective, x0, method='SLSQP', \
bounds=bounds, constraints=con)
print(solution)
在这个代码片段中,我们首先定义了我们要优化的函数 objective
,以及函数 $xy=5$ 的约束条件 constraint
。注意,我们将约束条件表示为不等式 x[0]*x[1] - 5
,这样就解决了约束条件不能被正常传递给 minimize 函数的问题。我们还定义了双曲线上的一个起始点 x0
,以及 $x$ 和 $y$ 可以取值的范围。
最后,我们调用了 minimize 函数,并将其设置为使用 Sequential Least Squares Programming 方法。我们将起点、边界条件和约束条件传递给函数,并将结果存储在变量 solution
中。
运行上述代码后,我们可以得到以下结果:
fun: 12.5
jac: array([0., 0.])
message: 'Optimization terminated successfully'
nfev: 14
nit: 4
njev: 4
status: 0
success: True
x: array([2.23606798, 2.23606798])
这表明,函数 $f(x, y)$ 的最小值为 $12.5$,当 $x=2.236$ 且 $y=2.236$ 时取得。因此,我们可以说,在双曲线 $xy=5$ 上,函数 $f(x, y) = x^2 + y^2$ 的最小值为 $12.5$,当 $x=2.236$ 且 $y=2.236$ 时取得。