はりの境界条件と典型的な解

梁のたわみを弾性曲線方程式 $EIy” = M(x)$ から求めるとき、積分定数を決定するための境界条件の設定が解の鍵です。支持条件が変わるだけで、同じ荷重でもたわみは大きく異なります。

本記事では、代表的な梁の支持条件ごとに境界条件を整理し、主要な荷重ケースに対するたわみの公式をまとめます。

本記事の内容

  • 各支持条件の境界条件
  • 片持ち梁の代表的な解
  • 単純支持梁の代表的な解
  • 両端固定梁の代表的な解
  • 連続梁の概要
  • Pythonでの比較可視化

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。

支持条件と境界条件

固定端(Clamped / Fixed)

壁に埋め込まれた端部。たわみもたわみ角もゼロ。

$$ y = 0, \quad y’ = 0 $$

ピン支持(Pinned / Hinged)

回転は自由だが、上下変位は拘束。

$$ y = 0, \quad M = 0 \quad (EIy” = 0) $$

ローラー支持(Roller)

ピン支持と同様に鉛直変位は拘束されますが、水平方向は自由です。境界条件はピン支持と同じ:

$$ y = 0, \quad M = 0 $$

自由端(Free)

力もモーメントも作用しない端部。

$$ M = 0 \quad (EIy” = 0), \quad V = 0 \quad (EIy”’ = 0) $$

まとめ表

支持条件 条件1 条件2
固定端 $y = 0$ $y’ = 0$
ピン/ローラー $y = 0$ $y” = 0$
自由端 $y” = 0$ $y”’ = 0$

片持ち梁の公式集

固定端を $x = 0$、自由端を $x = L$ とします。

先端集中荷重 $P$

$$ y(x) = \frac{P}{6EI}(x^3 – 3Lx^2) $$

$$ \delta_{\max} = \frac{PL^3}{3EI}, \quad \theta_{\max} = \frac{PL^2}{2EI} $$

$$ M_{\max} = PL \quad (\text{固定端}) $$

等分布荷重 $w$

$$ y(x) = \frac{w}{24EI}(x^4 – 4Lx^3 + 6L^2 x^2) $$

$$ \delta_{\max} = \frac{wL^4}{8EI}, \quad \theta_{\max} = \frac{wL^3}{6EI} $$

$$ M_{\max} = \frac{wL^2}{2} \quad (\text{固定端}) $$

先端モーメント $M_0$

$$ y(x) = \frac{M_0 x^2}{2EI} $$

$$ \delta_{\max} = \frac{M_0 L^2}{2EI}, \quad \theta_{\max} = \frac{M_0 L}{EI} $$

単純支持梁の公式集

等分布荷重 $w$

$$ y(x) = \frac{wx}{24EI}(x^3 – 2Lx^2 + L^3) $$

$$ \delta_{\max} = \frac{5wL^4}{384EI} \quad (x = L/2) $$

$$ M_{\max} = \frac{wL^2}{8} \quad (x = L/2) $$

中央集中荷重 $P$

$$ y(x) = \begin{cases} \frac{P}{48EI}(3L^2 x – 4x^3) & (0 \leq x \leq L/2) \\[4pt] \frac{P}{48EI}[3L^2(L-x) – 4(L-x)^3] & (L/2 \leq x \leq L) \end{cases} $$

$$ \delta_{\max} = \frac{PL^3}{48EI} \quad (x = L/2) $$

$$ M_{\max} = \frac{PL}{4} \quad (x = L/2) $$

任意の位置 $a$ に集中荷重 $P$($a < L$)

荷重位置を $x = a$、$b = L – a$ とすると:

$$ \delta(x = a) = \frac{Pa^2 b^2}{3EIL} $$

最大たわみの位置: $x = \sqrt{(L^2 – b^2)/3}$

両端固定梁の公式集

両端固定梁は不静定梁であり、反力の決定に適合条件が必要です。

等分布荷重 $w$

$$ y(x) = \frac{w}{24EI}(x^2 – Lx)^2 = \frac{wx^2}{24EI}(L-x)^2 $$

$$ \delta_{\max} = \frac{wL^4}{384EI} \quad (x = L/2) $$

$$ M_{\text{端}} = -\frac{wL^2}{12}, \quad M_{\text{中央}} = \frac{wL^2}{24} $$

単純支持梁と比較すると、最大たわみは $\frac{1}{5}$ に、最大モーメントは固定端で $\frac{2}{3}$ 倍(中央では $\frac{1}{3}$ 倍)になります。固定端は構造的に有利です。

中央集中荷重 $P$

$$ \delta_{\max} = \frac{PL^3}{192EI} \quad (x = L/2) $$

$$ M_{\text{端}} = -\frac{PL}{8}, \quad M_{\text{中央}} = \frac{PL}{8} $$

各支持条件の比較

等分布荷重 $w$ に対する最大たわみの比較:

支持条件 $\delta_{\max}$ 比率
片持ち梁 $\frac{wL^4}{8EI}$ 1.000
単純支持梁 $\frac{5wL^4}{384EI}$ 0.104
両端固定梁 $\frac{wL^4}{384EI}$ 0.021

片持ち梁に比べ、両端固定梁のたわみは約 $1/48$ と格段に小さくなります。

連続梁の概要

連続梁は3つ以上の支点を持つ不静定梁です。各スパンの曲げモーメントの関係は3モーメントの定理(クラペイロンの定理) で記述されます。

3つの隣接する支点 $i-1, i, i+1$ のモーメント $M_{i-1}, M_i, M_{i+1}$ と各スパン長 $L_1, L_2$ の関係:

$$ M_{i-1}L_1 + 2M_i(L_1 + L_2) + M_{i+1}L_2 = -\frac{w_1 L_1^3}{4} – \frac{w_2 L_2^3}{4} $$

これを全支点について立式し、連立方程式を解きます。

Pythonでの実装

import numpy as np
import matplotlib.pyplot as plt

L = 4.0     # 梁の長さ [m]
E = 200e9   # ヤング率 [Pa]
b = 0.1     # 断面幅 [m]
h = 0.2     # 断面高さ [m]
I = b * h**3 / 12
EI = E * I
w = 10e3    # 等分布荷重 [N/m]
P = 20e3    # 集中荷重 [N]

n = 500
x = np.linspace(0, L, n)

fig, axes = plt.subplots(2, 2, figsize=(14, 10))

# (1) 等分布荷重: 3つの支持条件を比較
y_cant = w / (24*EI) * (x**4 - 4*L*x**3 + 6*L**2*x**2)
y_ss = w*x / (24*EI) * (x**3 - 2*L*x**2 + L**3)
y_fixed = w*x**2 / (24*EI) * (L - x)**2

axes[0, 0].plot(x, y_cant*1e3, 'b-', linewidth=2, label='Cantilever')
axes[0, 0].plot(x, y_ss*1e3, 'r-', linewidth=2, label='Simply Supported')
axes[0, 0].plot(x, y_fixed*1e3, 'g-', linewidth=2, label='Fixed-Fixed')
axes[0, 0].set_xlabel('x [m]')
axes[0, 0].set_ylabel('Deflection [mm]')
axes[0, 0].set_title(f'UDL w={w/1e3:.0f} kN/m: Support Comparison')
axes[0, 0].legend()
axes[0, 0].grid(True, alpha=0.3)

# (2) 集中荷重: 3つの支持条件を比較
y_cant_P = P / (6*EI) * (x**3 - 3*L*x**2)

y_ss_P = np.where(x <= L/2,
    P / (48*EI) * (3*L**2*x - 4*x**3),
    P / (48*EI) * (3*L**2*(L-x) - 4*(L-x)**3))

# 両端固定・中央集中荷重
y_fixed_P = np.where(x <= L/2,
    P*x**2 / (48*EI) * (3*L - 4*x),
    P*(L-x)**2 / (48*EI) * (3*L - 4*(L-x)))

axes[0, 1].plot(x, y_cant_P*1e3, 'b-', linewidth=2, label='Cantilever')
axes[0, 1].plot(x, y_ss_P*1e3, 'r-', linewidth=2, label='Simply Supported')
axes[0, 1].plot(x, y_fixed_P*1e3, 'g-', linewidth=2, label='Fixed-Fixed')
axes[0, 1].set_xlabel('x [m]')
axes[0, 1].set_ylabel('Deflection [mm]')
axes[0, 1].set_title(f'Point Load P={P/1e3:.0f} kN at Center')
axes[0, 1].legend()
axes[0, 1].grid(True, alpha=0.3)

# (3) 等分布荷重のBMD比較
M_cant = -w*(L-x)**2 / 2
M_ss = w*x*(L-x) / 2
M_fixed_bmd = w/12 * (6*L*x - 6*x**2 - L**2)

axes[1, 0].plot(x, M_cant/1e3, 'b-', linewidth=2, label='Cantilever')
axes[1, 0].plot(x, M_ss/1e3, 'r-', linewidth=2, label='Simply Supported')
axes[1, 0].plot(x, M_fixed_bmd/1e3, 'g-', linewidth=2, label='Fixed-Fixed')
axes[1, 0].axhline(0, color='k', linewidth=0.5)
axes[1, 0].set_xlabel('x [m]')
axes[1, 0].set_ylabel('M [kN$\\cdot$m]')
axes[1, 0].set_title('BMD Comparison (UDL)')
axes[1, 0].legend()
axes[1, 0].grid(True, alpha=0.3)

# (4) たわみ比較(棒グラフ)
delta_cant_w = w*L**4 / (8*EI) * 1e3    # [mm]
delta_ss_w = 5*w*L**4 / (384*EI) * 1e3
delta_fixed_w = w*L**4 / (384*EI) * 1e3

delta_cant_P = P*L**3 / (3*EI) * 1e3
delta_ss_P = P*L**3 / (48*EI) * 1e3
delta_fixed_P = P*L**3 / (192*EI) * 1e3

labels = ['Cantilever', 'Simply\nSupported', 'Fixed-Fixed']
x_bar = np.arange(3)
width = 0.35

bars1 = axes[1, 1].bar(x_bar - width/2,
    [delta_cant_w, delta_ss_w, delta_fixed_w],
    width, label=f'UDL w={w/1e3:.0f} kN/m', color='steelblue')
bars2 = axes[1, 1].bar(x_bar + width/2,
    [delta_cant_P, delta_ss_P, delta_fixed_P],
    width, label=f'Point P={P/1e3:.0f} kN', color='coral')

axes[1, 1].set_xticks(x_bar)
axes[1, 1].set_xticklabels(labels)
axes[1, 1].set_ylabel('Max Deflection [mm]')
axes[1, 1].set_title('Maximum Deflection Comparison')
axes[1, 1].legend()
axes[1, 1].grid(True, alpha=0.3, axis='y')

# 値をバーの上に表示
for bar in bars1:
    axes[1, 1].text(bar.get_x() + bar.get_width()/2, bar.get_height(),
                    f'{bar.get_height():.2f}', ha='center', va='bottom', fontsize=8)
for bar in bars2:
    axes[1, 1].text(bar.get_x() + bar.get_width()/2, bar.get_height(),
                    f'{bar.get_height():.2f}', ha='center', va='bottom', fontsize=8)

plt.tight_layout()
plt.savefig('beam_boundary_conditions.png', dpi=150, bbox_inches='tight')
plt.show()

まとめ

本記事では、はりの境界条件と典型的なたわみ解を体系的に解説しました。

  • 固定端: $y=0$, $y’=0$、ピン/ローラー: $y=0$, $y”=0$、自由端: $y”=0$, $y”’=0$
  • 片持ち梁は最もたわみが大きく、両端固定梁は最も小さい
  • 等分布荷重の最大たわみ: 片持ち $\frac{wL^4}{8EI}$、単純支持 $\frac{5wL^4}{384EI}$、両端固定 $\frac{wL^4}{384EI}$
  • 両端固定梁は不静定構造であり、たわみとモーメントの両方が大幅に低減される
  • 連続梁は3モーメントの定理で解析できる

次のステップとして、以下の記事も参考にしてください。