如何在Python中找到字符串给定的函数的最大值



我需要提取用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,我不知道如何提取字符串上的函数并将其放在第一行。

我刚刚读到您已经找到了evalexec,所以这不会有多大帮助。我会把答案留给其他人,以防万一

您可以使用这样的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])

相关内容

  • 没有找到相关文章

最新更新