構造物の設計では、梁(はり)の各断面に作用するせん断力と曲げモーメントを知ることが不可欠です。これらを図示したものがせん断力図(SFD: Shear Force Diagram) と曲げモーメント図(BMD: Bending Moment Diagram) であり、材料力学の最も重要なスキルの一つです。
本記事では、荷重・せん断力・曲げモーメントの微分関係を導出し、代表的な梁の例で SFD・BMD を描く手順を解説します。
本記事の内容
- せん断力と曲げモーメントの定義
- 荷重・せん断力・曲げモーメントの微分関係
- 片持ち梁の SFD・BMD
- 単純支持梁の SFD・BMD
- Pythonでの自動描画
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
せん断力と曲げモーメントの定義
梁の任意の断面 $x$ で仮想的に切断すると、切断面には内力が作用しています。
- せん断力 $V(x)$: 断面に平行な方向の内力
- 曲げモーメント $M(x)$: 断面の回転に対する内力モーメント
符号の規約(一般的な慣習):
- $V > 0$: 左側部分を上向きに、右側部分を下向きに作用させるせん断力
- $M > 0$: 梁を下に凸(sagging)に曲げるモーメント
荷重・せん断力・曲げモーメントの微分関係
導出
微小要素 $dx$ に対して力のつり合いとモーメントのつり合いを考えます。分布荷重を $w(x)$(下向き正)とします。
鉛直方向のつり合い:
$$ V(x) – w(x)dx – V(x + dx) = 0 $$
$$ V(x) – V(x+dx) = w(x)dx $$
$$ \boxed{\frac{dV}{dx} = -w(x)} $$
モーメントのつり合い(左端まわり):
$$ M(x+dx) – M(x) – V(x)dx + w(x)dx \cdot \frac{dx}{2} = 0 $$
$dx$ の2次の微小量を無視すると:
$$ \boxed{\frac{dM}{dx} = V(x)} $$
関係のまとめ
この2つの式を組み合わせると:
$$ w(x) \xrightarrow{\text{積分}} V(x) \xrightarrow{\text{積分}} M(x) $$
$$ V(x) = -\int w(x) \, dx + C_1 $$
$$ M(x) = \int V(x) \, dx + C_2 $$
さらに:
$$ \frac{d^2 M}{dx^2} = -w(x) $$
重要な関係
| 荷重 $w(x)$ | $V(x)$ | $M(x)$ |
|---|---|---|
| なし ($w=0$) | 定数 | 1次関数(直線) |
| 等分布 ($w=$ const) | 1次関数(直線) | 2次関数(放物線) |
| 三角分布 ($w=ax$) | 2次関数 | 3次関数 |
例1: 片持ち梁 — 先端集中荷重
長さ $L$ の片持ち梁の自由端に下向き荷重 $P$ が作用する場合。
反力(固定端 $x=0$):
$$ R_A = P, \quad M_A = -PL $$
せん断力($0 \leq x \leq L$):
自由端から切断して考えると:
$$ V(x) = P \quad (\text{一定}) $$
曲げモーメント:
$$ M(x) = P(x – L) = Px – PL $$
固定端: $M(0) = -PL$、自由端: $M(L) = 0$。
例2: 単純支持梁 — 等分布荷重
長さ $L$ の単純支持梁に等分布荷重 $w$ [N/m] が作用する場合。
反力(対称性から):
$$ R_A = R_B = \frac{wL}{2} $$
せん断力:
$$ V(x) = R_A – wx = \frac{wL}{2} – wx $$
$V(x) = 0$ となる位置は $x = L/2$ です。
曲げモーメント:
$$ M(x) = R_A x – \frac{wx^2}{2} = \frac{wLx}{2} – \frac{wx^2}{2} = \frac{w}{2}x(L – x) $$
最大曲げモーメントは $x = L/2$ で:
$$ \boxed{M_{\max} = \frac{wL^2}{8}} $$
例3: 単純支持梁 — 中央集中荷重
中央に集中荷重 $P$ が作用する単純支持梁:
反力: $R_A = R_B = P/2$
せん断力:
$$ V(x) = \begin{cases} P/2 & (0 \leq x < L/2) \\ -P/2 & (L/2 < x \leq L) \end{cases} $$
曲げモーメント:
$$ M(x) = \begin{cases} \frac{Px}{2} & (0 \leq x \leq L/2) \\ \frac{P(L-x)}{2} & (L/2 \leq x \leq L) \end{cases} $$
最大曲げモーメントは $x = L/2$ で:
$$ \boxed{M_{\max} = \frac{PL}{4}} $$
Pythonでの実装
import numpy as np
import matplotlib.pyplot as plt
def plot_beam_diagrams(x, V, M, title, ax_v, ax_m):
"""SFDとBMDを描画する共通関数"""
ax_v.fill_between(x, V, alpha=0.3, color='blue')
ax_v.plot(x, V, 'b-', linewidth=2)
ax_v.axhline(0, color='k', linewidth=0.5)
ax_v.set_ylabel('V [kN]')
ax_v.set_title(f'{title} - SFD')
ax_v.grid(True, alpha=0.3)
ax_m.fill_between(x, M, alpha=0.3, color='red')
ax_m.plot(x, M, 'r-', linewidth=2)
ax_m.axhline(0, color='k', linewidth=0.5)
ax_m.set_xlabel('x [m]')
ax_m.set_ylabel('M [kN$\\cdot$m]')
ax_m.set_title(f'{title} - BMD')
ax_m.grid(True, alpha=0.3)
fig, axes = plt.subplots(3, 2, figsize=(14, 12))
L = 4.0 # 梁の長さ [m]
n = 500
x = np.linspace(0, L, n)
# (1) 片持ち梁 — 先端集中荷重
P1 = 10.0 # [kN]
V1 = np.full_like(x, P1)
M1 = P1 * (x - L)
plot_beam_diagrams(x, V1, M1,
f'Cantilever, Point Load P={P1:.0f} kN',
axes[0, 0], axes[0, 1])
# (2) 単純支持梁 — 等分布荷重
w2 = 5.0 # [kN/m]
R_A2 = w2 * L / 2
V2 = R_A2 - w2 * x
M2 = R_A2 * x - w2 * x**2 / 2
plot_beam_diagrams(x, V2, M2,
f'Simply Supported, UDL w={w2:.0f} kN/m',
axes[1, 0], axes[1, 1])
# 最大曲げモーメントの注釈
M2_max = w2 * L**2 / 8
axes[1, 1].annotate(f'$M_{{max}} = wL^2/8 = {M2_max:.1f}$ kN$\\cdot$m',
xy=(L/2, M2_max), xytext=(L/2 + 0.5, M2_max - 1),
fontsize=10, arrowprops=dict(arrowstyle='->', color='red'))
# (3) 単純支持梁 — 中央集中荷重
P3 = 20.0 # [kN]
R_A3 = P3 / 2
V3 = np.where(x < L/2, P3/2, -P3/2)
M3 = np.where(x <= L/2, P3*x/2, P3*(L-x)/2)
plot_beam_diagrams(x, V3, M3,
f'Simply Supported, Point Load P={P3:.0f} kN',
axes[2, 0], axes[2, 1])
M3_max = P3 * L / 4
axes[2, 1].annotate(f'$M_{{max}} = PL/4 = {M3_max:.1f}$ kN$\\cdot$m',
xy=(L/2, M3_max), xytext=(L/2 + 0.5, M3_max - 2),
fontsize=10, arrowprops=dict(arrowstyle='->', color='red'))
plt.tight_layout()
plt.savefig('sfd_bmd_beam.png', dpi=150, bbox_inches='tight')
plt.show()
まとめ
本記事では、内力図(SFD・BMD)の描き方を解説しました。
- せん断力 $V(x)$ と 曲げモーメント $M(x)$ は梁の内力を表す
- 微分関係: $dV/dx = -w(x)$, $dM/dx = V(x)$
- 荷重を積分するとせん断力、せん断力を積分すると曲げモーメントが得られる
- 片持ち梁の先端荷重: $M_{\max} = PL$(固定端)
- 単純支持梁の等分布荷重: $M_{\max} = wL^2/8$(中央)
- 単純支持梁の中央集中荷重: $M_{\max} = PL/4$(中央)
次のステップとして、以下の記事も参考にしてください。