応力とひずみの定義をわかりやすく解説

材料力学は、構造物や機械部品に外力が作用したとき、内部にどのような力が生じ、どのように変形するかを解析する学問です。その最も基本的な概念が応力ひずみです。

応力とひずみを正しく理解することは、構造物の安全設計や強度評価の出発点になります。橋梁、航空機の翼、人工衛星の構体など、あらゆる工学構造物の設計において不可欠な概念です。

本記事の内容

  • 応力(垂直応力・せん断応力)の定義
  • ひずみ(垂直ひずみ・せん断ひずみ)の定義
  • 応力テンソルとひずみテンソル
  • Pythonでの可視化

前提知識

この記事を読む前に、以下の知識があると理解が深まります。

  • ベクトルと行列の基本演算
  • 微積分の基礎(微分の概念)

応力とは

応力(stress) とは、物体の内部に作用する単位面積あたりの力です。外力が物体に作用すると、物体内部の任意の断面には、その断面を通じて力が伝達されます。この内力の面積密度が応力です。

垂直応力

断面に垂直な方向に作用する応力を垂直応力(normal stress) と呼び、$\sigma$ で表します。

$$ \boxed{\sigma = \frac{F}{A}} $$

ここで、$F$ は断面に垂直な力 [N]、$A$ は断面積 [m$^2$] です。単位は Pa(パスカル)= N/m$^2$ です。

  • 引張応力(tensile stress): $\sigma > 0$(引っ張る方向)
  • 圧縮応力(compressive stress): $\sigma < 0$(押す方向)

せん断応力

断面に平行な方向に作用する応力をせん断応力(shear stress) と呼び、$\tau$ で表します。

$$ \boxed{\tau = \frac{V}{A}} $$

ここで、$V$ は断面に平行な力(せん断力)[N] です。

ひずみとは

ひずみ(strain) とは、物体の変形の程度を表す無次元量です。

垂直ひずみ

元の長さ $L$ の物体が $\Delta L$ だけ伸び(または縮み)たとき、垂直ひずみ(normal strain) $\varepsilon$ は次のように定義されます。

$$ \boxed{\varepsilon = \frac{\Delta L}{L}} $$

ひずみは無次元量であり、単位はありません。工学的には $\mu\varepsilon$(マイクロストレイン、$10^{-6}$)がよく使われます。

  • 引張ひずみ: $\varepsilon > 0$
  • 圧縮ひずみ: $\varepsilon < 0$

せん断ひずみ

2つの直交する辺がなす角の変化量をせん断ひずみ(shear strain) $\gamma$ と呼びます。

$$ \boxed{\gamma = \tan\phi \approx \phi} $$

ここで、$\phi$ は角度変化 [rad] です。微小変形では $\tan\phi \approx \phi$ と近似できます。

応力テンソル

3次元の応力状態を完全に記述するには、応力テンソル(stress tensor) $\bm{\sigma}$ を用います。これは 2 階の対称テンソルで、$3 \times 3$ の行列として表されます。

$$ \bm{\sigma} = \begin{pmatrix} \sigma_{xx} & \tau_{xy} & \tau_{xz} \\ \tau_{yx} & \sigma_{yy} & \tau_{yz} \\ \tau_{zx} & \tau_{zy} & \sigma_{zz} \end{pmatrix} $$

対角成分 $\sigma_{xx}, \sigma_{yy}, \sigma_{zz}$ が垂直応力、非対角成分 $\tau_{xy}, \tau_{yz}, \tau_{zx}$ がせん断応力です。

角運動量の保存から、応力テンソルは対称です:

$$ \tau_{xy} = \tau_{yx}, \quad \tau_{yz} = \tau_{zy}, \quad \tau_{zx} = \tau_{xz} $$

したがって、独立な成分は 6 個です。

コーシーの公式

任意の面(法線ベクトル $\bm{n}$)に作用する応力ベクトル $\bm{t}$ は、応力テンソルを用いて次のように書けます。

$$ \bm{t} = \bm{\sigma} \cdot \bm{n} $$

成分で書くと:

$$ t_i = \sum_{j=1}^{3} \sigma_{ij} n_j $$

ひずみテンソル

3次元のひずみ状態も同様にテンソルで記述されます。変位ベクトルを $\bm{u} = (u, v, w)$ とすると、ひずみテンソル $\bm{\varepsilon}$ の各成分は:

$$ \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} $$

ここで:

$$ \varepsilon_{xx} = \frac{\partial u}{\partial x}, \quad \varepsilon_{yy} = \frac{\partial v}{\partial y}, \quad \varepsilon_{zz} = \frac{\partial w}{\partial z} $$

$$ \varepsilon_{xy} = \frac{1}{2}\left(\frac{\partial u}{\partial y} + \frac{\partial v}{\partial x}\right) = \frac{\gamma_{xy}}{2} $$

工学ひずみ $\gamma_{xy}$ とテンソルひずみ $\varepsilon_{xy}$ の関係は $\gamma_{xy} = 2\varepsilon_{xy}$ です。

具体例

直径 $d = 10$ mm の丸棒に引張力 $F = 5$ kN が作用する場合を考えます。

断面積:

$$ A = \frac{\pi d^2}{4} = \frac{\pi \times (0.01)^2}{4} = 7.854 \times 10^{-5} \, \text{m}^2 $$

垂直応力:

$$ \sigma = \frac{F}{A} = \frac{5000}{7.854 \times 10^{-5}} = 63.7 \, \text{MPa} $$

Pythonでの実装

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import FancyArrowPatch

# --- 応力とひずみの基本計算 ---
# 丸棒の引張
d = 0.01  # 直径 [m]
A = np.pi * d**2 / 4  # 断面積
F_values = np.linspace(0, 10000, 100)  # 力 [N]
sigma_values = F_values / A / 1e6  # 応力 [MPa]

fig, axes = plt.subplots(1, 3, figsize=(16, 5))

# (1) 力と応力の関係
axes[0].plot(F_values / 1000, sigma_values, 'b-', linewidth=2)
axes[0].set_xlabel('Force [kN]')
axes[0].set_ylabel('Stress [MPa]')
axes[0].set_title(f'Normal Stress (d={d*1000:.0f} mm)')
axes[0].grid(True, alpha=0.3)

# (2) 応力テンソルの可視化(2Dモールの円)
sigma_x = 80  # [MPa]
sigma_y = 20  # [MPa]
tau_xy = 30   # [MPa]

# モールの円のパラメータ
center = (sigma_x + sigma_y) / 2
radius = np.sqrt(((sigma_x - sigma_y) / 2)**2 + tau_xy**2)

theta_mohr = np.linspace(0, 2*np.pi, 200)
sigma_circle = center + radius * np.cos(theta_mohr)
tau_circle = radius * np.sin(theta_mohr)

axes[1].plot(sigma_circle, tau_circle, 'b-', linewidth=2)
axes[1].plot(center, 0, 'ro', markersize=8, label=f'Center ({center:.0f}, 0)')
axes[1].plot([sigma_x, sigma_y], [tau_xy, -tau_xy], 'g--', linewidth=1.5)
axes[1].plot(sigma_x, tau_xy, 'gs', markersize=8, label=f'({sigma_x}, {tau_xy})')
axes[1].plot(sigma_y, -tau_xy, 'g^', markersize=8, label=f'({sigma_y}, {-tau_xy})')
axes[1].set_xlabel('$\\sigma$ [MPa]')
axes[1].set_ylabel('$\\tau$ [MPa]')
axes[1].set_title("Mohr's Circle")
axes[1].set_aspect('equal')
axes[1].grid(True, alpha=0.3)
axes[1].legend(fontsize=9)
axes[1].axhline(0, color='k', linewidth=0.5)
axes[1].axvline(0, color='k', linewidth=0.5)

# (3) ひずみの概念図
L0 = 1.0   # 元の長さ
E = 200e3  # ヤング率 [MPa](鋼)
sigma_range = np.linspace(0, 250, 100)  # [MPa]
epsilon_range = sigma_range / E

axes[2].plot(epsilon_range * 100, sigma_range, 'r-', linewidth=2)
axes[2].set_xlabel('Strain [%]')
axes[2].set_ylabel('Stress [MPa]')
axes[2].set_title('Stress-Strain (Linear Elastic)')
axes[2].grid(True, alpha=0.3)
axes[2].annotate(f'E = {E/1e3:.0f} GPa', xy=(0.05, 100),
                fontsize=12, color='red')

plt.tight_layout()
plt.savefig('stress_strain_definition.png', dpi=150, bbox_inches='tight')
plt.show()

まとめ

本記事では、材料力学の最も基本的な概念である応力とひずみについて解説しました。

  • 応力は単位面積あたりの内力であり、垂直応力 $\sigma$ とせん断応力 $\tau$ に分類される
  • ひずみは変形の程度を表す無次元量であり、垂直ひずみ $\varepsilon$ とせん断ひずみ $\gamma$ がある
  • 3次元の応力・ひずみ状態はテンソルで記述される
  • 応力テンソルは対称テンソルであり、独立成分は 6 個

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