2017-12-11 10 views
1

Mathematica에서 x^2 -> x와 같은 식 교체를 할 수 있습니다. x는 x의 제곱 2를 x로 바꿉니다. 나는 현자에 비슷한 기능이 있는지 궁금하다.매스 매 티카에서와 같이 sage에서 식 교체를하는 방법은 무엇입니까?

R = PolynomialRing(ZZ, 2, "a") 
a = R.gens() 
(a[0] + a[1])^2 
Out[173]: 
a0^2 + 2*a0*a1 + a1^2 

I가 모두 능력을 변경하고 싶은 (> 1) 전원에 1. 그래서^(K)을 교체 -> K 용> = 1

따라서 소망 출력 될 A0 + 2 * a0 * a1 + a1

답변

0

결과를 얻기 위해 문자열 바꾸기를 사용 중입니다. 더 나은 방법이 있다면 알려주십시오. 감사!

def ReplaceExpression(p, locals): 
    s = str(p) 
    s1 = re.sub(r'\b(a\d+)\^\d+', "\g<1>", s) 
    return sage_eval(s1, locals = locals) 

adict = dict([(str(i), i) for i in a]) 
ReplaceExpression((a[0] + a[1])^2, adict) 

Out[1]: 2*a0*a1 + a0 + a1 
+1

https://ask.sagemath.org/questions에서이 질문을 할 수 있습니다.이 질문에는 더 간단한 대답이 있기를 바랍니다. Mathematica를 Sagemath로 바꾸려고하는 것은 이와 같은 표현을 조작하려는 사람들에게는 정말로 어렵습니다. – Mafra

+0

와일드 카드를 사용해 보셨습니까? SR.wild를 입력 하시겠습니까? 이것에 대한 도움을 얻을 수 있습니다. – Mafra

0

SageMath은 상징적 인 수학에 대한 SymPy을 사용하기 때문에 표현식에 replace() 방법이 있어야한다.

>>> A 
a0**2 + 2*a0*a1 + a1**2 
>>> A.replace(lambda expr: isinstance(expr, sympy.Pow), lambda expr: expr.args[0]) 
2*a0*a1 + a0 + a1 

이것은 두 개의 함수가있는 변형을 인수로 사용합니다. 첫 번째는 표현식 트리에서 대체 할 노드를 테스트하고 두 번째가 대체를 계산하는 필터입니다.

Pow 노드를 찾고 첫 번째 인수로 바꿉니다.

0

다항식 링의 지수를 이상으로 정의 할 수 있습니다.

sage: R = PolynomialRing(ZZ, 2, "a") 
sage: a = R.gens() 
sage: b = (a[0] + a[1])^2 
sage: b 
a0^2 + 2*a0*a1 + a1^2 
sage: J = R.ideal([x^2 - x for x in a]) 
sage: J 
Ideal (a0^2 - a0, a1^2 - a1) of Multivariate Polynomial Ring in a0, a1 over Integer Ring 
sage: S = R.quo(J) 
sage: S 
Quotient of Multivariate Polynomial Ring in a0, a1 over Integer Ring by the ideal (a0^2 - a0, a1^2 - a1) 
sage: S(b) 
2*a0bar*a1bar + a0bar + a1bar 
관련 문제