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

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

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

:::note info
[後半問題へ](https://qiita.com/mrrclb48z/items/089517e4b3133e768d69)
:::

# オリジナル
でめまる構造 様 (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
　２つの式をイコールで結ぶ。私には難しいです。。
```python
# 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
```python
# 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
```python
# 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)でも可。
```python
# 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)でも可。
```python
# 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はの交点計算ができませんでした。
```python
# 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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/5eecdbd9-b325-fa74-9c9c-31b2fecdc964.png)

# sympyで(Beamで)
・計算と作図を一つにできませんでした。分けました。
・作図を一つにできませんでした。分けました。
```python
# 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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/ab2f65d1-2dd5-56db-bcd4-371c38bcaee8.png)

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

b.plot_bending_moment()
![222.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/6bbcc989-9fb1-94a4-d59c-47ba8f26df04.png)
b.plot_slope()
![333.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/ebe3ca77-b145-dbf1-8345-565e7a784bf8.png)
b.plot_deflection()
![444.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/c74676cd-d60b-7266-b105-cb39941a0fef.png)

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

# いつもと違うおすすめです。
#### ver 0.1

https://docs.sympy.org/latest/modules/solvers/solvers.html

#### ver 0.2
・sympify

https://docs.sympy.org/latest/modules/core.html

#### ver 0.3

https://qiita.com/mrrclb48z/items/122750479eb60936a78c

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

https://qiita.com/mrrclb48z/items/c3274daf5f7a99cfe027

＞符号の決め方

https://qiita.com/mrrclb48z/items/09b7cc73f0a22bf651b8

#### ver 0.5

https://qiita.com/mrrclb48z/items/4759b4be4f5fd337b7ad

#### ver 0.6
class sympy.functions.elementary.piecewise.Piecewise(*_args)

https://docs.sympy.org/latest/modules/functions/elementary.html#piecewise

#### ver 0.7 (Beamで)

https://docs.sympy.org/latest/modules/physics/continuum_mechanics/beam.html

https://docs.sympy.org/latest/modules/physics/continuum_mechanics/beam_problems.html