応力の座標変換式　「youtube【東京理科大学】第５回弾性力学講義」をsympyでやってみたい。

パイソニスタの方へ
**・関数sympify()の使い方を教えて下さい。**
　σ11d_str→σ11d,
　σ12d_str→σ12d
https://docs.sympy.org/latest/modules/core.html

# youtubeの板書です。
**途中9:50から (0:00〜1:13:37)**

https://youtu.be/wroYcqwyyvs&t=590 

# sympyで
・ver0.21 (2023/11/28)　修正版。
・「simplify()」でした。
https://docs.sympy.org/latest/tutorials/intro-tutorial/simplification.html#simplify
・ついでに,factorを,factor(xxx)→xxx.factor()にしました。キーインが楽です。
```python
# ver0.21 (2023/11/28)
from sympy import *

var('θ,σ11,σ12,σ22',real=True)
σ11d_str='1/2          *σ11*(1+cos(2*θ))+σ12*sin(2*θ)+1/2          *σ22*(1-cos(2*θ))'
σ11d    = Rational(1,2)*σ11*(1+cos(2*θ))+σ12*sin(2*θ)+Rational(1,2)*σ22*(1-cos(2*θ))
po=Poly( σ11d,sin(2*θ),cos(2*θ))
f_str=str(po.nth(0,0).factor())+"+"+str(po.nth(0,1).factor())+"*cos(2*θ)"+"+"+str(po.nth(1,0)*sin(2*θ))
print("# σ11'=",σ11d_str.replace(' ',''))
print("# σ11'=",f_str   .replace(' ',''));print()
# 
σ12d_str='(σ22-σ11)*cos(θ)*sin(θ)+σ12*(cos(θ)**2-sin(θ)**2)'
σ12d    = (σ22-σ11)*cos(θ)*sin(θ)+σ12*(cos(θ)**2-sin(θ)**2)
po   =Poly( σ12d,σ12)
f_str=str(po.nth(0).factor())  +"+σ12*("+str(po.nth(1))+")"
f_str=str(po.nth(0).simplify())+"+σ12*" +str(po.nth(1).simplify())
print("# σ12'=",σ12d_str.replace(' ',''))
print("# σ12'=",f_str   .replace(' ',''))
# σ11'= 1/2*σ11*(1+cos(2*θ))+σ12*sin(2*θ)+1/2*σ22*(1-cos(2*θ))
# σ11'= (σ11+σ22)/2+(σ11-σ22)/2*cos(2*θ)+σ12*sin(2*θ)

# σ12'= (σ22-σ11)*cos(θ)*sin(θ)+σ12*(cos(θ)**2-sin(θ)**2)
# σ12'= (-σ11+σ22)*sin(2*θ)/2+σ12*cos(2*θ)
```

**以下は間違っています。申し訳ありません。ver0.2で直しました。σ12'**
~~・自作関数myCosSin_str()は、汎用性がありません。~~
・ver0.１
(せっかくなのでリンクを追加しました。)
・Rational 分数表示のため。関数にしないと、1/2が0.5と表示されます。
 最後に0.5を1/2に、変換する方法はあったと思います。？？？フラクション？？？
https://docs.sympy.org/latest/modules/core.html#sympy.core.numbers.Rational
・factor 因数分解です。
https://docs.sympy.org/latest/tutorials/intro-tutorial/simplification.html#factor
```python
# 間違っていました。申し訳ありま せん。
# ver0.1　→　ver0.2へ
from sympy import *

var('θ,σ11,σ12,σ22',real=True)
def myCosSin_str(expr):
     po=Poly( expr,cos(θ))
     return 'cos(θ)**2' + str(po.nth(0))

σ11d_str='1/2          *σ11*(1+cos(2*θ))+σ12*sin(2*θ)+1/2          *σ22*(1-cos(2*θ))'
σ11d    = Rational(1,2)*σ11*(1+cos(2*θ))+σ12*sin(2*θ)+Rational(1,2)*σ22*(1-cos(2*θ))
po=Poly( σ11d,sin(2*θ),cos(2*θ))
f_str=str(factor(po.nth(0,0)))+"+"+str(factor(po.nth(0,1)))+"*cos(2*θ)"+"+"+str(po.nth(1,0)*sin(2*θ))
print("# σ11'=",σ11d_str.replace(' ',''))
print("# σ11'=",f_str   .replace(' ',''));print()
# 
σ12d_str='(σ22-σ11)*cos(θ)*sin(θ)+σ12*(cos(θ)**2-sin(θ)**2)'
σ12d    = (σ22-σ11)*cos(θ)*sin(θ)+σ12*(cos(θ)**2-sin(θ)**2)
po   =Poly( σ12d,σ12)
f_str=str(factor(po.nth(0)))+"   +σ12*("+str(po.nth(1))+")"
f_str=str(po.nth(0).simplify())+"+σ12*("+myCosSin_str(po.nth(1))+")"
print("# σ12'=",σ12d_str.replace(' ',''))
print("# σ12'=",f_str   .replace(' ',''))
# σ11'= 1/2*σ11*(1+cos(2*θ))+σ12*sin(2*θ)+1/2*σ22*(1-cos(2*θ))
# σ11'= (σ11+σ22)/2+(σ11-σ22)/2*cos(2*θ)+σ12*sin(2*θ)

# σ12'= (σ22-σ11)*cos(θ)*sin(θ)+σ12*(cos(θ)**2-sin(θ)**2)
# σ12'= (-σ11+σ22)*sin(2*θ)/2+σ12*(cos(θ)**2-sin(θ)**2)
```

# (勉強中) Mathematicaで

# (勉強中) MATLAB 追加のオプションSymbolic Math Toolbox で

# いつもの? sympyの実行環境と 参考のおすすめです。
(テンプレート)

https://qiita.com/mrrclb48z/items/00dd08b0317069be9342

# いつもと違うおすすめです。
・(勉強中) FreeCADで,モールの応力円を作図

https://qiita.com/mrrclb48z/items/f1a3cbb772930adb16e6#%E5%8B%89%E5%BC%B7%E4%B8%ADfreecad%E3%81%A7%E3%83%A2%E3%83%BC%E3%83%AB%E3%81%AE%E5%BF%9C%E5%8A%9B%E5%86%86%E3%82%92%E4%BD%9C%E5%9B%B3

・材料力学の索引を作成中です。

https://qiita.com/mrrclb48z/items/fbc5eb2c237586966ce0