2017-02-20 14 views
-1

scipy.integrate.quad을 사용하여 통합 할 때 ValueError이 표시됩니다. 여기 내 간단한 코드는 다음과 같습니다scipy.integrate.quad를 사용할 때 ValueError

ValueError: setting an array element with a sequence. 

사람이 제대로 이러한 통합 작업을 수행하는 방법을 제안하십시오 수 :

import numpy as np 
import scipy.integrate as integrate 
p = np.arange(0,1,1/1000) 
h = lambda p: p**2/2+p*(1-p) 
Kl = lambda p: h(p) + 0.02 
K = Kl(p) 
R = 0.5*h(p) + 0.5*h(1) 
Vl = lambda p: np.minimum.reduce([p, K, R]) 
integrate.quad(Vl, 0, 1)[0] 

마지막 줄은 예외를 준다? 감사합니다

+0

'VI'기능을 설명해 주시겠습니까? 'np.minimum.reduce ([p, K, R])'에게 무엇을 원합니까? – DSM

+0

감사합니다. @DSM. 나는 그것을 p, K와 R의 원소 단위의 최소값을 취하고 싶다. 나는 이것을 수학 함수로 생각한다. Vl (p, K (p), R (p)) – splinter

+0

이것은 http : //와 같은 코드이다. /stackoverflow.com/questions/42342409/valueerror-when-defining-a-lambda-function-in-python; 약간 다른 질문입니다. – hpaulj

답변

1

나는이 코드가 배열과 함께 플로트의 기능을 혼동한다고 생각합니다. quad의 함수 인수는 부동 소수점을 허용하고 부동 소수점을 반환해야합니다.

Vl = lambda p: np.minimum.reduce([p, K, R]) 

p

의 float이다 (그리고 p 그것이 인수와 같은 이름의 전역 모듈이 보통 나쁜 생각 array--되지 않습니다)하지 않고 KR 배열이를, 우리가 원하는 것을 (즉, 오류를 던지고거야.)

나는 그냥 나에게

을 제공

def h(p): 
    return p**2/2+p*(1-p) 

def K(p): 
    return h(p) + 0.02 

def R(p): 
    return 0.5*h(p) + 0.5*h(1) 

def Vl(p): 
    return min(p, K(p), R(p)) 

을 찾고 있다고 생각

In [177]: integrate.quad(Vl, 0, 1.0) 
Out[177]: (0.34689543041336846, 4.8736376714649885e-09)