応力とひずみは、材料力学の最も基本的な概念です。構造物や機械部品に外力が加わったとき、内部にどのような力が発生し、どれだけ変形するかを定量的に記述するための物理量です。
航空宇宙工学、機械工学、土木工学のあらゆる設計において、応力とひずみの理解は不可欠です。本記事では、定義から応力テンソルまで丁寧に解説し、Pythonで応力-ひずみ曲線を可視化します。
本記事の内容
- 応力の定義(垂直応力・せん断応力)
- ひずみの定義(垂直ひずみ・せん断ひずみ)
- 応力テンソルの数学的表現
- 応力-ひずみ曲線とPythonでの可視化
応力(Stress)とは
垂直応力
物体の断面に垂直に作用する単位面積あたりの力を 垂直応力(normal stress)$\sigma$ といいます。
$$ \sigma = \frac{F}{A} $$
ここで $F$ は断面に垂直な力 $\text{[N]}$、$A$ は断面積 $\text{[m}^2\text{]}$ です。応力の単位は $\text{Pa} = \text{N/m}^2$ です。
- $\sigma > 0$: 引張応力(tensile stress)
- $\sigma < 0$: 圧縮応力(compressive stress)
せん断応力
断面に平行に作用する単位面積あたりの力を せん断応力(shear stress)$\tau$ といいます。
$$ \tau = \frac{V}{A} $$
ここで $V$ は断面に平行な力です。
応力テンソル
3次元空間の任意の点における応力状態は、2階のテンソル(応力テンソル)で表されます。
$$ \bm{\sigma} = \begin{pmatrix} \sigma_{xx} & \tau_{xy} & \tau_{xz} \\ \tau_{yx} & \sigma_{yy} & \tau_{yz} \\ \tau_{zx} & \tau_{zy} & \sigma_{zz} \end{pmatrix} $$
角運動量の保存(モーメントの釣り合い)から、応力テンソルは対称です。
$$ \tau_{xy} = \tau_{yx}, \quad \tau_{yz} = \tau_{zy}, \quad \tau_{zx} = \tau_{xz} $$
したがって、独立な成分は6つです。
主応力
応力テンソルの固有値を 主応力 $\sigma_1, \sigma_2, \sigma_3$($\sigma_1 \ge \sigma_2 \ge \sigma_3$)といいます。主応力方向ではせん断応力がゼロになります。
固有値方程式は、
$$ \det(\bm{\sigma} – \sigma \bm{I}) = 0 $$
ひずみ(Strain)とは
垂直ひずみ
物体が外力により変形したとき、元の長さ $L_0$ に対する伸び $\Delta L$ の比を 垂直ひずみ(normal strain)$\varepsilon$ といいます。
$$ \varepsilon = \frac{\Delta L}{L_0} $$
ひずみは無次元量です。
せん断ひずみ
直角だった面が外力により角度変化を起こしたとき、その角度変化 $\gamma$ を せん断ひずみ といいます。
$$ \gamma_{xy} = \frac{\partial u}{\partial y} + \frac{\partial v}{\partial x} $$
ここで $u$, $v$ は $x$, $y$ 方向の変位です。
ひずみテンソル
微小変形を仮定すると、ひずみテンソルは変位 $\bm{u} = (u, v, w)$ を用いて、
$$ \varepsilon_{ij} = \frac{1}{2}\left(\frac{\partial u_i}{\partial x_j} + \frac{\partial u_j}{\partial x_i}\right) $$
行列表示では、
$$ \bm{\varepsilon} = \begin{pmatrix} \varepsilon_{xx} & \varepsilon_{xy} & \varepsilon_{xz} \\ \varepsilon_{yx} & \varepsilon_{yy} & \varepsilon_{yz} \\ \varepsilon_{zx} & \varepsilon_{zy} & \varepsilon_{zz} \end{pmatrix} $$
応力-ひずみ曲線
引張試験で得られる応力-ひずみ曲線は、材料の力学的特性を理解するうえで最も基本的なグラフです。
曲線の各領域
| 領域 | 特徴 |
|---|---|
| 弾性域 | 応力とひずみが比例(フックの法則)。除荷すると元に戻る |
| 降伏点 | 塑性変形が始まる点。降伏応力 $\sigma_Y$ |
| 塑性域 | 永久変形が生じる。加工硬化により応力が徐々に増加 |
| 引張強さ | 応力の最大値。くびれ(ネッキング)が始まる |
| 破断 | 材料が破壊される |
Pythonでの実装
典型的な軟鋼の応力-ひずみ曲線をモデル化して可視化します。
import numpy as np
import matplotlib.pyplot as plt
# 材料パラメータ(軟鋼を想定)
E = 200e9 # ヤング率 [Pa]
sigma_y = 250e6 # 降伏応力 [Pa]
sigma_u = 400e6 # 引張強さ [Pa]
eps_y = sigma_y / E # 降伏ひずみ
eps_u = 0.15 # 引張強さ時のひずみ
eps_f = 0.30 # 破断ひずみ
# 弾性域
eps_elastic = np.linspace(0, eps_y, 100)
sigma_elastic = E * eps_elastic
# 塑性域(放物線近似)
eps_plastic = np.linspace(eps_y, eps_u, 200)
sigma_plastic = sigma_y + (sigma_u - sigma_y) * ((eps_plastic - eps_y) / (eps_u - eps_y))**0.5
# ネッキング〜破断域
eps_necking = np.linspace(eps_u, eps_f, 100)
sigma_necking = sigma_u - (sigma_u - sigma_y * 0.8) * ((eps_necking - eps_u) / (eps_f - eps_u))**1.5
# 結合
eps = np.concatenate([eps_elastic, eps_plastic, eps_necking])
sigma = np.concatenate([sigma_elastic, sigma_plastic, sigma_necking])
# MPaに変換
sigma_mpa = sigma / 1e6
# 可視化
plt.figure(figsize=(10, 6))
plt.plot(eps * 100, sigma_mpa, 'b-', linewidth=2)
# 特徴点のマーキング
plt.plot(eps_y * 100, sigma_y / 1e6, 'ro', markersize=8, label=f'Yield point ({sigma_y/1e6:.0f} MPa)')
plt.plot(eps_u * 100, sigma_u / 1e6, 'gs', markersize=8, label=f'Ultimate strength ({sigma_u/1e6:.0f} MPa)')
plt.plot(eps_f * 100, sigma_necking[-1] / 1e6, 'k^', markersize=8, label='Fracture')
# 弾性域の傾き(ヤング率)を示す
plt.annotate(f'E = {E/1e9:.0f} GPa', xy=(eps_y * 50, sigma_y / 2e6),
fontsize=12, ha='center')
plt.xlabel('Strain [%]')
plt.ylabel('Stress [MPa]')
plt.title('Stress-Strain Curve (Mild Steel)')
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()
弾性域の直線部分の傾きがヤング率 $E$ を表し、降伏点から塑性変形が始まります。引張強さで最大応力に達し、その後ネッキングが進行して破断に至ります。
まとめ
本記事では、応力とひずみの基本概念について解説しました。
- 垂直応力 $\sigma = F/A$ とせん断応力 $\tau = V/A$ が応力の基本
- 垂直ひずみ $\varepsilon = \Delta L / L_0$ とせん断ひずみ $\gamma$ がひずみの基本
- 応力テンソルとひずみテンソルはともに対称な2階テンソル
- 応力-ひずみ曲線から弾性域・降伏点・塑性域・引張強さ・破断点が読み取れる
次のステップとして、以下の記事も参考にしてください。