2014-02-26 71 views
0

我知道有一些類似的問題,但他們都希望/或得到使用numpy的答案。在一個時間間隔內查找任意函數的最小值和最大值

我想查找字符串的最大值和最小值,例如: (「Sin(x ** 2)」):x [0,10]。

我的老師給了我這個提示; 具體來說,我們嘗試從1到10的1001個不同的值,並使用eval實現評估函數,其值爲 x {(i/100,i [0,1000]}。 這可以通過使用for循環來實現,其中i在範圍(0,1001),並使用增量X = I/100.0

注意:我不能使用numpy的

+1

提示basical ly概述了你的所有程序。如果eval的結果大於/小於當前最大值/最小值,則將x分配給i/100.0,eval(表達式),更新最大值和最小值。 http://docs.python.org/2/library/functions.html#eval http://stackoverflow.com/questions/21359883/python-find-the-minimum-using-for-loops/21359894#21359894 – sashkello

+0

FWIW ,如果事情可以合理地描述在離散化的狀態中,那麼你在函數中假定有一定程度的良好行爲......例如我可以定義一個函數,除了值爲pi的數值爲30015.7的地方外,其他地方都是0。除非你碰巧用'pi'抽樣,否則你永遠不會知道那裏的不連續性,你不會得到最大值。 – mgilson

+0

爲什麼不使用'for'循環,其中'我在範圍(0,1001):'中,然後在該循​​環內讓'x = i/100.0'? – mgkrebbs

回答

0
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) 
+0

首先:你只是爲他執行OP的作業,沒有任何解釋?第二:您的功能無法單調減少輸入。最小測試用例:'compute_min_and_max(「 - x」)' – user2357112

+0

@ user2357112 Thanks man :)我設法在您的幫助下修復了'-x'部分。 – thefourtheye

+0

您可以刪除'ast'導入 –

相關問題