【sympy】代数計算(数式処理)を行うPythonのライブラリのメモ【Mathematica】

Sympy

MathematicaからPythonへのコンバートをする仕事があったので。。 その時にはまったことをメモ

Sympyは、公式サイトは、こちら

https://www.sympy.org/en/index.html

MathematicaやMatlab(Octave)みたいな数式処理をしながら使えるものです。

ちなみに、Mathematicaは、今は、Wolflamlanguageっていうので、見るだけなら無料のplayerで見れます。

https://www.wolfram.com/player/?source=nav

Wolfram engineっていうのもあって、動かせそうなんですが、動かせない

 

Sympyは、難しい式を、簡単にしていったり、方程式を解いてくれたりするライブラリです。

本当に代数的に計算するなら、Numpyとか、Cupy(Cudaで計算)を使うんですが、それに持っていく式を作るところなどに使います。

一番のはまりどころ Solve

ある意味で、solveが使いたいために、sympy使っているのですが。。

https://github.com/sympy/sympy/issues/6659

なんか巨大なissueが潜んでいるようです。 通常簡単な方程式では、十分使えていて、日本語の解説など読むと使えるんですが。。どうも今回やったようなちょっとだけ複雑な式では答えが返ってこない。。

で。。何を使うか?

solveset を使いました。

https://docs.sympy.org/latest/modules/solvers/solveset.html

これ使うまで解けなかったのよね。。

これが0の時のfを解くというのを この関数が、Zgfだと。。

fがなくなってるでしょ。。 Mだけの関数になってて、このMに値を代入すると答えがでてくる。 この場合虚数だけど。。

集合なのね。。finiteset

タプルとか、リストとかじゃないのを返してくるんですね。。

sympyでの集合ってこういうことみたいです。数学だから集合で表すみたい。

https://qiita.com/simonritchie/items/10d3be5e35fff8f3f368

で、上の解なんかでも、集合で返されるから。。一個とりだしたいときは、一回listみたいなので型変換しないといけません。。

numpyの式に変換する lamdify

Numpyで計算する方がやっぱり慣れてたりします。Sympyで簡単かしたりした式を、ScipyやNumpyの形式にしてくれる関数があって、これを使うとNumpyでの計算に使えます。

https://docs.sympy.org/latest/modules/utilities/lambdify.html

https://kyotogeopython.zawawahoge.com/html/%E5%BF%9C%E7%94%A8%E7%B7%A8/SymPy%E3%83%BC%E4%BB%A3%E6%95%B0%E6%BC%94%E7%AE%97%EF%BC%88%EF%BC%91%EF%BC%89%E4%BD%BF%E3%81%84%E6%96%B9.html

 

日本語で、使い方などが乗っているサイト

逆引き的に、使えます

https://gochikika.ntt.com/Features/SymPy.html

Mathematicaわかってる人には、わかりやすい。

https://qiita.com/zawawahoge/items/1be137a8147902a5e6cb

https://home.hirosaki-u.ac.jp/jupyter/sympy/

 

MathematicaからPythonへの変換

とっても、SymPyしていましたが。。できました。 よかった。。 ← これが書きたかっただけ(笑)

 

Sympyの使い方を制御・コントロールを題材にした例題

https://dynamics-and-control.readthedocs.io/en/latest/index.html

投稿者 tom2rd

コメントを残していただけるとありがたいです

Loading Facebook Comments ...

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください