0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

トラス「2部材トラス,3部材トラス いろいろ(その2/2)」

Last updated at Posted at 2025-06-02

(その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)

・上下をひっくり返して見て下さい。
111.png

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)

111.png

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)

111.png

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の実行環境と 参考のおすすめです。

(テンプレート)

いつもと違うおすすめです。

文献

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?