2016-10-28 4 views
2

임의의 함수 f를 정의하고 싶습니다. 나는 f가 항상 양수를 반환한다는 것을 알고있다. sympy가 단순화를 실행할 때이 지식을 사용할 수 있기를 바란다. (특히 단순화 문서에서 언급 된 세 가지 전원 규칙). 이것을 할 수있는 방법이 있습니까? 나는 다음과 같은 것을 찾고 있어요 :sympy 임의 함수 범위

여기
f = Function("f", positive = True) 
g = Function("g", positive = True) 
x = symbols("x") 
y = symbols("y") 
n = symbols("n", real = True) 

test = (f(x) * g(y)) ** n 
# This should work but doesn't 
expand_power_base(test) 
+0

사용자의 질문을 이해할 수 없도록 명시 적으로 하위 클래스를 만들어야합니다. 임의의 양수를 반환하는 함수를 원하니? – AbrahamB

+0

질문이 명확하지 않습니다. –

+0

명확히하기 위해 몇 가지 코드를 추가했습니다. 여전히 불분명한지 알려주십시오. – bramtayl

답변

0

기능은 현재 가정을 지원하지 않습니다.

class f(Function): 
    is_positive = True 
+0

와우, 답변 주셔서 감사합니다! f 클래스의 객체는 정규 함수가 어떤 식 으로든 사용될 수 있습니까? 아니면 추가해야 할 것이 있습니까? – bramtayl

+0

같은 방식으로 작동합니다. 'f = Function ('f')'(대략)'class f (Function) : pass'와 같습니다. – asmeurer

0

는 것들에 대해 진행의 그리 좋은 방법입니다 :

alphabet = list(string.ascii_lowercase) 

def assert_positive(value, args): 
    result = value 
    for i in range(len(args)): 
     a_symbol = symbols(alphabet[i], positive = True) 
     result = result.subs(args[i], a_symbol) 

    result = simplify(result) 

    for i in range(len(args)): 
     a_symbol = symbols(alphabet[i], positive = True) 
     result = result.subs(a_symbol, args[i]) 

    return(result) 
0

한 가지 해결 방법은 force=True 옵션을 expand_power_base를 호출하는 것입니다. 이로 인해 sympy은 가정과 관계없이 전원 단순화를 수행해야합니다. Function('f') 같이 정의

import sympy as sp 

f = sp.Function("f") 
g = sp.Function("g") 
x, y, n = sp.symbols("x, y, n") 

test = (f(x) * g(y)) ** n 
sp.expand_power_base(test, force=True) 

f(x)**n*g(y)**n

+0

이것은 나를 위해 작동하지 않습니다. 내 실제 표현은 반복적이고 매우 복잡하며 한 번에 세 가지 규칙을 모두 사용할 수 있어야합니다. – bramtayl