2016-06-15 2 views
4

Python 2.7.11에서 Sympy 패키지 버전 1.0을 사용하여 (나에게) 부적절한 것을 발견했습니다. 예상대로 내가 가진 무엇 양수로 가정 할 때 Sympy에서 가능한 불일치

import sympy as sy 
from sympy.stats import Normal, density 
from sympy.assumptions import assuming, Q, ask 

sy.init_printing() 

a = sy.symbols('a', real=True) 
with assuming(Q.positive(a)): 
    print ask(Q.positive(a)) 
    N = Normal('N', 0, a) 

가 첫 번째 인쇄에서

True 

하지만

ValueError: Standard deviation must be positive 

할 수있는 일반 객체를 생성 예외 : 이것은 내가 사용하고 코드입니다 아무도, 왜 이런 식으로 의도되고 왜 그런지 설명해주십시오. 감사!

PS : SymPy의 시스템은, 기존의 스타일과 새로운 스타일의 가정이라는 두 가지 가정이있다 : 나는 기호이 문제는 간단하다

+1

예제를 더 단순화 할 수 있습니다. b와 c는 삭제할 수 있습니다. Normal ('N', 0, a)를 호출하면 Francesco Bonazzi가 설명한 이유로 동일한 오류가 발생합니다. Normal이 요구하는 조건은 std> 0이며, 그 boolean 값은 None으로 반환됩니다. –

+0

@soup : 감사합니다. 코드가 더 단순 해 보이도록 편집했습니다. – ilmorez

답변

3

긍정적으로 선언 할 수 있다는 것을 알고 있어요. 그들은 아직 꽤 잘 상호 작용하지 않습니다.

구형 가정은 기호에 대한 술어를 정의합니다.

x = Symbol("x", positive=True) 

공제는 다음과 같은 .is_positive SymPy의 최신 버전은 새로운 스타일의 것들로 이전 스타일의 가정을 연결했다

>>> x.is_positive 
True 

등의 방법으로 일반적인 표현에서 수행, 그래서 당신은 지금 조회 할 수 있습니다 두 가정이 시스템이 전혀 연결되지 않은 것처럼 SymPy의

>>> ask(Q.positive(x)) 
True 

이전 버전, None을 반환합니다.

문제는이 관계가 이고 아직이 맞지 않습니다. 이전 스타일의 가정 시스템은 새로운 스타일의 가정 시스템으로 정의 된 가정을 인식하지 못합니다. 당신은 스스로를 확인할 수 있습니다

>>> with assuming(Q.positive(y)): 
... print y.is_positive  
None 

랜덤 변수 정상 긍정적으로 표준 편차의 매개 변수를 요구, 검증은 이전 스타일의 가정으로 이루어집니다. 따라서 귀하의 사건은 실패합니다.

표준 편차에 대한 양성 조건은 다음 SymPy 버전에서 음이 아닌 조건으로 완화 될 수 있습니다 (즉 양성 - 무기한 경우 허용).

+0

[최근 커밋] (https://github.com/sympy/sympy/commit/02b9dec4ebf5f8a36f538306a24a90ba41bd984f)은'_check_value'를 변경하여 ' condition == False'가 아니라'condition! = True' 일 때. –

관련 문제