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?

「一級建築士【構造力学演習】モーメント①-01前半問題」をsympyでやってみたい。 Beamで 。

Last updated at Posted at 2025-01-04

・長文です。7通り。できなかったものを含めて。

パイソニスタの方へ
vr0.6で、matplotlib 目盛りを非表示にすると、 ??? backend
 ??? matplotlib 作図が3回でます。アドバイスをいただけると幸いです。
 https://matplotlib.org/
ver0.7で、Beamで
 計算と作図を一つにできませんでした。分けました。
 作図を一つにできませんでした。分けました。

オリジナル

でめまる構造 様 (0:00〜16:32)
>前半問題 (0:00〜10:07) 比を求めよ。
https://youtu.be/0o7XS0_0zK4

・私は、未知数の数を理解できていません。???時計回り ???反時計回り

sympyのweb上での実行方法

SymPy Live Shellで
https://qiita.com/mrrclb48z/items/00dd08b0317069be9342#web%E4%B8%8A%E3%81%AE%E5%AE%9F%E8%A1%8C%E6%96%B9%E6%B3%95sympy-live-shell%E3%81%A7

sympyで(オリジナル 様の方法で)

ver 0.1 >②へ③を代入し... いつも通り...。 2:00
 2つの式をイコールで結ぶ。私には難しいです。。

# ver 0.1 >②へ③を代入し... いつも通り...。 2:00
from sympy import *
var('P,wL,L,VB,VC')
# sgm_Y_maru1=VB-P+VC-wL 
sgm_MC_maru2 =((VB*3*L-P*2*L+wL*L/2)/(3*L)).expand()            ;print("# ②",sgm_MC_maru2)
hidari       =VB*2*L-P*L
VB_sol_maru3 =solve(Eq(hidari,0),VB)[0]                         ;print("# ③",VB_sol_maru3)
NiHeMaru3    =str(sgm_MC_maru2).replace("VB",str(VB_sol_maru3)) ;print("#"  ,NiHeMaru3   )
print("#",solve(Eq(sympify(NiHeMaru3),0),P)[0]/wL)
# ② -2*P/3 + VB + wL/6
# ③ P/2
# -2*P/3 + P/2 + wL/6
# 1

ver 0.2 "※別解" >または、①へ③を代入し... 私は、どうやっていいかわからない。とりあえず.. 6:31

# ver 0.2 >または、①へ③を代入し... 私は、どうやっていいかわからない。とりあえず.. 6:31
from sympy import *
var('P,wL,L,VB,VC')
sgm_Y_maru1=VB-P+VC-wL 
# sgm_MC_maru2 =((VB*3*L-P*2*L+wL*L/2)/(3*L)).expand()                      ;print("# ②",sgm_MC_maru2)
hidari       =VB*2*L-P*L
VB_sol_maru3 =solve(Eq(hidari,0),VB)[0]                                     ;print("# ③",VB_sol_maru3)
migi          =-VC*L+wL*(L*1.5)
VC_sol_maru3 =solve(Eq(migi,0),VC)[0]                                       ;print("# ③",VC_sol_maru3)
ItiHeMaru3   =str(sgm_Y_maru1).replace("VC",str(VC_sol_maru3))              ;print("#"  ,ItiHeMaru3   )
print("#",solve(Eq(sympify(ItiHeMaru3).subs({VB:VB_sol_maru3}),0),P)[0]/wL)
# ③ P/2
# ③ 1.5*wL
# -P + VB + 1.5*wL - wL
# 1

ver 0.3 "おまけ" モーメント図を書いて求める。7:33

# ver 0.3 >おまけ モーメント図を書いて求める。7:33
from sympy import *
var('P,wL,L')
print("#",solve(Eq((P*L)*(1/3),(wL*(L/2))*(2/3)),P)[0]/wL)  
# 1

sympyで(私のいつも通りで)

ver 0.4 左自由体の右断面の断面位置での左側のモーメントつりあい。日本語が変かも。
・3元連立方程式です。2元連立方程式(RB,RC)と1元方程式(P)でも可。

# ver 0.4 左自由体の右断面の断面位置での左側のモーメントつりあい。
from sympy import *
var('VB,VC,P,L,wL,x')
MBP=VB*x 
MPC=MBP -P*(x-L)
MCD=MPC         +VC*(x-3*L)-wL*(x-3*L)/L*(x-3*L)*Rational(1,2)
print("#",solve([Eq(MCD.subs({x:4*L}),0),
                 Eq(VB+VC-P-wL       ,0),
                 Eq(MPC.subs({x:2*L}),0)
                ],[VB,VC,P])[P]/wL)
# 1

ver 0.5 右自由体の左断面の断面位置での右側のモーメントつりあい。
 3元連立方程式です。2元連立方程式(RB,RC)と1元方程式(P)でも可。

# ver 0.5 右自由体の左断面の断面位置での右側のモーメントつりあい。
from sympy import *
var('VB,VC,P,L,wL,x')
MCD=                  -wL*(4*L-x)**2*Rational(1,2) 
MPC=        VC*(3*L-x)-wL*((4-Rational(1,2))*L-x)
MBP=P*(x-L)+VC*(3*L-x)-wL*((4-Rational(1,2))*L-x)
print("#",solve([Eq(MBP.subs({x:0})  ,0),
                 Eq(VB+VC-P-wL       ,0),
                 Eq(MPC.subs({x:2*L}),0)
                ],[VB,VC,P])[P]/wL)
# 1

ver 0.6 Piecewiseを作図に使いました。
・Piecewiseはの交点計算ができませんでした。

# ver 0.6 # Piecewiseは作図に使いました。# Piecewiseはの交点計算ができませんでした。
# ??? matplotlib 作図が3回でます。
from sympy import *
var('P,wL,L,VB,VC,x')
VB_Tanjunn=Rational(2,3)*P            # 集中荷重をかけた単純梁と同じ。外力に辺の比をかけたもの。
VC_Tanjunn=Rational(1,3)*P  
VA_Tobunpu=wL/6                       # 等分布荷重の片持ち梁と同じかたちですよね。
MBP_Tanjunn=-integrate(VB_Tanjunn,x)
MPC_Tanjunn=-integrate(VB_Tanjunn,(x,0,L))+integrate(VC_Tanjunn,x).subs({x:x-L})
MBC_Tobunpu= integrate(VA_Tobunpu,x)
y_Tanjunn=Piecewise((MBP_Tanjunn,(x>=0  )&(x<  L)),  
                    (MPC_Tanjunn,(x>=L  )&(x<3*L)),  
                    (0,True)
                   )
y_Tobunpu=Piecewise((MBC_Tobunpu,(x>=0  )&(x<3*L)),  
                    (0,True)
                   )
# print("#",solve(Eq((  y_Tanjunn+  y_Tobunpu).subs({x:2*L}),0),P)     ) # Piecewiseの交点計算が、できませんでした。
print  ("#",solve(Eq((MPC_Tanjunn+MBC_Tobunpu).subs({x:2*L}),0),P)[0]/wL)
# 1
# 作図 P=wLの条件以外、値はテキトウにしました。
rep={P:1,L:1,wL:1}
p=plot((y_Tanjunn.subs(rep),(x,0,3*L.subs(rep))),
       (y_Tobunpu.subs(rep),(x,0,3*L.subs(rep))),
       (y_Tanjunn.subs(rep)+y_Tobunpu.subs(rep),(x,0,3*L.subs(rep)))
       ,show=False)
p._backend.process_series()
backend = p._backend        # MatplotlibBackendのインスタンスを取得
ax = backend.ax             # MatplotlibのAxesオブジェクト
# ax.tick_params(left=False, bottom=False, labelleft=False, labelbottom=False)
ax.tick_params  (left=False, bottom=False, labelleft=False                   )
p.show()

・作図 等分布荷重の部分は勉強中。
・P=wLの条件以外、値はテキトウにしました。
・??? Piecewiseはの交点計算ができませんでした。
・??? matplotlib 作図が3回でます。
緑=橙+青

111.png

sympyで(Beamで)

・計算と作図を一つにできませんでした。分けました。
・作図を一つにできませんでした。分けました。

# ver 0.7 sympyのBeamで。
from sympy import *
from sympy.physics.continuum_mechanics.beam import Beam
var('E,I,VB,VC,P,w,L,a,b,x')
def myBeam_Tanjun_PwL_Keisan(E,I,P,w,L):
    b=Beam(4*L,E,I)
    b.apply_load   ( VB,0*L,-1)   
    b.apply_load   ( VC,3*L,-1) 
    b.apply_load   ( P ,1*L,-1) 
    b.apply_load   ( w ,3*L, 0,end=4*L)
    b.bc_deflection=[(0,0),(3*L,0)]
    b.solve_for_reaction_loads(VB,VC)
    return b.bending_moment().subs({x:2*L})
def myBeam_Tanjun_PwL_Sakuzu_draw(E,I,P,w,L):
    b=Beam(4*L,E,I)
    b.apply_support(0    ,'pin'   )
    b.apply_support(3*L  ,'roller')   
    b.apply_load   (P,L  ,-1) 
    b.apply_load   (w,3*L, 0,end=4*L)
    p = b.draw()  
    p.show() 
    return 
def myBeam_Tanjun_PwL_Sakuzu_bending_moment(E,I,P,w,L):
    b=Beam(4*L,E,I)
    b.apply_load    (P,L  , -1) 
    b.apply_load    (w,3*L,  0,end=4*L)
    b.apply_load    (VB,0*L,-1)   
    b.apply_load    (VC,3*L,-1) 
    b.bc_deflection=[(0,0),(3*L,0)]
    b.solve_for_reaction_loads(VB,VC)
    b.plot_bending_moment()
    b.plot_slope()
    b.plot_deflection()
    return 
# myMoment=myBeam_Tanjun_PwL_Keisan(E,I,P,w,L)               # だめでした。             
myMoment=myBeam_Tanjun_PwL_Keisan  (E,I,P,w,1)               # しょうがないです。
print("# ?",solve(Eq(myMoment,0),P)[0])             
# ? w
# 作図
# mySakuzu=myBeam_Tanjun_PwL_Sakuzu_draw        (E,I,P,w,L)  # だめでした。。          
mySakuzu=myBeam_Tanjun_PwL_Sakuzu_draw          (E,I,1,1,1)  # 作図を一つにできませんでした。               
mySakuzu=myBeam_Tanjun_PwL_Sakuzu_bending_moment(1,1,1,1,1)              

p = b.draw()
111.png

plot_shear_force(subs=None) を忘れていました。申し訳ありません。

b.plot_bending_moment()
222.png
b.plot_slope()
333.png
b.plot_deflection()
444.png

いつもの? sympyの実行環境と 参考のおすすめです。

(テンプレート)

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

ver 0.1

ver 0.2

・sympify

ver 0.3

ver 0.4 (私のいつも通りで)

>符号の決め方

ver 0.5

ver 0.6

class sympy.functions.elementary.piecewise.Piecewise(*_args)

ver 0.7 (Beamで)

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?