我需要提取用Python表示法(如-2*(x+1)**2
(编写的数学表达式的最大值,以及字符串(应该由用户引入(给出的出现点。
我可以使用eval或exec来完成,但我正在努力寻找替代方案。
我尝试使用scypy来计算最大值,代码如下:
def f(x):
return -2*(x+1)**2
exec(cont)
max_x = scipy.optimize.fmin(lambda x: -f(x), 0, disp=False)
print(max_x)
但是,如果不使用exec,我不知道如何提取字符串上的函数并将其放在第一行。
我刚刚读到您已经找到了eval
和exec
,所以这不会有多大帮助。我会把答案留给其他人,以防万一
您可以使用这样的eval
函数来优化:
from scipy.optimize import minimize
class OptimizeFunction:
def __init__(self, formula):
self.formula = formula
def evaluate(self, x):
return eval(self.formula)
def eval_mirrored(self, x):
return -self.evaluate(x)
def get_max(self):
# Use the mirrored function to get the maximum value
print(minimize(fun=self.eval_mirrored, x0=[0]))
string = '-2*(x+1)**2'
optimize_function = OptimizeFunction(formula=string)
optimize_function.get_max()
结果:
fun: 1.1101586378198223e-16
hess_inv: array([[0.25]])
jac: array([8.64197602e-13])
message: 'Optimization terminated successfully.'
nfev: 9
nit: 2
njev: 3
status: 0
success: True
x: array([-1.00000001])