0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python の SymPy と Julia の SymPy

Last updated at Posted at 2024-12-02

Python の SymPy と Julia の SymPy の違う点

Python の SymPy と Julia の SymPy にはいくつか注意すべき違いがある。Julia の SymPy は Python の SymPy をラップしたパッケージであり,多くの機能が共通しているが,言語の違いやラッパーとしての実装の影響で異なる点がある。

1. 主な違い

1.1. シンボリック変数の定義

  • Python

symbols 関数を使い文字列でシンボル名を指定する。

python
from sympy import symbols
x, y = symbols('x y')

var も使える。こちらのほうが便利。

python
from sympy import var
var('a, b, c')
  • Julia

@syms マクロを使い,変数を直接定義する。

julia
using SymPy
@syms x y

1.2. 変数の再代入

  • Python
    シンボリック変数 x に値を再代入すると,x は完全に新しい値(数値や式)になる。元の x は保持されない。。
python
x = symbols('x')
print(x)  # x
x = 5
print(x)  # 5
  • Julia

同様に,シンボリック変数 x に数値を再代入すると,元の x は数値として扱われる。

julia
@syms x
println(x)  # x
x = 5
println(x)  # 5

1.3. 型システム

  • Python
    Python は動的型付け言語のため,すべてのオブジェクトの型が実行時に決定される。SymPy のシンボリック変数も特に型を意識する必要はない。
  • Julia
    Julia は静的型付け言語であるが,SymPy では SymPy.Sym 型が使われる。型の違いを意識しながら操作する必要がある。
julia
@syms x
println(typeof(x))  # SymPy.Sym

1.4. 演算の結果

  • Python
    演算結果は SymPy の式オブジェクト (sympy.Basic 派生クラス) である。
python
from sympy import symbols
x = symbols('x')
expr = x + 2
print(expr)  # x + 2
print(type(expr))  # <class 'sympy.core.add.Add'>
  • Julia
    Julia の SymPy も基本的には同様の挙動であるが,型名が異なる。
julia
@syms x
expr = x + 2
println(expr)  # x + 2
println(typeof(expr))  # SymPy.Sym

1.5. 関数の使い方

  • Python
    すべての関数は明示的にインポートする必要がある。
python
from sympy import sin, cos
x = symbols('x')
print(sin(x) + cos(x))
  • Julia
    Julia の SymPy では,シンボリック関数は基本的に Python の SymPy をラップしており,SymPy.sin のように明示的に指定することもできる。
julia
using SymPy
@syms x
println(sin(x) + cos(x))  # sin(x) + cos(x)

1.6. 数値計算 (数値評価)

  • Python

evalf を使用する。

python
from sympy import symbols
x = symbols('x')
expr = x + 2
print(expr.evalf(subs={x: 3}))  # 5.0
  • Julia

subs 関数を使い,さらに値を浮動小数点数に変換する必要がある。

julia
@syms x
expr = x + 2
println(subs(expr, x => 3.0))  # 5.0

1.7. パフォーマンス

  • Python の SymPy は Python ネイティブで実行されるが,Julia の SymPy は Python 呼び出しを介して実行されるため,速度やパフォーマンスの面でオーバーヘッドがある。
  • 数値計算が多い場合は,Julia の他のネイティブライブラリ(例:Symbolics.jl)を検討すると良い。

1.8. 互換性

  • Python の SymPy は常に最新バージョンの機能を利用できる。
  • Julia の SymPy は Python の SymPy に依存しているため,インストールされている Python の SymPy バージョンに依存する。

2. まとめ

  • Python の SymPy はオリジナルで,ほぼ制限なく使える。
  • Julia の SymPy は Python の SymPy をそのまま利用できる利便性があるものの,パフォーマンスや型の扱いに注意が必要である。
  • Julia で純粋にシンボリック計算をしたい場合は,Symbolics.jl も検討すると良い。
0
1
0

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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?