使用 "scipy.optimize.brute" 最小化二变量函数的问题
Problems minimizing a two variable function with "scipy.optimize.brute"
我正在尝试使用 scipy.optimize.brute
算法最小化两个变量的函数,但我收到错误 TypeError: Fcone() missing 1 required positional argument: 'R'
。
这是我的代码:
import numpy as np
import scipy.optimize as opt
gamma = 17.
C = 45.
T = 12.
H = 1.2
R = 1.3
H1 = 0.57
def Fcone(alpha, beta, H1, gamma, C, T, H, R):
return np.pi/((np.cos(alpha))**2 * (np.cos(beta))**2) * ((np.cos(alpha))**2
* ((np.cos(beta))**2 * (gamma*H1**3 + 2*H1**2*(C-T-gamma*H) - H*H1*
(2*C-2*T-gamma*H) + H*(gamma*R**2 + H*(C-T)-(gamma*H**2)/3)) -
2*R*(H-H1)*np.cos(beta) * ((gamma*H1/2 - gamma*H/2 + C -T)*
np.sin(beta) - C) + (C*np.sin(beta) + gamma*H/3 - gamma*H1/3
-C + T)*(H-H1)**2) - 2*H1*np.cos(beta)*np.cos(alpha)*(
R*np.cos(beta)*((gamma*H1/2 + C -T -gamma*H)*np.sin(alpha)
- C) + np.sin(alpha)*(H-H1)*((gamma*H1/2 - gamma*H/2 + C -T)
*np.sin(beta)-C)) + (np.cos(beta))**2 * H1**2 *
(gamma*H + C*np.sin(alpha)
-2*gamma*H1/3 -C+T))
ranges = (slice(0, np.pi/2, np.pi/10000), slice(0, np.pi/2, np.pi/10000))
res = opt.brute(Fcone, ranges, args=(H1, gamma, C, T, H, R), finish=None)
其中 gamma、C、T、H、R1 和 H1 是给定的参数。尽管方程式非常大(并且可能令人困惑),我如何解决这个问题并最小化两个参数 alpha 和 beta 的函数?谢谢!
P.S.: 当我为参数分配所有值时,单独的函数 运行 很好。
修改Fcone()
如下...
def Fcone(alpha_beta, H1, gamma, C, T, H, R):
alpha = alpha_beta[0]
beta = alpha_beta[1]
.....
要优化的变量必须放入一维数组中,check docs here。它们的值将在 res[0]
我正在尝试使用 scipy.optimize.brute
算法最小化两个变量的函数,但我收到错误 TypeError: Fcone() missing 1 required positional argument: 'R'
。
这是我的代码:
import numpy as np
import scipy.optimize as opt
gamma = 17.
C = 45.
T = 12.
H = 1.2
R = 1.3
H1 = 0.57
def Fcone(alpha, beta, H1, gamma, C, T, H, R):
return np.pi/((np.cos(alpha))**2 * (np.cos(beta))**2) * ((np.cos(alpha))**2
* ((np.cos(beta))**2 * (gamma*H1**3 + 2*H1**2*(C-T-gamma*H) - H*H1*
(2*C-2*T-gamma*H) + H*(gamma*R**2 + H*(C-T)-(gamma*H**2)/3)) -
2*R*(H-H1)*np.cos(beta) * ((gamma*H1/2 - gamma*H/2 + C -T)*
np.sin(beta) - C) + (C*np.sin(beta) + gamma*H/3 - gamma*H1/3
-C + T)*(H-H1)**2) - 2*H1*np.cos(beta)*np.cos(alpha)*(
R*np.cos(beta)*((gamma*H1/2 + C -T -gamma*H)*np.sin(alpha)
- C) + np.sin(alpha)*(H-H1)*((gamma*H1/2 - gamma*H/2 + C -T)
*np.sin(beta)-C)) + (np.cos(beta))**2 * H1**2 *
(gamma*H + C*np.sin(alpha)
-2*gamma*H1/3 -C+T))
ranges = (slice(0, np.pi/2, np.pi/10000), slice(0, np.pi/2, np.pi/10000))
res = opt.brute(Fcone, ranges, args=(H1, gamma, C, T, H, R), finish=None)
其中 gamma、C、T、H、R1 和 H1 是给定的参数。尽管方程式非常大(并且可能令人困惑),我如何解决这个问题并最小化两个参数 alpha 和 beta 的函数?谢谢!
P.S.: 当我为参数分配所有值时,单独的函数 运行 很好。
修改Fcone()
如下...
def Fcone(alpha_beta, H1, gamma, C, T, H, R):
alpha = alpha_beta[0]
beta = alpha_beta[1]
.....
要优化的变量必须放入一维数组中,check docs here。它们的值将在 res[0]