「(2016)平成28年二級建築士試験学科Ⅲ（建築構造）〔Ｎｏ．３〕」単純梁に一部等分布荷重と集中荷重をsympyのBeamでやってみた。

・SFD,BMDはアメリカ式です。ドイツ式ではありません。

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

#### 公式ホームページ
**・問題〔Ｎｏ．３〕PDF**
(2016)平成28年二級試験問題〔Ｎｏ．３〕と正答肢
https://www.jaeic.or.jp/shiken/2k/2k-mondai.files/2k-2016-1st-gakka3_4.pdf#page=4
https://www.jaeic.or.jp/shiken/2k/2k-mondai.files/2k-2016-1st-gokakukijun.pdf

# オリジナル
・Youtube 検索中
# sympyで(オリジナル 様の方法を参考に)
#### ver0.1
(勉強中)
# sympyで(いつもの方法で)
#### ver0.2
(勉強中)
# sympyで(釣り合いで)
#### ver0.3
```python
from sympy import *
var('R1,R2,x')
var('M1A,MAB,MB2')
var('w,P,a,b,c'); w,P,a,b,c=2,2,4,2,2
L=a+b+c 
M1A=solve(Eq(M1A+w*(a-x)*Rational(1,2)*(a-x)+P*(a+b-x)-R2*(L-x),0),M1A)[0]   #;print(M1A) # 普通は∑M
MAB=solve(Eq(MAB                            +P*(a+b-x)-R2*(L-x),0),MAB)[0]   #;print(MAB)  
MB2=solve(Eq(MB2                                      -R2*(L-x),0),MB2)[0]   #;print(MB2)
sol=solve([Eq(M1A.subs({x:0}),0),Eq(-R1+w*a+P-R2,0)],[R1,R2])                #;print(sol)
print("#",           M1A   .subs(sol).subs({x:a}))                                       
print("#",float(diff(MAB,x).subs(sol).subs({x:5})))                                       
# 10
# -1.5
```
#### ver0.4
・もっとsympyらしく? ver0.3と同じ。最後にsubs。
　sympyのBeamでは、シンボリックでこうはいかない。数値です。残念。
```python
from sympy import *
var('R1,R2,x')
var('M1A,MAB,MB2')
var('w,P,a,b,c'); # w,P,a,b,c=2,2,4,2,2
L=a+b+c 
M1A=solve(Eq(M1A+w*(a-x)*Rational(1,2)*(a-x)+P*(a+b-x)-R2*(L-x),0),M1A)[0]   #;print(M1A) # 普通は∑M
MAB=solve(Eq(MAB                            +P*(a+b-x)-R2*(L-x),0),MAB)[0]   #;print(MAB)  
MB2=solve(Eq(MB2                                      -R2*(L-x),0),MB2)[0]   #;print(MB2)
sol=solve([Eq(M1A.subs({x:0}),0),Eq(-R1+w*a+P-R2,0)],[R1,R2])                #;print(sol)
print("#",     M1A   .subs(sol).subs({x:a}))                                       
print("#",diff(MAB,x).subs(sol).subs({x:a+Rational(1,2)*b}))                                       
# 
rep={w:2,P:2,a:4,b:2,c:2}
print("#",     M1A   .subs(sol).subs({x:a})                .subs(rep))                                       
print("#",float(diff(MAB,x).subs(sol).subs({x:a+Rational(1,2)*b}).subs(rep)))                                       
# -P*b + b*(2*P*a + 2*P*b + a**2*w)/(2*a + 2*b + 2*c) + c*(2*P*a + 2*P*b + a**2*w)/(2*a + 2*b + 2*c)
# P - (2*P*a + 2*P*b + a**2*w)/(2*a + 2*b + 2*c)
# 10
# -1
```

# sympyのBeamで
#### ver0.5
```python
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,P,a,b,c=2,2,4,2,2
L,ab     =a+b+c,a+b
b = Beam(L, E, I)
b.apply_load   (R1, 0,-1)
b.apply_load   (w , 0, 0,a)
b.apply_load   (P ,ab,-1)
b.apply_load   (R2, L,-1)
b.solve_for_reaction_loads(R1, R2)
print("#",      b.bending_moment().subs({x:a}) )
print("#",float(b.shear_force()   .subs({x:5})))
# #######################################
b.plot_shear_force()
b.plot_bending_moment()
b.apply_support ( 0,"pin"   )
b.apply_support ( L,"roller")
myRemoveDrawShow(b)
# 10
# -1.5
```
![111.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/4b911ef8-15a1-4a03-85d3-db96e4754226.png)

![222.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/9f513e1e-2cf0-4642-a1d7-6be17a435d50.png)

![333.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/562b2cc7-bc74-4967-96de-5b9b76615dd1.png)

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

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

#### sympyのdoc

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