1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2023-11-24

パイソニスタの方へ
・関数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で,モールの応力円を作図

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

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?