caracas: Computer algebra in R
R で SymPy を使うには,rSympPy パッケージというのがあるようなのだが,現在はメンテナンスされていないのか,install.packages() でインストールすることすらできない。
代わりに,caracas というパッケージがある。名前には SymPy を伺わせるものはないが,確かに R から Python の SymPy を使うことになっているようだ。ただ,若干クセがあったり,エクスポートされていない機能があるのが残念だ。
他の SymPy が使えるならそれを使えばよいが,R しか知らないという場合には caracas を使うのも一法であろう。
1. インストール
install.packages("caracas")
前提条件として SymPy がインストールされていること。もしインストールされていない場合は以下でインストールできる。
if (!caracas::has_sympy()) {
caracas::install_sympy()
}
Python の環境設定
library(reticulate) で Python の環境設定
使ってみよう!!
library(caracas)
sympy_version()
[1] ‘1.11.1’
x = symbol('x')
eq = 2*x^2 - x
eq
[caracas]: 2
2⋅x - x
as.character(eq) # 式を文字列に変換する(R へエクスポート)
'2*x^2 - x'
as_expr(eq) # 式を expression に変換する
expression(2 * x^2 - x)
tex(eq) # LaTeX にエクスポートする
'2 x^{2} - x'
solve_sys(eq, x) # eq = 0 を x について解く
Solution 1:
x = 0
Solution 2:
x = 1/2
der(eq, x) # eq を x で微分する
[caracas]: 4⋅x - 1
subs(eq, x, "y") # eq の x に y を代入
[caracas]: 2
2⋅y - y
A = matrix(c("x", 2, 0, "2*x"), 2, 2)
B = as_sym(A) # SymPy の行列に変換する
B
[caracas]: ⎡x 0 ⎤
⎢ ⎥
⎣2 2⋅x⎦
Binv = inv(B) # 逆行列を求める
Binv
[caracas]: ⎡ 1 ⎤
⎢ ─ 0 ⎥
⎢ x ⎥
⎢ ⎥
⎢-1 1 ⎥
⎢─── ───⎥
⎢ 2 2⋅x⎥
⎣ x ⎦
tex(Binv) # LaTeX 形式で出力する
'\\left[\\begin{matrix}\\frac{1}{x} & 0\\\\- \\frac{1}{x^{2}} & \\frac{1}{2 x}\\end{matrix}\\right]'
上の文字列を LaTeX で出力する。環境により若干の修正が必要になることもある。
$$
\left[\begin{matrix}\frac{1}{x} & 0\\ - \frac{1}{x^{2}} & \frac{1}{2 x}\end{matrix}\right]
$$
eigenval(Binv) # 固有値
[[1]]
[[1]]$eigval
[caracas]: 1
─
x
[[1]]$eigmult
[1] 1
[[2]]
[[2]]$eigval
[caracas]: 1
───
2⋅x
[[2]]$eigmult
[1] 1
※コメント投稿者のブログIDはブログ作成者のみに通知されます