【问题标题】:Find min and max value of any function over an interval查找区间内任何函数的最小值和最大值
【发布时间】:2014-02-26 14:17:35
【问题描述】:

我知道有一些类似的问题,但他们都希望/或使用 numpy 获得答案。

我想找到一个字符串的最大值和最小值,例如("Sin(x**2)") 在区间内:x [0,10]。

我的老师给了我这个提示; 具体来说,我们尝试使用从 1 到 10 的 1001 个不同的值,并使用 eval 来实现评估函数,用值 x {(i/100, i[0,1000] }。 这可以通过使用 for 循环来实现,其中 i 在 range(0,1001) 中并使用增量 x = i / 100.0。

注意:我不能使用 numpy。

【问题讨论】:

  • Hint 基本上概括了你的所有程序。将 x 赋值给 i/100.0,eval(expression),如果 eval 的结果大于/小于当前最大值/最小值,则更新最大值和最小值。 docs.python.org/2/library/functions.html#evalstackoverflow.com/questions/21359883/…
  • FWIW,如果您认为可以在这样的离散状态下合理地描述它...例如我可以定义一个函数,它在除 pi 的值为 30015.7 之外的任何地方都为 0。除非你碰巧在pi 取样,否则你永远不会知道不连续性的存在,也不会得到最大值。
  • 你为什么不使用for 循环其中i in range(0,1001): 然后在该循​​环中让x = i / 100.0

标签: python function max intervals min


【解决方案1】:
import math
def compute_min_and_max(expression):
    min_value, max_value = float("inf"), float("-inf")
    for x in range(1001):
        res = eval(expression, None, {"sin": math.sin, "x": x/100.0})
        if min_value > res: min_value = res
        if max_value < res: max_value = res
    return(min_value, max_value)

print(compute_min_and_max("sin(x ** 2)"))

输出

(-0.9999939135141118, 0.9999999062300194)

【讨论】:

  • 第一:你只是给他执行OP的作业,没有解释?第二:您的函数因输入单调递减而失败。最小测试用例:compute_min_and_max("-x")
  • @user2357112 谢谢你 :) 在你的帮助下,我设法修复了 -x 部分。
  • 你可以放弃ast导入
  • @gnibbler 谢谢 :) 我忘了删除它。
猜你喜欢
  • 2013-09-28
  • 1970-01-01
  • 2015-03-28
  • 1970-01-01
  • 2012-09-16
  • 2021-09-15
  • 1970-01-01
  • 2017-04-20
相关资源
最近更新 更多