裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

R で SymPy --- その実態は caracas

2022年10月15日 | R

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


コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 二乗の和 1 + 2^2 + 3^2 + … ... | トップ | 「青チャート式数学II」基本... »
最新の画像もっと見る

コメントを投稿

R」カテゴリの最新記事