2013-07-16 3 views
1

이것은 정말 기본적인 질문이지만, 봤는데 봤지만 찾지 못했습니다. sympy에서 벡터가 있다고 가정합니다.sympy에서 벡터의 x- 성분을 계산하십시오.

z = 3*x + 4*y 

벡터의 x- 성분 (즉, 3)은 어떻게 계산합니까? z/x는 그것을 제공하지 않습니다 (여전히 y- 부분이 있습니다). z [x] 또는 z.x도 없습니다. 분명히 할 수있는 방법이 있습니다. 맞습니까?

+0

, z.subs ({X : 1 Y : 0}) 작동한다. 더 좋은 방법이 있습니까 ?? – Rick

+0

변수'z'가 단순히 변수'x, y'의 표현식 일 때 나는 벡터 지원을 기대하지 않습니다. 아마도 변수를'z (x, y)'함수로 만들고 나서'z (1, 0)'을 할 것입니다. – wflynny

답변

2

가 간단로서 : 좋아

>>> from sympy.abc import x, y 
>>> z = 3*x + 4*y 
>>> z.coeff(x) 
3 
+0

땡땡 울림! 우승자가 있습니다. 나는 이런 것을 알고있었습니다. 매우 감사합니다! – Rick

1

이 표현식을 벡터라고 부르는 것은 다소 잘못된 것 같습니다. 사실, xy이 기본 벡터 인 가정을 염두에두면에 을 사용할 수 있습니다. 그러나 라이브러리는 벡터와 같은 기능을 제공하지 않을 것입니다. 왜냐하면이 기능을 벡터로 취급하려고한다는 것을 모르기 때문입니다.

훌륭한 헬퍼 메소드가있는 벡터의 경우 과 R^3 개의 좌표계가있는 사전 정의 된 sympy 서브 모듈 diffgeom을 사용할 수 있습니다.

그러나 귀하의 경우 패턴 일치은 훨씬 자연스러운 선택입니다. 모든 패턴 매칭이 매스 매 티카 (Mathematica) 및 다른 것들과 같은 CAS의 기본 빌딩 블록 중 하나입니다.

다른 모든 CAS와 마찬가지로 SymPy에서 심볼릭 식은 기본적으로 각 노드에 연산자가있는 큰 트리와 리프에있는 일부 기호로 작업합니다. 문자열에 정규 표현식을 사용할 수있는 것과 같은 방법으로 미리 정의 된 패턴과 나무를 일치시킬 수 있습니다. 선형 조합의 특별한 경우를 들어

x, y = Symbols("x y") 
a, b = Wild('a', exclude=[x, y]), Wild('b', exclude=[x, y]) 
(2*x + 3*y).match(a*x + b*y) 

다른 대답에 설명되어 coeff을 확인하십시오 sympy에서 당신은 그렇게 할 Wild를 사용합니다.

참조 : https://github.com/sympy/sympy/wiki/Idioms-and-Antipatterns#wild-and-match

+0

감사합니다. CAS 사용법을 배우려면 분명 많이해야합니다. – Rick

관련 문제