LoginSignup
1
0

More than 1 year has passed since last update.

Julia の SymPy で連立方程式の解を求めたあとにその値を取り出す

Last updated at Posted at 2022-06-04

環境

  • Julia 1.7.2
  • SymPy 1.1.4

背景

SymPy を使って連立方程式の解を求めたところまでは良かったのですが、その値を取り出すのに苦労したので自分のやりかたを書いておきます。

コメントで WolfMoon 様にご教示いただいたのですが、連立方程式を解く際に linsolve ではなく solve を用いれば結果が Dict で戻ってくるようです。その場合は以下のような手順を踏まずとも、もっと楽に結果が取得できます。

以下のようにそのまま取り出そうとするとうまく行きません。

julia> using SymPy;
julia> @vars x y;
julia> f = x + y - 1;
julia> g = x - y - 3;
julia> results = sympy.linsolve([f, g], (x, y))
{(2, -1)}

julia > results[1]
{(2, -1)}

方法

results が SymPy の Set なので SymPy で用意されている elements 関数を使うと取り出せます。ただ各要素は Sym 型なので pyobject を取得してから値を取り出すようにします。

julia> elements(results)
1-element Vector{Sym}:
 (2, -1)

julia> pytuple = first(elements(results)).__pyobject__
PyObject (2, -1)

julia> pytuple[1]
2

PyObject のタプルまで変換すればイテレータも使えるようになるので関数への代入も簡単です。

julia> pairs = Tuple(zip((x, y), pytuple))
((x, 2), (y, -1))

julia> f.subs(pairs)
0

もっとスマートな方法があれば是非ご教示ください。

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0