2014-02-26 3 views
0

비슷한 질문이 있지만 모두 numpy를 사용하여 답변을 원합니다.간격에 따른 함수의 최소값과 최대 값 찾기

문자열의 최대 값과 최소값을 찾고 싶습니다. 예 : ("신 (x ** 2)") : x [0,10].

나는 내 선생님에게이 힌트를주었습니다. 특별히 1에서 10까지 1001 개의 서로 다른 값을 시도하고 값이 x {(i/100, i [0,1000]} 인 평가 함수를 구현합니다. for 루프를 사용하여 구현할 수 있습니다. 여기서 i 범위 (0,1001)와 이용 증가에 X = I/100.0

참고.. NumPy와 I는 사용할 수 없습니다

+1

힌트 basical 모든 프로그램에 대해 설명합니다. i/100.0, eval (expression)에 x를 지정하면 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 , 만약 당신이 합리적으로 잘이 같은 discretized 상태에서 설명 될 수있는 일은 함수에서 특정 양의 well-behavedness를 가정하고 있습니다 ... eg 나는 값이 30015.7 인'pi' 값을 제외하고 어디에서나 0 인 함수를 정의 할 수 있습니다. 'pi'에서 샘플을 얻지 않는 한, 불연속성이 존재한다는 것을 결코 알지 못할 것이고 최대 값을 얻지 못할 것입니다. – mgilson

+0

'for' 루프를'range (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 고마워. :) 나는 당신의 도움으로'-x' 부분을 고칠 수 있었다. – thefourtheye

+0

당신은'ast' 가져 오기를 놓을 수 있습니다 –