2016-12-24 12 views
1

私はこれらの3つの式を解くためにしようとしている:のPython/Sympy:別の値で方程式を解く

a1 + a2 = b1 
a2 + a3 = b2 
b1 + b2 = c1 
私はランダムに選択されている3つの変数の値を生成する

(コンビネーションB1、B2を禁止し、かつC1)だから、私はa1 = 5、a3 = 10、c1 = 100を持つかもしれないので、sympyでその方程式を解くことができます。

私の問題は、私はそれ以上のコードとループのsympy一部にランダムな入力を転送するように見えることができないということです。

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)) 

私は私の例で述べたように、私はA1、A3とC1を前提としたときにこれは動作しますが、私はランダムに事前にこれらの変数を選択してください。私は、forループの変数が選択されたかに応じて作成しようとしたが、3つの変数があまりにも多くの可能な組合せがあるので、私はあきらめました。

+1

私はあなたが取得し、何をしようとしていることを期待しているものは100%明確ではありませんよ? sympyに 'a1'、' a3'、および 'c1'の値を伝えようとしていますか? – doctorlove

+1

私が正しく理解していれば:Mark、6つの変数のうち3つをランダムに選んで3つの数値だけを与え、残りの3つをsympyで解きたいのですか? –

+0

@DavidZ:はい、それは私がやろうとしています何です! –

答えて

4

私が正しくあなたが求めているものを理解している場合は、その後、その後の数字に置き換えて、象徴最初の方程式を解くためにSympyのlinsolve機能を使用することができます。重要なステップは、どの変数を解決したいのかをlinsolveに伝えることです。私はあなたがのために値をプラグインしたいものからのために解決している変数を分離するためにset Sを使用することをお勧め。あなたはこのようなあなたの変数を宣言することがあります

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

こんにちは、これを行うにはかなり時間がかかりましたが、今は動作します。私は、すべての変数を含むタプルから無作為に選択された変数が削除された部分でいくつかの問題を抱えていました。何らかの理由で何も働かなかったので、結局は両方のセットをリストに入れ、3つの変数を削除するために「del」を使いました。あなたの助けに感謝します。 –

+0

まあ、それは間違いなくそれを行うための理想的な方法ではないのですが、私は推測するあなたのために働くものは何でも。あなたがうまく働いてうれしい。 –