使用“scipy.optimize.brute”最小化两变量函数的问题

时间:2020-12-22 17:28:47

标签: python scipy mathematical-optimization scipy-optimize

我正在尝试使用 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.:当我为参数分配所有值时,单独的函数运行良好。

1 个答案:

答案 0 :(得分:0)

修改Fcone()如下...

def Fcone(alpha_beta, H1, gamma, C, T, H, R):
    alpha = alpha_beta[0]
    beta  = alpha_beta[1]
    .....

被优化的变量必须放入一维数组 check docs here。它们的值将在 res[0]