「(2015)平成27年一級建築士試験学科Ⅲ（建築構造）〔Ｎｏ．２〕」単純梁の等分布荷重で、左がローラー端で右が固定端をsympyのBeamでやってみた。 

・作図はアメリカ式です。

**Qiita_建築士**
https://qiita.com/mrrclb48z/items/893cb0967e4ddb2945f7

# オリジナル
**Youtube 建築士試験マニア/はまちゃん 様**
 ひとえだ、ひとえだ、4回に分けて解説してもらいました。ありがとうございました。
(1)一級建築士【構造105】構造力学H27／A点の鉛直反力（vol.0301）
(0:00~04:27)　https://youtu.be/WurnzJ4-HCA
(2)一級建築士【構造106】構造力学H27／B点の曲げモーメント（vol.0302）
(0:00~03:54) https://youtu.be/1uFRQLwewog
(3)一級建築士【構造107】構造力学H27／B点の曲げモーメント（vol.0303）
(0:00~03:42) https://youtu.be/BVN9Ci-o8vs
(4)一級建築士【構造108】構造力学H27／B点の曲げモーメント（vol.0304）
(0:00~05:33) https://youtu.be/w7OlrFjNCmw
＞落ち着いて。落ち着いて。指を中心に。

# ChatGPT先生へ
・最初から先生に聞けばよかった。
https://qiita.com/mrrclb48z/items/0b98a7ffe97faa027168


# いつもの? sympyのweb上での実行方法
SymPy Live Shellで。ver0.1とver0.3は実行確認済み。
・sympyのBeamは、エラーがでます。開発環境は、ページ後半です。
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で(オリジナル 様の方法で)
#### ver0.1
＞(左端に)鉛直反力のピンローラーが無かったら...
```python
# ver0.1
from sympy import *
var('w,L,EI,P,x')
RA=solve(Eq(w*L**4/(8*EI),x*L**3/(3*EI)),x)[0] ;print("# (1) ",RA)
MB=RA*L-(w*L)*L/2                              ;print("# (2) ",MB)
MC=RA*L/2-(w*L/2)*(L/4)-w*L**2/8               ;print("# (3)x",MC)
x =solve(Eq(RA-w*x,0),x)[0]                    ;print("# (4) ",x ) #RA/wでも
# (1)  3*L*w/8
# (2)  -L**2*w/8
# (3)x -L**2*w/16
# (4)  3*L/8
```
#### ver0.2
＞自作(右端に)固定壁が無かったら...
＞たわみ角です。
```python
# ver0.2
from sympy import *
var('w,L,MB,RA,RB,x,EI')
MB=solve(Eq( Rational(1,24)*w*L**3/EI,
            -Rational(1, 3)*MB*L  /EI),MB)[0]          ;print("# (2) ",MB)
RA=w*L-solve(Eq(RB*L-Rational(1,2)*w*L**2+MB,0),RB)[0] ;print("# (1) ",RA)
MC=RA*L/2-(w*L/2)*(L/4)-w*L**2/8                       ;print("# (3)x",MC)
x =solve(Eq(RA-w*x,0),x)[0]                            ;print("# (4) ",x ) #RA/wでも
# # (1)  3*L*w/8
# # (2)  -L**2*w/8
# # (3)x -L**2*w/16
# # (4)  3*L/8
```
# sympyで(いつもの方法で省略)
#### ver0.3
・(勉強中)
# sympyで(釣り合いで)
#### ver0.4
・いつもの方法がいいです。
・普通は？ΣX=とか、ΣY=とか、ΣM=で十分です。MABに、solveを使わなくてもです。
・5元連立方程式で。
```python
# ver0.4
from sympy import *
var('RA,RB,x,MAB,w,L,MB,θA,vA,EI')
MAB=solve(Eq(MAB+w*(L-x)*Rational(1,2)*(L-x)-RB*(L-x)+MB,0),MAB)[0]  # 普通は∑Mです。MBは固定端モーメントです。
θAB=1/EI*integrate(MAB,x)+θA
vAB=1/EI*integrate(θAB,x)+vA
sol=solve([Eq(vAB.subs({x:0}),0),Eq(MAB.subs({x:0}),0),
           Eq(vAB.subs({x:L}),0),Eq(θAB.subs({x:L}),0),
           Eq(-RA+w*L-RB,0)],[RA,RB,MB,θA,vA])                       # print("#",sol)                  
MAB=MAB.subs(sol)
print("# (1) ",sol[RA])
print("# (2) ",MAB.subs({x:L  }))
print("# (3)x",MAB.subs({x:L/2}))
print("# (4) ",solve(Eq(diff(MAB,x),0),x)[0])
# (1)  3*L*w/8
# (2)  -L**2*w/8
# (3)x L**2*w/16
# (4)  3*L/8
```
#### ver0.5
次と同じです。
https://qiita.com/mrrclb48z/items/ae55d11120841ebd8a34

・分布荷重wの微分方程式を直接解いてたわみ曲線を求めてからが、ラクかも。
・(4)diff(M,x)=0,最大曲げモーメント位置に同じ。?アタリマエ
???教えて下さい。固定端モーメントはどこへいきましたか。
```python
# ver0.5
from sympy import *
var('x,C1,C2,C3,C4,w,L,EI')
def myStr_Lw_wL(v):
    return str(v).replace("L*w","w*L")
def myStr_L2w_wL2(v):
    return str(v).replace("L**2*w","w*L**2")
Q=      integrate(-w,x)+w*L   *C1     
M=1/EI*(integrate( Q,x)+w*L**2*C2)    
θ=     (integrate( M,x)+w*L**3*C3)    
v=     (integrate( θ,x)+w*L**4*C4)    
sol =solve([Eq(M.subs({x:0}),0),            # 幾何的境界条件
            Eq(v.subs({x:0}),0),
            Eq(θ.subs({x:L}),0),
            Eq(v.subs({x:L}),0)
           ],[C1,C2,C3,C4])                 #;print(sol)
M,Q=M.subs(sol),Q.subs(sol)
print("# (1) ",myStr_Lw_wL  (Q.subs({x:0  })))                   
print("# (2) ",myStr_L2w_wL2(M.subs({x:L  })))                   
print("# (3)x",myStr_L2w_wL2(M.subs({x:L/2})))                   
print("# (4) ",solve(Eq(Q,0),x)[0]) 
#
# rep={w:1,L:1,EI:1}
# plot(Q.subs(rep),(x,0,1))
# plot(M.subs(rep),(x,0,1),ylim=(-0.1,0.1))
# (1)  3*w*L/8
# (2)  -w*L**2/(8*EI)
# (3)x w*L**2/(16*EI)
# (4)  3*L/8
```
・SFD(matplotlib)
![222.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/8cbe16c9-de09-4250-917c-5eb741868232.png)
・BMD(matplotlib)
![111.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/cc6544d7-4eef-4481-adad-d1ffc76c5d5a.png)
# sympyのBeamで
#### ver0.6
・値はテキトー。BMDは?省略です。いい値を教えて下さい。
・荷重図?矢印を消したらダメかもしれません。
```python
# ver0.6
from sympy import *
from sympy.physics.continuum_mechanics.beam import Beam
from sympy import symbols
E , I      =symbols('E , I ')
var('R1,R2,x')
def extract_elements_with_symbol(data_list):
  """
  リストの要素のうち、最初の要素がsympyのSymbolである要素を抽出する関数。

  Args:
    data_list: 要素がタプルのリスト。

  Returns:
    最初の要素がsympyのSymbolである要素のリスト。
  """
  result = []
  for item in data_list:
    if isinstance(item[0], Symbol):
      result.append(item)
  return result
def myRemoveDrawShow(b):
  for item in extract_elements_with_symbol(b.applied_loads):
      b.remove_load(item[0], item[1],item[2])
  p = b.draw()  
  p.show() 
  return
# #######################################
w,L=1,1
M2 =5/8*w*L**2*1000
b = Beam(L, E, I)
b.apply_load   (R1, 0,-1)
b.apply_load   (w , 0, 0,L)
b.apply_load   (R2, L,-1)
b.apply_load   (M2, L,-2)
b.solve_for_reaction_loads(R1, R2)
# # #######################################
b.plot_shear_force()
# b.plot_bending_moment()
b.apply_support (0,"roller")
b.apply_support (L,"fixed" )
myRemoveDrawShow(b)
# p = b.draw()  
# p.show() 
```
・数字を消す方法がわかりません。記号を追加する方法も。
![111.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/72dd211d-4728-4384-9ba2-904f1af28b1c.png)
・BMD省略
・荷重図?
![222.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/7a1affdd-71f5-489e-9778-511f73791478.png)
・(再)矢印を消したらダメかもしれません。
![333.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/8ab96715-dc72-4e8e-8422-dd1bfa7d3d4a.png)

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

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

#### sympyのdoc

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

#### 公式ホームページ
・古い問題文なので、ありません。検索中。

#### ver0.2