梁(はり)は構造物の基本要素であり、橋梁、建築物、航空機の翼など至るところに使われています。梁に荷重が加わると曲げ変形が生じ、このたわみ量を定量的に求めることは構造設計の基本です。
本記事では、オイラー・ベルヌーイ梁理論に基づく弾性曲線方程式を導出し、代表的な梁問題のたわみを求めます。
本記事の内容
- 曲げモーメントと曲率の関係
- 弾性曲線方程式の導出
- 片持ち梁と単純支持梁のたわみ
- Pythonによるたわみ分布の可視化
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
曲げモーメントと曲率の関係
オイラー・ベルヌーイ梁理論
オイラー・ベルヌーイ梁理論では、以下の仮定を置きます。
- 梁の断面は変形後も平面を保つ(平面保持の仮定)
- 断面はたわみ曲線に垂直を保つ
- 微小変形を仮定する
曲げモーメント $M$ と梁の曲率 $\kappa$ の関係は、
$$ M = EI\kappa $$
ここで $E$ はヤング率、$I$ は断面二次モーメントです。
曲率とたわみの関係
梁のたわみ $y(x)$ に対する曲率は、厳密には、
$$ \kappa = \frac{y”}{(1 + y’^2)^{3/2}} $$
微小変形の仮定 $|y’| \ll 1$ のもとでは、
$$ \kappa \approx y” $$
弾性曲線方程式
上記の関係を組み合わせると、弾性曲線方程式が得られます。
$$ \boxed{EI\frac{d^2y}{dx^2} = M(x)} $$
さらに、荷重分布 $w(x)$ との関係は、
$$ \frac{dV}{dx} = -w(x), \quad \frac{dM}{dx} = V(x) $$
ここで $V$ はせん断力です。これらを組み合わせると4階の微分方程式となります。
$$ EI\frac{d^4y}{dx^4} = w(x) $$
具体例1: 片持ち梁の集中荷重
長さ $L$ の片持ち梁の自由端に集中荷重 $P$ が作用する場合を考えます。
曲げモーメントの導出
固定端を原点とすると、位置 $x$ での曲げモーメントは、
$$ M(x) = -P(L – x) $$
たわみの導出
弾性曲線方程式に代入して積分します。
$$ EI y” = -P(L – x) $$
1回積分:
$$ EI y’ = -P\left(Lx – \frac{x^2}{2}\right) + C_1 $$
2回積分:
$$ EI y = -P\left(\frac{Lx^2}{2} – \frac{x^3}{6}\right) + C_1 x + C_2 $$
境界条件
固定端 $x = 0$ での境界条件は、
$$ y(0) = 0 \quad \Rightarrow \quad C_2 = 0 $$
$$ y'(0) = 0 \quad \Rightarrow \quad C_1 = 0 $$
たわみの公式
$$ y(x) = \frac{-P}{EI}\left(\frac{Lx^2}{2} – \frac{x^3}{6}\right) $$
自由端 $x = L$ での最大たわみは、
$$ \boxed{\delta_{\max} = \frac{PL^3}{3EI}} $$
具体例2: 単純支持梁の等分布荷重
長さ $L$ の単純支持梁に等分布荷重 $w$ が作用する場合を考えます。
曲げモーメント
支点反力は対称性から $R_A = R_B = wL/2$ です。位置 $x$ での曲げモーメントは、
$$ M(x) = \frac{wL}{2}x – \frac{wx^2}{2} $$
たわみの導出
$$ EI y” = \frac{wL}{2}x – \frac{wx^2}{2} $$
1回積分:
$$ EI y’ = \frac{wL}{4}x^2 – \frac{w}{6}x^3 + C_1 $$
2回積分:
$$ EI y = \frac{wL}{12}x^3 – \frac{w}{24}x^4 + C_1 x + C_2 $$
境界条件 $y(0) = 0$, $y(L) = 0$ より、
$$ C_2 = 0, \quad C_1 = -\frac{wL^3}{24} $$
$$ y(x) = \frac{w}{24EI}\left(-x^4 + 2Lx^3 – L^3x\right) $$
中央 $x = L/2$ での最大たわみは、
$$ \boxed{\delta_{\max} = \frac{5wL^4}{384EI}} $$
Pythonでの実装
片持ち梁と単純支持梁のたわみ分布を可視化します。
import numpy as np
import matplotlib.pyplot as plt
# 共通パラメータ
E = 200e9 # ヤング率 [Pa](鋼)
b = 0.05 # 幅 [m]
h = 0.1 # 高さ [m]
I = b * h**3 / 12 # 断面二次モーメント [m^4]
L = 2.0 # 梁の長さ [m]
x = np.linspace(0, L, 500)
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
# --- 片持ち梁(集中荷重) ---
P = 1000 # 集中荷重 [N]
y_cant = -P / (E * I) * (L * x**2 / 2 - x**3 / 6)
M_cant = -P * (L - x)
axes[0, 0].plot(x, y_cant * 1e3, 'b-', linewidth=2)
axes[0, 0].set_xlabel('Position $x$ [m]')
axes[0, 0].set_ylabel('Deflection $y$ [mm]')
axes[0, 0].set_title(f'Cantilever Beam - Point Load (P={P} N)')
axes[0, 0].grid(True)
axes[0, 0].invert_yaxis()
axes[0, 1].plot(x, M_cant, 'r-', linewidth=2)
axes[0, 1].set_xlabel('Position $x$ [m]')
axes[0, 1].set_ylabel('Bending Moment $M$ [N·m]')
axes[0, 1].set_title('Bending Moment Diagram')
axes[0, 1].grid(True)
# --- 単純支持梁(等分布荷重) ---
w = 5000 # 等分布荷重 [N/m]
y_simple = w / (24 * E * I) * (-x**4 + 2 * L * x**3 - L**3 * x)
M_simple = w * L / 2 * x - w * x**2 / 2
axes[1, 0].plot(x, y_simple * 1e3, 'b-', linewidth=2)
axes[1, 0].set_xlabel('Position $x$ [m]')
axes[1, 0].set_ylabel('Deflection $y$ [mm]')
axes[1, 0].set_title(f'Simply Supported Beam - Uniform Load (w={w} N/m)')
axes[1, 0].grid(True)
axes[1, 0].invert_yaxis()
axes[1, 1].plot(x, M_simple, 'r-', linewidth=2)
axes[1, 1].set_xlabel('Position $x$ [m]')
axes[1, 1].set_ylabel('Bending Moment $M$ [N·m]')
axes[1, 1].set_title('Bending Moment Diagram')
axes[1, 1].grid(True)
plt.tight_layout()
plt.show()
# たわみの最大値を表示
print(f"片持ち梁の最大たわみ: {abs(y_cant[-1])*1e3:.3f} mm")
print(f"片持ち梁の理論値 PL^3/(3EI): {P*L**3/(3*E*I)*1e3:.3f} mm")
print(f"単純支持梁の最大たわみ: {abs(min(y_simple))*1e3:.3f} mm")
print(f"単純支持梁の理論値 5wL^4/(384EI): {5*w*L**4/(384*E*I)*1e3:.3f} mm")
片持ち梁では自由端で最大たわみが生じ、単純支持梁では中央で最大たわみが生じることが確認できます。
まとめ
本記事では、梁のたわみと弾性曲線方程式について解説しました。
- オイラー・ベルヌーイ梁理論: 曲げモーメントと曲率の関係 $M = EI\kappa$
- 弾性曲線方程式: $EI y” = M(x)$
- 片持ち梁(集中荷重)の最大たわみ: $\delta = PL^3/(3EI)$
- 単純支持梁(等分布荷重)の最大たわみ: $\delta = 5wL^4/(384EI)$
次のステップとして、以下の記事も参考にしてください。