「(2024)令和6年二級建築士試験学科Ⅲ（建築構造）〔Ｎｏ．３〕」単純梁に2つの集中荷重をsympyのBeamでやってみた。

・（2025-03-19)ver0.6(最新）自作def myRemoveDrawShow(b):で対応しました。

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

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

# オリジナル
・Youtube 検索中
# sympyで(オリジナル 様の方法を参考に)
#### ver0.1
・たぶん
```python
# ver0.1
print("#",(105-75)/6)
# 5.0
```
・おすすめです。
　[＞憶えておくと便利な関係式として，..](https://qiita.com/mrrclb48z/items/09b7cc73f0a22bf651b8#4-%E6%8A%9C%E7%B2%8B-%E6%86%B6%E3%81%88%E3%81%A6%E3%81%8A%E3%81%8F%E3%81%A8%E4%BE%BF%E5%88%A9%E3%81%AA%E9%96%A2%E4%BF%82%E5%BC%8F%E3%81%A8%E3%81%97%E3%81%A6)
　私は、イヤでも憶えてしまいました。
# sympyで(いつもの方法で省略)
#### ver0.2
# sympyで(釣り合いで)
#### ver0.3
```python
# # R6 2024 2k-3
# ver0.2
from sympy import *
var('RA,RB,x')
var('a,b,c,PC,PD,P')
MAC  =-PC*(a-x)-PD*(a+b-x)+RB*(a+b+c-x)
MCD  =         -PD*(a+b-x)+RB*(a+b+c-x)
MDB  =                    +RB*(a+b+c-x)
R_rep=solve([Eq(MAC.subs({x:0}),0),Eq(RA-PC-PD+RB,0)],[RA,RB])  #;print("#",R_rep)
rep  ={a:3,b:6,c:3,PC:P,PD:2*P}
P_sol=solve(Eq(MAC.subs(R_rep).subs(rep).subs({x:3}),75),P)[0]  #;print("#",P_sol)
MCD=MCD.subs(R_rep).subs(rep).subs({P:P_sol})                   #;print("#",MCD)
FCD=diff(MCD,x)                                                 ;print("#",FCD)
# 5
```

# sympyのBeamで
#### ver0.5
・(旧）です。なにもそこまでやらなくても
```python
from sympy import *
from sympy.physics.continuum_mechanics.beam import Beam
from sympy import symbols, Piecewise
E , I      =symbols('E , I ')
RA, RB     =symbols('RA, RB')
x          =symbols('x')
P1,P2,a,b,c=20,40,3,6,3
L,ab       =a+b+c,a+b
b = Beam(L, E, I)
b.apply_load   (P1,a ,-1)
b.apply_load   (P2,ab,-1)
# ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
b.apply_load   (RA, 0,-1)
b.apply_load   (RB, L,-1)
# ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
b.solve_for_reaction_loads(RA, RB)
b.plot_shear_force()
b.plot_bending_moment()
print("#",b.shear_force().subs({x:6}))
# ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
b.remove_load   (RA, 0,-1   )
b.remove_load   (RB, L,-1   )
# ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
b.apply_support ( 0,"pin"   )
b.apply_support ( L,"roller")
p = b.draw()  
p.show() 
# 5
```
#### ver0.6
・(最新）自作def myRemoveDrawShow(b):で対応しました。
```python
from sympy.physics.continuum_mechanics.beam import Beam
from sympy import symbols
E , I      =symbols('E , I ')
RA, RB     =symbols('RA, RB')
x          =symbols('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
# #######################################
P1,P2,a,b,c=20,40,3,6,3
L,ab       =a+b+c,a+b
b = Beam(L, E, I)
b.apply_load   (P1,a ,-1)
b.apply_load   (P2,ab,-1)
b.apply_load   (RA, 0,-1)
b.apply_load   (RB, L,-1)
b.solve_for_reaction_loads(RA, RB)
b.plot_shear_force()
b.plot_bending_moment()
print("#",b.shear_force().subs({x:6}))
# #######################################
b.apply_support ( 0,"pin"   )
b.apply_support ( L,"roller")
myRemoveDrawShow(b)
# 5
```

![111.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/9ce93eb8-e256-444c-aea0-5dbbab7a52ff.png)

![222.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/4c84b3d2-8400-47ac-a009-834f10c0f49f.png)

![333.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/5bdce417-712b-4663-82a2-8d57cc7e56e1.png)

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

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

#### sympyのdoc

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