目次
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
コメントを残していただけるとありがたいです