2016-12-24 1 views
1

I이 세 방정식을 해결하기 위해 노력하고있어파이썬/Sympy는 : 다른 값으로 방정식 해결

a1 + a2 = b1 
a2 + a3 = b2 
b1 + b2 = c1 
I 임의로 선택된 세 개의 변수에 대한 값을 생성

(조합 B1, B2를 허용하지 않음을, 및 C1) 그래서 a1 = 5, a3 = 10, c1 = 100 일 수 있으므로 sympy로 방정식을 풀 수 있습니다.

내 문제는 코드의 sympy 부분에 무작위 입력을 전송할 수 없다는 것입니다. 내 예에서 언급 한 바와 같이 나는 A1, A3 및 C1을 가정 할 때

a1, a2, a3, b1, b2, c1 = symbols('a1 a2 a3 b1 b2 c1') 
solve([a1.subs(a1, 5) + a2 - b1, a2 + a3.subs (a3, 10) - b2, b1 + b2 - c1.subs (c1, 100)], (a1, a2, a3, b1, b2, c1)) 

이 작동하지만, 나는 무작위로 사전에 그 변수를 선택합니다. 어떤 변수가 선택되었는지에 따라 for-loops를 만들려고 시도했지만 세 변수의 조합이 너무 많아서 포기했습니다.

+1

I 해요 당신이 얻을 것으로 기대하고 무엇을 시도 것을 100 % 명확? sympy에게'a1','a3' 및'c1'의 값을 알려 주려고합니까? – doctorlove

+1

제대로 이해했다면 : Mark, 6 개의 변수 중 3 개를 무작위로 선택하고 그 3 개의 숫자 값만주고 싶다면 나머지 3 개를 sympy로 해결 하시겠습니까? –

+0

@DavidZ : 그래, 그게 내가하려는거야! –

답변

4

내가 무엇을 묻고 있는지 정확히 이해했다면 Sympy의 linsolve 함수를 사용하여 방정식을 기호식으로 먼저 풀어 낸 다음 나중에 숫자로 대체 할 수 있습니다. 주요 단계는 linsolve에게 어떤 변수를 풀 것인지를 알려주는 것입니다. set을 사용하여 해결하려는 변수를 값을 연결하려는 변수와 분리하는 것이 좋습니다. 이처럼 변수를 선언 할 수 있습니다

all_vars = symbols('a1 a2 a3 b1 b2 c1') 
# randomly choose which variables will have values 
plug_in_for_vars = ... 
solve_for_vars = tuple(set(all_vars) - set(plug_in_for_vars)) 

그런 다음 당신이 그런 다음에 연결 할 수 있습니다 방정식

equations = [a1 + a2 - b1, a2 + a3 - b2, b1 + b2 - c1] 

를 정의하고이를 통과 linsolve

solution = linsolve(equations, solve_for_vars) 

에 선택한 변수 수 선택한 값. 물론 value(variable)

solution.subs({variable: value(variable) for variable in plug_in_for_vars}) 

당신이에 연결 할 수 있습니다. 원하는 숫자 값을 결정하기 위해 무엇 이건에 대한 프록시

+0

안녕하세요,이 작업을 수행하는 데 꽤 오래 걸렸지 만 지금은 작동합니다. 모든 변수가 들어있는 튜플에서 무작위로 선택된 변수가 제거 된 부분에 문제가있었습니다. 어떤 이유로 든 아무 것도 작동하지 않으므로 결국 두 세트를 목록에 넣고 'del'을 사용하여 세 변수를 제거합니다. 도와 주셔서 정말로 고맙습니다. –

+0

글쎄, 그건 분명히 이상적인 방법은 아니지만, 내가 생각하기에 어떤 작품이든간에. 다행 이군. –

관련 문제