パイソニスタの方へ
・関数sympify()の使い方を教えて下さい。
σ11d_str→σ11d,
σ12d_str→σ12d
https://docs.sympy.org/latest/modules/core.html
youtubeの板書です。
途中9:50から (0:00〜1:13:37)
sympyで
・ver0.21 (2023/11/28) 修正版。
・「simplify()」でした。
https://docs.sympy.org/latest/tutorials/intro-tutorial/simplification.html#simplify
・ついでに,factorを,factor(xxx)→xxx.factor()にしました。キーインが楽です。
# 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.1
(せっかくなのでリンクを追加しました。)
・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
# 間違っていました。申し訳ありま せん。
# 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の実行環境と 参考のおすすめです。
(テンプレート)
いつもと違うおすすめです。
・(勉強中) FreeCADで,モールの応力円を作図
・材料力学の索引を作成中です。