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

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

**パイソニスタの方へ**
(省略) 前半問題と同じ

:::note info
[前半問題へ](https://qiita.com/mrrclb48z/items/a1bf2384ccf2dc5c8939)
:::

# オリジナル
でめまる構造 様 (0:00〜16:32)
＞後半問題 (10:07〜16:32)　**比を求めよ。**
https://youtu.be/0o7XS0_0zK4?t=607


# web上の実行方法(SymPy Live Shellで)
(省略) 前半問題で

# sympyで(オリジナル 様の方法で)
・**ver 0.1** ＞③を①へ代入...。　10:0
```python
# ver 0.1 ＞③を①へ代入...。　10:05
from sympy import *
var('PB,PC,L,VA,VD')
sgm_Y_maru1 =VA-PB+VD-PC                                                  ;print("# ①",sgm_Y_maru1 ) 
sgm_MA_maru2=PB*L-VD*2*L+PC*3*L                                           ;print("# ②",sgm_MA_maru2)
VD_sol_maru3=solve(Eq(sgm_MA_maru2,0),VD)[0]                              ;print("# ③",VD_sol_maru3)
print("#",solve(Eq(sgm_Y_maru1.subs({VA:0,VD:VD_sol_maru3}),0),PB)[0]/PC)
# ① -PB - PC + VA + VD
# ② L*PB + 3*L*PC - 2*L*VD
# ③ PB/2 + 3*PC/2
# 1
```

・**ver 0.2**　別解　14:20 
```python
# ver 0.2 別解　14:20
from sympy import *
var('PB,PC,L')
print("#",solve(Eq(-PB*L,-PC*L),PC)[0]/PB )  
# 1
```
・**ver 0.3**　(省略)一瞬で解く方法

# sympyで(私のいつも通りで)
**・ver 0.4** 左自由体の右断面の断面位置での左側のモーメントつりあい。
・3元連立方程式です。2元連立方程式(RB,RC)と1元方程式(P)でも可。
```python
# ver 0.4 左自由体の右断面の断面位置での左側のモーメントつりあい。
from sympy import *
var('PB,PC,L,VA,VD,x')
MAB=VA*x 
MBD=MAB -PB*(x-L)
MDC=MBD          +VD*(x-2*L)
eqV=Eq(VA-PB+VD-PC,0)
print("#",solve([Eq(MDC.subs({x:3*L}),0),eqV,Eq(VA,0)],[VA,VD,PC])[PC]/PB) 
# 1
```
**・ver 0.5** 右自由体の左断面の断面位置での右側のモーメントつりあい。
・3元連立方程式です。2元連立方程式(RB,RC)と1元方程式(P)でも可。
```python
# ver 0.5 右自由体の左断面の断面位置での右側のモーメントつりあい。
from sympy import *
var('PB,PC,L,VA,VD,x')
MDC=                      -PC*(3*L-x) 
MBD=            VD*(2*L-x)+MDC       
MAB=-PB*(1*L-x)+MBD                  
eqV=Eq(VA-PB+VD-PC,0)
print("#",solve([Eq(MAB.subs({x:0}),0),eqV,Eq(VA,0)],[VA,VD,PC])[PC]/PB) 
# 1
```
**・ver 0.6 Piecewiseはあきらめました。** 
```python
# ver 0.6 Piecewiseはあきらめました。
from sympy import *
var('PB,PC,L,VA,VD,x')
MAB=VA*x 
MBD=MAB -PB*(x-L)
MDC=MBD          +VD*(x-2*L)
eqV=Eq(VA-PB+VD-PC,0)
M_y=Piecewise((MAB,(x>=0*L)&(x< 1*L)), 
              (MBD,(x>=1*L)&(x< 2*L)),  
              (MDC,(x>=2*L)&(x<=3*L)),  
              (0,True)
             )
print("#",solve([Eq(M_y.subs({x:0}),0),eqV,Eq(VA,0)],[VA,VD,PC])) 
# ver 0.6 Piecewiseはあきらめました。
```

# sympyで(Beamで)
**・ver 0.7** sympyのBeamで作図だけです。
　あきらめました。solve_for_reaction_loads が終了しません。。
```python
# ver 0.7 sympyのBeamで作図だけです。
# あきらめました。solve_for_reaction_loads が終了しません。。
from sympy import *
from sympy.physics.continuum_mechanics.beam import Beam
var('E,I,VA,VD,PB,PC,L,x')
# def myBeam_Tanjun_PBPC_Keisan(E,I,VA,VD,PB,PC,L):
#     b=Beam(3*L,E,I)
#     b.apply_load   (VA,0*L,-1)   
#     b.apply_load   (PB,1*L,-1) 
#     b.apply_load   (VD,2*L,-1) 
#     b.apply_load   (PC,3*L,-1) 
#     b.bc_deflection=[(0*L,0),(2*L,0)]
#     print("1")
#     b.solve_for_reaction_loads(VA,VD)
#     print(b.solve_for_reaction_loads(VA,VD))
#     return b.bending_moment().subs({x:0*L})
def myBeam_Tanjun_PBPC_Sakuzu_draw(E,I,VA,VD,PB,PC,L):
    b=Beam(3*L,E,I)
    b.apply_support(0*L,'pin'   )
    b.apply_support(2*L,'roller')   
    b.apply_load   (PB ,1*L  ,-1) 
    b.apply_load   (PC ,3*L  ,-1) 
    p = b.draw()  
    p.show() 
    return 
# def myBeam_Tanjun_PBPC_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  ,-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_PBPC_Keisan(E,I,VA,VD,PB,PC,L)             # だめでした。             
# myMoment=myBeam_Tanjun_PBPC_Keisan  (E,I,VA,VD,PB,PC,L)           # しょうがないです。
# print("# ?",solve(Eq(myMoment,0),P)[0])             
# # 作図
# # mySakuzu=myBeam_Tanjun_P_wL_Sakuzu_draw        (E,I,P,w,L)      # だめでした。。          
mySakuzu=myBeam_Tanjun_PBPC_Sakuzu_draw            (E,I,1,1,1,1,1)  # 一つにできませんでした。               
# mySakuzu=myBeam_Tanjun_PBPC_Sakuzu_bending_moment(1,1,1,1,1)              
```
p = b.draw()
![111.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/849ab2f2-be96-f4bd-73cf-561cc2cf30d8.png)

# いつもの? sympyの実行環境と 参考のおすすめです。
[(テンプレート)](https://qiita.com/mrrclb48z/items/00dd08b0317069be9342)

# いつもと違うおすすめです。
(省略) 前半問題と同じ