(その1/2) sympyのTrussで
(その2/2) 本ページ
2部材トラス,3部材トラスをsympyで
・(1)から移動してきました。
# (V形) 2部材トラス 村上敬宣著 森北出版 P10[例題2.3(1)]
from sympy import *
var('P,Q,δ,λ,θ,L,EA')
equ221=Eq(2*Q*cos(θ),P)
equ222=Eq(λ ,Q*L/EA)
equ223=Eq(λ ,δ*cos(θ))
print("#",solve([equ221,equ222,equ223],[δ,λ,Q])[δ].subs({θ:pi/6}))
# 2*L*P/(3*EA)
# (V形) 3部材トラス 村上敬宣著 森北出版 P10[例題2.3(2)]
from sympy import *
var('R,Q,P,δ,λ1,λ2,θ,L,EA')
equ225=Eq(R+2*Q*cos(θ),P)
equ226=Eq(λ1*cos(θ) ,λ2)
equ227=Eq(λ1 ,R*cos(θ)*L/EA)
equ228=Eq(λ2 ,Q *L/EA)
print("#",(solve([equ225,equ226,equ227,equ228],[λ1,λ2,Q,R])[λ1].subs({θ:pi/6})).simplify())
# 2*sqrt(3)*L*P/(EA*(4 + 3*sqrt(3)))
# (V形) 2部材トラスθ1,θ2,剛体 (1)エネルギー法 村上敬宣著 森北出版 P23[例題2.5]
from sympy import *
var('P,Q,R,δv,λ,θ1,θ2,L,EA')
rep={θ1:pi/6,θ2:pi/3}
equ250=Eq(Q*sin(θ2)-R*sin(θ1) ,0)
equ251=Eq(Q*cos(θ2)+R*cos(θ1)-P,0)
sol =solve([equ250,equ251],[R,Q]) #;print(sol)
R,Q =sol[R].subs(rep),sol[Q].subs(rep)
λ =Q*sqrt(3)*L/EA
print("#",solve(Eq(Rational(1,2)*P*δv,Rational(1,2)*Q*λ),δv)[0])
# sqrt(3)*L*P/(4*EA)
# (V形) 2部材トラスθ1,θ2,剛体 (2)幾何学的条件 村上敬宣著 森北出版 P23[例題2.5]
from sympy import *
var('λ,P,Q,L,EA')
λ=P*sqrt(3)*L/EA
print("#",λ*sin(30*pi/180)*1/2)
# print("#",λ*cos(30*pi/180)*1/2)
# sqrt(3)*L*P/(4*EA)
2部材トラスをsympyのTrussで
ver0.1
・/\ 2部材トラス 何がなんでも、sympyのTrussで。
# ver0.1
from sympy.physics.continuum_mechanics.truss import Truss
import math
from sympy import *
P=1 # var('P')
L=1 # var('L')
θ=pi/6 # var('θ')
t = Truss()
t.add_node (('A',L*sin(θ),L*cos(θ)))
t.add_node (('B',0 ,0 ),('C',L*sin(θ)*2,0))
t.add_member (('AB','A','B') ,('AC','A','C'))
t.apply_support(('B' ,'pinned'),('C','pinned'))
t.apply_load (('A' ,P,90))
p = t.draw()
p.show()
t.solve()
# print("#",t.reaction_loads )
# print("#",t.internal_forces)
#
var('Q,l,AE,x')
U= 1/(2*AE)*integrate((Q*t.internal_forces['AB'])**2,(x,0,l)) \
+1/(2*AE)*integrate((Q*t.internal_forces['AC'])**2,(x,0,l))
print("#",str(diff(U,Q)).replace("Q","P"))
# 2*P*l/(3*AE)
ver0.2
・/ 2部材トラス 何がなんでも、sympyのTrussで。
# ver0.2
from sympy.physics.continuum_mechanics.truss import Truss
import math
from sympy import *
P=1 # var('P')
L=1 # var('L')
θ=pi/6 # var('θ')
dy=1
t = Truss()
t.add_node (('B',0 ,0 +dy),('C',L*sin(θ)*2,0+dy))
t.add_node (('A',L*sin(θ),-L*cos(θ)+dy))
t.add_member (('AB','A','B') ,('AC','A','C'))
t.apply_support(('B' ,'pinned'),('C','pinned'))
t.apply_load (('A' ,P,270))
p = t.draw()
p.show()
t.solve()
# print("#",t.reaction_loads )
# print("#",t.internal_forces)
#
var('Q,l,AE,x')
U= 1/(2*AE)*integrate((Q*t.internal_forces['AB'])**2,(x,0,l)) \
+1/(2*AE)*integrate((Q*t.internal_forces['AC'])**2,(x,0,l))
print("#",str(diff(U,Q)).replace("Q","P"))
# 2*P*l/(3*AE)
ver0.3
・/ 2部材トラス 何がなんでも、sympyのTrussで。
# # ver0.3
from sympy.physics.continuum_mechanics.truss import Truss
import math
from sympy import *
P=1 # var('P')
L=1 # var('L')
θ=pi/6 # var('θ')
t = Truss()
t.add_node (('B',0 ,L*cos(θ)),('C',2*L*sin(θ),L*cos(θ)))
t.add_node (('A',L*sin(θ),0))
t.add_member (('AB','A','B') ,('AC','A','C'))
t.apply_support(('B' ,'pinned'),('C','pinned'))
t.apply_load (('A' ,P,270))
p = t.draw()
p.show()
t.solve()
# print("#",t.reaction_loads )
# print("#",t.internal_forces)
#
var('Q,l,AE,x')
U= 1/(2*AE)*integrate((Q*t.internal_forces['AB'])**2,(x,0,l)) \
+1/(2*AE)*integrate((Q*t.internal_forces['AC'])**2,(x,0,l))
print("#",str(diff(U,Q)).replace("Q","P"))
# 2*P*l/(3*AE)
3部材トラスをsympyのTrussで,できませんでした。
ver0.1
・sympyのTrussは、3部材トラスが苦手のでした。
# ver0.1
from sympy.physics.continuum_mechanics.truss import Truss
import math
from sympy import *
P=1 # var('P')
L=1 # var('L')
θ=pi/6 # var('θ')
t = Truss()
t.add_node ( ('A',L*sin(θ),L*cos(θ)))
t.add_node (('B',0,0),('D',L*sin(θ),0 ),('C',L*sin(θ)*2,0))
t.add_member (('AB','A','B') ,('AD','A','D'),('AC','A','C'))
t.apply_support(('B' ,'pinned'),('D','pinned'),('C','pinned'))
t.apply_load (('A' ,P,90))
p = t.draw()
p.show()
t.solve()
# print("#",t.reaction_loads )
# print("#",t.internal_forces)
#
var('Q,l,AE,x')
U= 1/(2*AE)*integrate((Q*t.internal_forces['AB'])**2,(x,0,l)) \
+1/(2*AE)*integrate((Q*t.internal_forces['AD'])**2,(x,0,l)) \
+1/(2*AE)*integrate((Q*t.internal_forces['AC'])**2,(x,0,l))
print("#",str(diff(U,Q)).replace("Q","P"))
# ValueError: The given truss cannot be solved
いつもの? sympyの実行環境と 参考のおすすめです。
いつもと違うおすすめです。
文献