細長い柱に圧縮荷重を加えると、ある臨界荷重で急激に横方向にたわむ現象が起きます。これが座屈(buckling)です。座屈荷重は材料の圧縮強度よりもはるかに小さい場合があり、構造設計で極めて重要です。
本記事の内容
- 座屈現象の概要
- オイラーの座屈荷重 $P_{cr} = \pi^2 EI / L_e^2$ の導出
- 端末条件と有効長さ
- 細長比と臨界応力
- Pythonでの可視化
前提知識
オイラーの座屈荷重の導出
支配方程式
両端ピン支持の柱に軸圧縮力 $P$ が作用する場合を考えます。たわみ $v(x)$ に関する弾性曲線方程式は:
$$ EI\frac{d^2v}{dx^2} = -Pv $$
$$ \frac{d^2v}{dx^2} + k^2 v = 0, \quad k^2 = \frac{P}{EI} $$
一般解
$$ v(x) = A\sin kx + B\cos kx $$
境界条件
$v(0) = 0$ より $B = 0$。$v(L) = 0$ より:
$$ A\sin kL = 0 $$
$A = 0$ は自明解(座屈しない)なので、非自明解の条件は:
$$ \sin kL = 0 \implies kL = n\pi \quad (n = 1, 2, 3, \dots) $$
臨界荷重
$k^2 = P/(EI)$ より:
$$ P_n = \frac{n^2\pi^2 EI}{L^2} $$
最小の座屈荷重($n = 1$)がオイラーの座屈荷重です:
$$ \boxed{P_{cr} = \frac{\pi^2 EI}{L^2}} $$
端末条件と有効長さ
異なる端末条件では有効長さ $L_e$ を用いて統一的に表現します:
$$ P_{cr} = \frac{\pi^2 EI}{L_e^2} $$
| 端末条件 | 有効長さ $L_e$ | 係数 $K = L_e/L$ |
|---|---|---|
| 両端ピン | $L$ | 1.0 |
| 一端固定・一端自由 | $2L$ | 2.0 |
| 両端固定 | $L/2$ | 0.5 |
| 一端固定・一端ピン | $0.7L$ | 0.7 |
臨界応力と細長比
臨界応力 $\sigma_{cr} = P_{cr}/A$ は:
$$ \sigma_{cr} = \frac{\pi^2 E}{(L_e/r)^2} $$
ここで $r = \sqrt{I/A}$ は断面二次半径、$\lambda = L_e/r$ は細長比(slenderness ratio)です。
$$ \boxed{\sigma_{cr} = \frac{\pi^2 E}{\lambda^2}} $$
オイラーの式は $\sigma_{cr} < \sigma_y$(降伏応力)の範囲でのみ有効です。
Pythonでの可視化
import numpy as np
import matplotlib.pyplot as plt
fig, axes = plt.subplots(1, 3, figsize=(16, 5))
# (1) 座屈モード形状
L = 1.0
x = np.linspace(0, L, 200)
for n in [1, 2, 3]:
v = np.sin(n * np.pi * x / L)
axes[0].plot(x, v, lw=2, label=f'n={n}')
axes[0].set_xlabel('Position $x/L$'); axes[0].set_ylabel('Deflection $v$')
axes[0].set_title('Buckling mode shapes'); axes[0].legend(); axes[0].grid(True, alpha=0.3)
# (2) 臨界応力 vs 細長比
E_steel = 200e9 # 鋼
sigma_y = 250e6 # 降伏応力
lam = np.linspace(10, 300, 500)
sigma_cr = np.pi**2 * E_steel / lam**2
axes[1].plot(lam, sigma_cr / 1e6, 'b-', lw=2, label='Euler')
axes[1].axhline(sigma_y / 1e6, color='r', ls='--', lw=2, label=f'$\\sigma_y$ = {sigma_y/1e6:.0f} MPa')
lam_cr = np.pi * np.sqrt(E_steel / sigma_y)
axes[1].axvline(lam_cr, color='g', ls=':', lw=1.5, label=f'$\\lambda_{{cr}}$ = {lam_cr:.0f}')
axes[1].set_xlabel('Slenderness ratio $\\lambda$'); axes[1].set_ylabel('$\\sigma_{cr}$ [MPa]')
axes[1].set_title('Euler curve'); axes[1].legend(); axes[1].grid(True, alpha=0.3)
axes[1].set_ylim(0, 800)
# (3) 端末条件の比較
K_vals = {'Pin-Pin': 1.0, 'Fixed-Free': 2.0, 'Fixed-Fixed': 0.5, 'Fixed-Pin': 0.7}
lam_base = np.linspace(20, 200, 200)
for label, K in K_vals.items():
lam_eff = K * lam_base
s_cr = np.pi**2 * E_steel / lam_eff**2
axes[2].plot(lam_base, s_cr / 1e6, lw=2, label=f'{label} (K={K})')
axes[2].axhline(sigma_y / 1e6, color='r', ls='--', lw=1.5)
axes[2].set_xlabel('$L/r$'); axes[2].set_ylabel('$\\sigma_{cr}$ [MPa]')
axes[2].set_title('End conditions comparison'); axes[2].legend(fontsize=9)
axes[2].grid(True, alpha=0.3); axes[2].set_ylim(0, 600)
plt.tight_layout()
plt.show()
まとめ
- オイラーの座屈荷重: $P_{cr} = \pi^2 EI / L_e^2$
- 有効長さ $L_e = KL$ は端末条件で決まる
- 臨界応力: $\sigma_{cr} = \pi^2 E / \lambda^2$(細長比 $\lambda$ の関数)
- 細長比が大きい柱ほど座屈しやすい
- オイラー式は弾性範囲($\sigma_{cr} < \sigma_y$)でのみ有効
次のステップとして、以下の記事も参考にしてください。