構造物の設計では、強度(応力が許容値以下であるか)だけでなく、たわみ(deflection) が許容値以下であるかも重要な設計条件です。梁のたわみは弾性曲線方程式 $EIy” = M(x)$ を解くことで求められます。
本記事では、弾性曲線方程式の導出から代表的な梁のたわみ解、そして重ね合わせの原理までを解説します。
本記事の内容
- 弾性曲線方程式 $EIy” = M(x)$ の導出
- 境界条件の設定
- 片持ち梁の解
- 単純支持梁の解
- 重ね合わせの原理
- Pythonでの解析と可視化
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
弾性曲線方程式の導出
曲率と曲げモーメントの関係
曲げ応力の導出で得られた関係:
$$ \frac{1}{\rho} = \frac{M}{EI} $$
ここで $\rho$ は曲率半径、$M$ は曲げモーメント、$E$ はヤング率、$I$ は断面二次モーメントです。
曲率の近似
たわみ $y(x)$ の曲率は:
$$ \frac{1}{\rho} = \frac{y”}{(1 + y’^2)^{3/2}} $$
微小変形($y’ \ll 1$)を仮定すると:
$$ \frac{1}{\rho} \approx y” $$
弾性曲線方程式
したがって:
$$ \boxed{EI y” = M(x)} $$
これが弾性曲線方程式(elastic curve equation) です。$M(x)$ が既知であれば、2回積分してたわみ $y(x)$ を求めることができます。
積分の各段階:
$$ EI y” = M(x) $$
$$ EI y’ = \int M(x) \, dx + C_1 \quad (\text{たわみ角 } \theta \approx y’) $$
$$ EI y = \iint M(x) \, dx \, dx + C_1 x + C_2 \quad (\text{たわみ}) $$
$C_1$, $C_2$ は境界条件から決定します。
境界条件
| 支持条件 | $y$ | $y’$ | $M$ | $V$ |
|---|---|---|---|---|
| 固定端 | $y = 0$ | $y’ = 0$ | — | — |
| ピン支持・ローラー | $y = 0$ | — | $M = 0$ | — |
| 自由端 | — | — | $M = 0$ | $V = 0$ |
例1: 片持ち梁 — 先端集中荷重
固定端を $x = 0$、自由端を $x = L$ とし、自由端に下向き荷重 $P$ が作用。
曲げモーメント:
$$ M(x) = P(x – L) $$
弾性曲線方程式:
$$ EIy” = P(x – L) = Px – PL $$
1回積分:
$$ EIy’ = \frac{Px^2}{2} – PLx + C_1 $$
境界条件 $y'(0) = 0$ より $C_1 = 0$。
2回積分:
$$ EIy = \frac{Px^3}{6} – \frac{PLx^2}{2} + C_2 $$
境界条件 $y(0) = 0$ より $C_2 = 0$。
$$ \boxed{y(x) = \frac{P}{6EI}(x^3 – 3Lx^2)} $$
自由端のたわみ($x = L$):
$$ \boxed{\delta_{\max} = y(L) = -\frac{PL^3}{3EI}} $$
負の符号は下向きのたわみを意味します。自由端のたわみ角:
$$ \theta_{\max} = y'(L) = -\frac{PL^2}{2EI} $$
例2: 片持ち梁 — 等分布荷重
等分布荷重 $w$ [N/m] が全体に作用する場合:
$$ M(x) = -\frac{w(L-x)^2}{2} $$
$x = 0$ を固定端として:
$$ EIy” = \frac{w}{2}(x^2 – 2Lx + L^2) $$
1回積分:
$$ EIy’ = \frac{w}{2}\left(\frac{x^3}{3} – Lx^2 + L^2 x\right) + C_1 $$
$y'(0) = 0$ より $C_1 = 0$。
2回積分:
$$ EIy = \frac{w}{2}\left(\frac{x^4}{12} – \frac{Lx^3}{3} + \frac{L^2 x^2}{2}\right) + C_2 $$
$y(0) = 0$ より $C_2 = 0$。
$$ \boxed{y(x) = \frac{w}{24EI}(x^4 – 4Lx^3 + 6L^2 x^2)} $$
自由端のたわみ:
$$ \boxed{\delta_{\max} = -\frac{wL^4}{8EI}} $$
例3: 単純支持梁 — 等分布荷重
反力: $R_A = R_B = wL/2$
曲げモーメント:
$$ M(x) = \frac{wLx}{2} – \frac{wx^2}{2} $$
弾性曲線方程式:
$$ EIy” = \frac{wLx}{2} – \frac{wx^2}{2} $$
1回積分:
$$ EIy’ = \frac{wLx^2}{4} – \frac{wx^3}{6} + C_1 $$
2回積分:
$$ EIy = \frac{wLx^3}{12} – \frac{wx^4}{24} + C_1 x + C_2 $$
境界条件 $y(0) = 0$ より $C_2 = 0$。
境界条件 $y(L) = 0$:
$$ 0 = \frac{wL^4}{12} – \frac{wL^4}{24} + C_1 L = \frac{wL^4}{24} + C_1 L $$
$$ C_1 = -\frac{wL^3}{24} $$
$$ \boxed{y(x) = \frac{w}{24EI}(x^4 – 2Lx^3 + L^3 x) = \frac{wx}{24EI}(x^3 – 2Lx^2 + L^3)} $$
中央のたわみ($x = L/2$):
$$ \boxed{\delta_{\max} = -\frac{5wL^4}{384EI}} $$
重ね合わせの原理
線形弾性の範囲では、複数の荷重による変形は各荷重による変形の重ね合わせ(superposition) で求められます。
荷重1によるたわみが $y_1(x)$、荷重2によるたわみが $y_2(x)$ のとき:
$$ y(x) = y_1(x) + y_2(x) $$
これにより、複雑な荷重条件のたわみを単純な荷重ケースの組み合わせで計算できます。
Pythonでの実装
import numpy as np
import matplotlib.pyplot as plt
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
L = 4.0 # 梁の長さ [m]
E = 200e9 # ヤング率 [Pa]
b = 0.1 # 断面幅 [m]
h = 0.2 # 断面高さ [m]
I = b * h**3 / 12 # 断面二次モーメント [m^4]
EI = E * I
n = 500
x = np.linspace(0, L, n)
# (1) 片持ち梁 — 先端集中荷重
P = 10e3 # [N]
y_cant_P = P / (6 * EI) * (x**3 - 3*L*x**2)
axes[0, 0].plot(x, y_cant_P * 1e3, 'b-', linewidth=2.5)
axes[0, 0].set_xlabel('x [m]')
axes[0, 0].set_ylabel('Deflection y [mm]')
axes[0, 0].set_title(f'Cantilever, Point Load P={P/1e3:.0f} kN')
axes[0, 0].grid(True, alpha=0.3)
delta_max1 = P*L**3 / (3*EI)
axes[0, 0].annotate(f'$\\delta_{{max}} = PL^3/3EI$\n= {delta_max1*1e3:.2f} mm',
xy=(L, y_cant_P[-1]*1e3),
xytext=(L-1.5, y_cant_P[-1]*1e3*0.5),
fontsize=10, arrowprops=dict(arrowstyle='->', color='red'))
# (2) 片持ち梁 — 等分布荷重
w = 5e3 # [N/m]
y_cant_w = w / (24 * EI) * (x**4 - 4*L*x**3 + 6*L**2*x**2)
axes[0, 1].plot(x, y_cant_w * 1e3, 'r-', linewidth=2.5)
axes[0, 1].set_xlabel('x [m]')
axes[0, 1].set_ylabel('Deflection y [mm]')
axes[0, 1].set_title(f'Cantilever, UDL w={w/1e3:.0f} kN/m')
axes[0, 1].grid(True, alpha=0.3)
delta_max2 = w*L**4 / (8*EI)
axes[0, 1].annotate(f'$\\delta_{{max}} = wL^4/8EI$\n= {delta_max2*1e3:.2f} mm',
xy=(L, y_cant_w[-1]*1e3),
xytext=(L-1.5, y_cant_w[-1]*1e3*0.5),
fontsize=10, arrowprops=dict(arrowstyle='->', color='red'))
# (3) 単純支持梁 — 等分布荷重
y_ss_w = w / (24 * EI) * (x**4 - 2*L*x**3 + L**3*x)
axes[1, 0].plot(x, y_ss_w * 1e3, 'g-', linewidth=2.5)
axes[1, 0].set_xlabel('x [m]')
axes[1, 0].set_ylabel('Deflection y [mm]')
axes[1, 0].set_title(f'Simply Supported, UDL w={w/1e3:.0f} kN/m')
axes[1, 0].grid(True, alpha=0.3)
delta_max3 = 5*w*L**4 / (384*EI)
axes[1, 0].annotate(f'$\\delta_{{max}} = 5wL^4/384EI$\n= {delta_max3*1e3:.2f} mm',
xy=(L/2, y_ss_w[n//2]*1e3),
xytext=(L/2+0.5, y_ss_w[n//2]*1e3*0.5),
fontsize=10, arrowprops=dict(arrowstyle='->', color='red'))
# (4) 重ね合わせの原理
P_center = 15e3 # 中央集中荷重 [N]
# 単純支持梁の中央集中荷重のたわみ
y_ss_P = np.where(x <= L/2,
P_center / (48*EI) * (3*L**2*x - 4*x**3),
P_center / (48*EI) * (3*L**2*(L-x) - 4*(L-x)**3))
y_combined = y_ss_w + y_ss_P
axes[1, 1].plot(x, y_ss_w * 1e3, 'g--', linewidth=1.5, label=f'UDL w={w/1e3:.0f} kN/m')
axes[1, 1].plot(x, y_ss_P * 1e3, 'b--', linewidth=1.5, label=f'Point P={P_center/1e3:.0f} kN')
axes[1, 1].plot(x, y_combined * 1e3, 'r-', linewidth=2.5, label='Superposition')
axes[1, 1].set_xlabel('x [m]')
axes[1, 1].set_ylabel('Deflection y [mm]')
axes[1, 1].set_title('Superposition Principle')
axes[1, 1].legend()
axes[1, 1].grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('beam_deflection.png', dpi=150, bbox_inches='tight')
plt.show()
まとめ
本記事では、梁のたわみと弾性曲線方程式について解説しました。
- 弾性曲線方程式: $EIy” = M(x)$ を2回積分してたわみを求める
- 境界条件で積分定数 $C_1, C_2$ を決定する
- 片持ち梁・先端集中荷重: $\delta_{\max} = PL^3 / 3EI$
- 片持ち梁・等分布荷重: $\delta_{\max} = wL^4 / 8EI$
- 単純支持梁・等分布荷重: $\delta_{\max} = 5wL^4 / 384EI$
- 重ね合わせの原理により、複雑な荷重を単純なケースの和で解ける
次のステップとして、以下の記事も参考にしてください。