파이썬에서 함수의 최대 값을 찾는 방법은 무엇입니까? 파생 함수를 해킹하여 0을 찾아 볼 수도 있지만, numpy
(또는 다른 라이브러리)에는 저에게 해줄 수있는 메서드가 있습니까?함수의 최대 값 찾기
답변
scipy.optimize.fmin
은 잘못된 기능에 사용할 수 있습니다.
def f(x): return -2 * x**2 + 4 * x
max_x = scipy.optimize.fmin(lambda x: -f(x), 0)
# array([ 1.])
하지만 여기서는 수치 해석 문제에주의를 기울여야합니다. 누군가가 "도서관에서 어떻게이 문제를 해결할 수 있습니까?" 라이브러리 함수가하는 일을 실제로 이해했는지 확인하십시오. 오랜 시간 동안 수치 작업을 해왔다 고해도 마찬가지입니다. 나는 최근에'scipy.stats'로 [유사한 문제] (http://stackoverflow.com/questions/10038543/tracking-down-the-assumptions-made-by-scipys-ttest-ind-function)를 겪었다. – ely
관련이없는 질문은 유감 스럽지만 람다식이 0 인 이유는 무엇입니까? – user1700890
0은 '람다'의 일부가 아닙니다. 'lambda '는 일반적인 파이썬 함수가 할 수있는 방식으로 쉼표로 구분 된 값의 시퀀스를 반환함으로써 암시 적으로'튜플 (tuple)'을 반환 할 수 없습니다. 이 경우 쉼표는'scipy.optimize.fmin'에 대한 인수 목록의 일부이므로 전체 첫 번째 인수는'lambda x : -f (x)'이고 두 번째 인수는 모두'0'입니다. – ely
시도해 볼 수 있습니다 SymPy. SymPy는 파생물을 상징적으로 제공하고 해당 0을 찾을 수 있습니다.
분석 할 수있는 기능이 있다면 SymPy를 시도하십시오. 위의 EMS 예제를 사용합니다. 물론
In [1]: from sympy import *
In [2]: x = Symbol('x', real=True)
In [3]: f = -2 * x**2 + 4*x
In [4]: fprime = f.diff(x)
In [5]: fprime
Out[5]: -4*x + 4
In [6]: solve(fprime, x) # solve fprime = 0 with respect to x
Out[6]: [1]
, 당신은 여전히 1은 극대화가 아니라 F의 최소화 부 있는지 확인해야합니다
In [7]: f.diff(x).diff(x) < 0
Out[7]: True
나는 scipy.optimize.minimize_scalar
생각하고 scipy.optimize.minimize
당신에게 액세스 권한을 부여하는, 지금은 선호하는 방법입니다 기술 범위, 예. 매개 변수 함수의
0과 1 사이의 최대 있어야만 하나의 변수 함수
solution = scipy.optimize.minimize_scalar(lambda x: -f(x), bounds=[0,1], method='bounded')
.
import scipy.optimize as opt
def get_function_max(f, *args):
"""
>>> round(get_function_max(lambda x, *a: 3.0-2.0*(x**2)), 2)
3.0
>>> round(get_function_max(lambda x, *a: 3.0-2.0*(x**2)-2.0*x), 2)
3.5
>>> round(get_function_max(lambda x, *a: a[0]-a[1]*(x**2)-a[1]*x, 3.0, 2.0), 2)
3.5
"""
def func(x, *arg):
return -f(x, *arg)
return f(opt.fmin(func, 0, args=args, disp=False)[0], *args)
- 1. 불확실성 하에서 함수의 최대 값 찾기
- 2. 열의 최대 값 찾기
- 3. 파이썬에서 최대 값 찾기
- 4. 세트의 최대 값 찾기
- 5. CUDA에서 최대 값 찾기
- 6. 최소값과 최대 값 찾기
- 7. Doctrine에서 Groupwise 최대 값 찾기
- 8. 벡터의 최대 값 인덱스 찾기
- 9. 오브젝트 벡터의 최대 값 찾기
- 10. Ada의 배열에서 최대 값 찾기
- 11. 히스토그램의 로컬 최대 값/최대 값 및 최저값 찾기
- 12. MATLAB을 사용하여 벡터에서 최대 값 찾기
- 13. Matlab에서 최대 값보다 작은 값 찾기
- 14. 자바 스크립트 배열에서 최대 값 키 찾기
- 15. 반복 요소가있는 배열에서 최대 값 찾기
- 16. Visual Basic에서 다중 최대 값 찾기
- 17. 배열 서브 세트의 최대 값 찾기
- 18. vb.net을 사용하여 배열에서 최소값과 최대 값 찾기
- 19. ArrayList의 최대 수 찾기 (복수의 최대 값 가능성 있음)
- 20. 최대 클러스터의 최소값 찾기?
- 21. CURLOPT_TIMEOUT의 최대 값
- 22. 창 최대 최대 값
- 23. const 함수의 반환 값
- 24. C# 함수의 값 반환
- 25. MySQL 함수의 반환 값
- 26. 찾기 값
- 27. 최대 값
- 28. Python에서 함수의 매개 변수 찾기
- 29. Excel. 함수의 결과 찾기 2010
- 30. 허수와 인접한 함수의 근간 찾기
골든 섹션 검색을 살펴보십시오. http://en.wikipedia.org/wiki/Golden_section_search – wberry
@EMS는 일반적으로 내가하는 일이지만 항상 그래야하는 것은 아닙니다. 당신은 사람들에게 시간을 좀 주어야합니다 : P –
미안 해요, 나는 persnickety 소리를 의미하지는 않습니다. 많은 사람들이 받아 들일 수 없으므로, 보통 1 일 후와 같은 미리 알림 메모를 작성합니다. – ely