座屈(オイラーの座屈荷重)

細長い柱に圧縮荷重を加えると、ある臨界荷重で急激に横方向にたわむ現象が起きます。これが座屈(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$)でのみ有効

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