2016-10-29 1 views
2

Sympy에서 추상 수학 연산자를 구현하는 쉬운 방법이 있는지 궁금합니다. 연산자를 사용하면 단순히 3 개의 값을 입력 또는 3 개의 색인으로 갖는 "Operator (a, b, c)"와 같은 객체를 의미합니다. 수학적 연산자 (힐버트 공간 이상)를 언급하고 있고 프로그래밍의 맥락에서 연산자를 언급하지 않는다는 점에 유의하십시오. 이 값에 따라 나는 Sympy에게이 종류의 연산자 2를 곱하는 방법과 그것을 Float 등으로 곱하는 법을 가르쳐주고 싶다. 계산의 어느 시점에서 나는이 연산자를 다른 것으로 대체하려고합니다 ...Sympy에서 추상 수학 연산자/객체로 작업하기

지금까지 sympy가 그러한 추상 계산을 제공하는지는 알 수 없었습니다. 그래서이 객체들을 위해 새로운 파이썬 클래스를 작성하기 시작했는데, 이것은 파이썬에서의 나의 제한된 지식의 범위를 훨씬 넘어 섰다 ... 그 다음에 새로운 클래스를 만드는 것이 더 쉬운 방법 일까?

답변

1

세이지 (Sage)가 사전 구축 된 수학적 구조와 함께하기 때문에 SageMath와 SymPy를 살펴볼 수도 있습니다. 그러나 대수 기하학, 다양한 대수학 영역 및 조합론을 향한 눈으로 더욱 발전해 왔습니다. 나는 그것이 어떤 연산자 대수를 어느 정도 구현하는지 확신 할 수 없다.

+0

답변 해 주셔서 감사합니다. 사실 실제로이 객체들이 실제로 힐버트 공간의 연산자라는 계산에는 중요하지 않습니다 ... 그것은 세 개의 매개 변수를 가진 모든 것일 수 있습니다. 나는 단지 sympy에게 말하고 싶다 : 여기에 3 개의 매개 변수가있는 객체가있다. 나를 위해 계산을하고 계산을 위해 당신에게주는 규칙의 목록을 고려해 보라. –

0

예, 가능합니다. sympy.Function 하위 클래스를 만드십시오. 이 기능은 특정 인수에 대한 평가 클래스 기능 eval를 정의하려면 당신은 nargs

class Operator(Function): 
    nargs = 3 

와 인수의 수를 지정할 수 있습니다. 평가되지 않은 채로 남아 있어야하는 경우에는 None을 반환해야합니다. 예를 들어, 세 개의 인수가 0 일 때, 당신은

class Operator(Function): 
    @classmethod 
    def eval(cls, a, b, c): 
     if a == b == c == 0: 
      return Integer(0) 

가 (당신이 eval를 정의하면 nargs이 필요하지 않는다) 사용할 수 있습니다 0으로 평가합니다.