フックの法則(Hooke’s law) は、弾性体における応力とひずみの線形関係を記述する最も基本的な構成方程式です。1678年にロバート・フックが「ut tensio, sic vis(伸びは力に比例する)」と述べたのが起源で、材料力学のあらゆる解析の出発点となります。
本記事では、1次元のフックの法則から始めて、3次元の一般化フックの法則(等方性材料)まで段階的に解説します。
本記事の内容
- 1次元のフックの法則 $\sigma = E\varepsilon$
- 一般化フックの法則(3次元)
- 弾性係数の定義と相互関係
- 等方性材料の構成方程式
- Pythonでの可視化
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
1次元のフックの法則
棒材を引っ張るとき、弾性域では応力 $\sigma$ とひずみ $\varepsilon$ は比例関係にあります。
$$ \boxed{\sigma = E\varepsilon} $$
ここで、$E$ はヤング率(Young’s modulus) であり、材料固有の定数です。単位は Pa(パスカル)です。
ヤング率が大きいほど材料は硬く、同じ応力に対する変形が小さくなります。代表的な値は:
| 材料 | ヤング率 $E$ [GPa] |
|---|---|
| 鋼 | 200 |
| アルミニウム | 70 |
| 銅 | 120 |
| ガラス | 70 |
| ゴム | 0.01 |
ポアソン効果
棒を引っ張ると軸方向に伸びますが、同時に横方向には縮みます。この横ひずみと軸ひずみの比をポアソン比(Poisson’s ratio) $\nu$ と呼びます。
$$ \boxed{\nu = -\frac{\varepsilon_{\text{lateral}}}{\varepsilon_{\text{axial}}}} $$
符号はマイナスを付けて正の値になるようにしています。一般的に $0 < \nu < 0.5$ であり、非圧縮性材料では $\nu = 0.5$ です。
3次元の一般化フックの法則
3次元の応力状態では、各方向のひずみは全方向の応力の影響を受けます。等方性材料の場合:
$$ \varepsilon_{xx} = \frac{1}{E}\left[\sigma_{xx} – \nu(\sigma_{yy} + \sigma_{zz})\right] $$
$$ \varepsilon_{yy} = \frac{1}{E}\left[\sigma_{yy} – \nu(\sigma_{xx} + \sigma_{zz})\right] $$
$$ \varepsilon_{zz} = \frac{1}{E}\left[\sigma_{zz} – \nu(\sigma_{xx} + \sigma_{yy})\right] $$
せん断成分:
$$ \gamma_{xy} = \frac{\tau_{xy}}{G}, \quad \gamma_{yz} = \frac{\tau_{yz}}{G}, \quad \gamma_{zx} = \frac{\tau_{zx}}{G} $$
ここで、$G$ は剛性率(せん断弾性係数) です。
コンプライアンス行列表記
上記をまとめて行列形式で書くと:
$$ \begin{pmatrix} \varepsilon_{xx} \\ \varepsilon_{yy} \\ \varepsilon_{zz} \\ \gamma_{yz} \\ \gamma_{zx} \\ \gamma_{xy} \end{pmatrix} = \frac{1}{E} \begin{pmatrix} 1 & -\nu & -\nu & 0 & 0 & 0 \\ -\nu & 1 & -\nu & 0 & 0 & 0 \\ -\nu & -\nu & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 2(1+\nu) & 0 & 0 \\ 0 & 0 & 0 & 0 & 2(1+\nu) & 0 \\ 0 & 0 & 0 & 0 & 0 & 2(1+\nu) \end{pmatrix} \begin{pmatrix} \sigma_{xx} \\ \sigma_{yy} \\ \sigma_{zz} \\ \tau_{yz} \\ \tau_{zx} \\ \tau_{xy} \end{pmatrix} $$
これを $\bm{\varepsilon} = \bm{S}\bm{\sigma}$ と書きます。$\bm{S}$ はコンプライアンス行列です。
剛性行列表記
逆関係 $\bm{\sigma} = \bm{C}\bm{\varepsilon}$($\bm{C} = \bm{S}^{-1}$)を書くと:
$$ \bm{C} = \frac{E}{(1+\nu)(1-2\nu)} \begin{pmatrix} 1-\nu & \nu & \nu & 0 & 0 & 0 \\ \nu & 1-\nu & \nu & 0 & 0 & 0 \\ \nu & \nu & 1-\nu & 0 & 0 & 0 \\ 0 & 0 & 0 & \frac{1-2\nu}{2} & 0 & 0 \\ 0 & 0 & 0 & 0 & \frac{1-2\nu}{2} & 0 \\ 0 & 0 & 0 & 0 & 0 & \frac{1-2\nu}{2} \end{pmatrix} $$
弾性係数の相互関係
等方性材料の場合、独立な弾性定数は 2 個(例えば $E$ と $\nu$)だけです。他の弾性係数はすべてこの 2 つから導出できます。
剛性率 $G$ :
$$ \boxed{G = \frac{E}{2(1+\nu)}} $$
体積弾性率 $K$(静水圧に対する体積変化の抵抗):
$$ \boxed{K = \frac{E}{3(1-2\nu)}} $$
ラメの定数 $\lambda$:
$$ \lambda = \frac{E\nu}{(1+\nu)(1-2\nu)} $$
導出: $G = E / 2(1+\nu)$
純せん断状態 $\tau_{xy}$ を考えます。主応力は $\sigma_1 = \tau_{xy}$, $\sigma_2 = -\tau_{xy}$ で、主軸は元の座標系から $45°$ 回転しています。
主軸方向のひずみ:
$$ \varepsilon_1 = \frac{1}{E}[\sigma_1 – \nu\sigma_2] = \frac{\tau_{xy}}{E}(1+\nu) $$
一方、せん断ひずみとの関係から:
$$ \varepsilon_1 = \frac{\gamma_{xy}}{2} = \frac{\tau_{xy}}{2G} $$
両者を等置すると:
$$ \frac{\tau_{xy}}{2G} = \frac{\tau_{xy}}{E}(1+\nu) $$
$$ \therefore \quad G = \frac{E}{2(1+\nu)} $$
Pythonでの実装
import numpy as np
import matplotlib.pyplot as plt
# --- 各材料の応力-ひずみ関係を比較 ---
materials = {
'Steel': {'E': 200e3, 'nu': 0.30, 'color': 'b'},
'Aluminum': {'E': 70e3, 'nu': 0.33, 'color': 'r'},
'Copper': {'E': 120e3, 'nu': 0.34, 'color': 'g'},
'Titanium': {'E': 110e3, 'nu': 0.34, 'color': 'm'},
}
fig, axes = plt.subplots(1, 3, figsize=(16, 5))
# (1) 1次元の応力-ひずみ関係
epsilon = np.linspace(0, 0.003, 100)
for name, props in materials.items():
sigma = props['E'] * epsilon
axes[0].plot(epsilon * 100, sigma, color=props['color'],
linewidth=2, label=f"{name} (E={props['E']/1e3:.0f} GPa)")
axes[0].set_xlabel('Strain [%]')
axes[0].set_ylabel('Stress [MPa]')
axes[0].set_title("Hooke's Law: $\\sigma = E\\varepsilon$")
axes[0].legend()
axes[0].grid(True, alpha=0.3)
# (2) ポアソン効果の可視化
for name, props in materials.items():
E = props['E']
nu = props['nu']
eps_axial = np.linspace(0, 0.002, 100)
eps_lateral = -nu * eps_axial
axes[1].plot(eps_axial * 100, eps_lateral * 100,
color=props['color'], linewidth=2,
label=f"{name} ($\\nu$={nu})")
axes[1].set_xlabel('Axial Strain [%]')
axes[1].set_ylabel('Lateral Strain [%]')
axes[1].set_title('Poisson Effect')
axes[1].legend()
axes[1].grid(True, alpha=0.3)
# (3) 弾性係数の関係: G, K vs nu
nu_range = np.linspace(0.01, 0.49, 100)
E_ref = 200e3 # 基準ヤング率 [MPa]
G_range = E_ref / (2 * (1 + nu_range))
K_range = E_ref / (3 * (1 - 2 * nu_range))
axes[2].plot(nu_range, G_range / 1e3, 'b-', linewidth=2, label='$G = E/2(1+\\nu)$')
axes[2].plot(nu_range, K_range / 1e3, 'r-', linewidth=2, label='$K = E/3(1-2\\nu)$')
axes[2].set_xlabel("Poisson's Ratio $\\nu$")
axes[2].set_ylabel('Modulus [GPa]')
axes[2].set_title(f'Elastic Moduli (E={E_ref/1e3:.0f} GPa)')
axes[2].set_ylim(0, 500)
axes[2].legend()
axes[2].grid(True, alpha=0.3)
axes[2].axvline(0.5, color='k', linestyle='--', alpha=0.5, label='Incompressible')
plt.tight_layout()
plt.savefig('hookes_law_elasticity.png', dpi=150, bbox_inches='tight')
plt.show()
まとめ
本記事では、フックの法則と弾性係数について解説しました。
- フックの法則 $\sigma = E\varepsilon$ は弾性域における応力-ひずみの線形関係
- ポアソン効果により、軸方向のひずみは横方向の収縮を伴う
- 一般化フックの法則は3次元の応力-ひずみ関係をコンプライアンス行列で記述
- 等方性材料の独立な弾性定数は $E$ と $\nu$ の 2 個のみ
- $G = E/2(1+\nu)$, $K = E/3(1-2\nu)$ で他の弾性係数が求まる
次のステップとして、以下の記事も参考にしてください。