2017-12-21 39 views
2

기호를 포함하는 Sympy 식을 강제 :(다음 계산 2 차원 동적 시스템의 <a href="https://en.wikipedia.org/wiki/Nullcline" rel="nofollow noreferrer">nullclines</a> 그릴 의도로) 내가 python3에 다음 코드를 작성

import sympy as sm 
x1, x2 = sm.symbols('x1 x2') 
x = [x1, x2] 
sys = sm.Matrix([(x1 - sm.log(x2))*(x2-x1*x1), 
    x2**2 - 4]) 
solutions = list(map(lambda dx: sm.solve(sm.Eq(dx, 0)), sys)) 
print(solutions) 

내가 무엇을보고하는 것은

입니다
[[{x1: -sqrt(x2)}, {x1: sqrt(x2)}, {x1: log(x2)}], [-2, 2]] 

다음은 솔루션을 그리기 위해이 [-2,2]가 큰 문제가됩니다. 각 요소에 두 변수가 모두 포함되어 있는지 여부를 sys과 함께 작업하고 싶습니다. 나는 사전을 반복하고 sm.Eq(list(solutions[i][j].keys())[0], list(solutions[i][j].values())[0])을 플롯하고 싶지만 난 내가 sys[1]+ x1 - sm.log(sm.exp(x1))를 추가하는 경우가 나에게 일관성있는 사전 양식을 줄 것이다 것을보고이

같은 사전을 보장 할 수 없습니다,하지만 방법에 대한이있다 나를 sys '요소를보다 우아한 방식으로 모두 포함하도록 강제 하시겠습니까? 두 요소 모두에서 좌표를 찾고 싶지 않습니다. 이중 표현식을 추가 할 수없는 경우

+0

'목록 (지도 (람다 DX : sm.solve (sm.Eq (DX, 0)), SYS))와 함께 작동 방법은 다음과

는'동일합니다 sys [dx에 대한 sm.solve (sm.Eq (dx, 0))]에'. 당신은 방정식의 체계를 풀지 않고 있습니다, 당신은 두 방정식을 풀고 있습니다. 미안, 이것이 분명하다면, 널 클러치를 그릴 때 방정식 시스템을 푸는 것이 상상되지만, 나는 당신의 목표를 오해 할 수도 있습니다. – winerd

+0

좀더 우아 해 보이지만, 여전히 어떤 시스템에서는 하나의 방정식이 좌표에서 독립적이며'solve()'의 출력이 사전 형식이 아닌 문제와 관련하여 도움이되지 않습니다. –

+1

sys는 자주 사용됩니다 중고 모듈. 변수로 사용하지 않는 것이 가장 좋습니다 – ShpielMeister

답변

3

인수가 dict=True입니다. sm.solve(sm.Eq(dx, 0), dict=True)으로 코드의 출력이 말했다

[[{x1: -sqrt(x2)}, {x1: sqrt(x2)}, {x1: log(x2)}], [{x2: -2}, {x2: 2}]] 

, 난 당신이 sys의 방정식에 직접 단순히 plot_implicit를 사용하여 대 아무것도 승리 모르겠어요. 커브가 돌아서거나 옆으로 지나갈 때 (포물선 등) 다른 솔루션의 정의 영역이 달라진다는 것을 고려하십시오. 두통이되어 모든 조각을 그려보십시오. 이 plot_implicit

import sympy as sm 
x1, x2 = sm.symbols('x1 x2') 
eqs = [(x1 - sm.log(x2))*(x2-x1*x1), x2**2 - 4] 
window = [(x1, -3, 3), (x2, -3, 3)] 
plots = [plot_implicit(eq, *window, show=False) for eq in eqs] 
combined_plots = plots[0] 
for k in range(1, len(plots)): 
    combined_plots.extend(plots[k]) 
combined_plots.show() 

nullclines

+0

오 와우! 그게 내가 필요한 것입니다. 나는 편리한 sympy 기능들을 여기에 모르고 있었다. –