応力-ひずみ曲線の見方と材料特性

応力-ひずみ曲線(stress-strain curve) は、材料の機械的特性を最も端的に表すグラフです。引張試験で得られるこの曲線から、弾性域、降伏点、引張強さ、延性、靭性といった材料の基本特性を読み取ることができます。

材料選定や構造設計において、応力-ひずみ曲線を正しく読み解く能力は必須です。

本記事の内容

  • 引張試験の概要
  • 応力-ひずみ曲線の各領域(弾性・降伏・加工硬化・ネッキング・破断)
  • 延性材料と脆性材料の違い
  • 真応力-真ひずみの概念
  • Pythonでの応力-ひずみ曲線の描画

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。

引張試験とは

引張試験(tensile test) は、試験片を軸方向に引っ張りながら、荷重と伸びを測定する最も基本的な材料試験です。

公称応力と公称ひずみは、それぞれ初期断面積 $A_0$ と初期標点距離 $L_0$ を用いて:

$$ \sigma_{\text{eng}} = \frac{F}{A_0}, \quad \varepsilon_{\text{eng}} = \frac{\Delta L}{L_0} = \frac{L – L_0}{L_0} $$

ここで添字 eng は engineering(公称)を意味します。

応力-ひずみ曲線の各領域

1. 弾性域(Elastic Region)

原点から比例限度(proportional limit) まで、応力とひずみは線形関係を示します。この領域ではフックの法則 $\sigma = E\varepsilon$ が成立し、荷重を除荷すれば元の形状に戻ります。

傾きがヤング率 $E$ です:

$$ E = \frac{\Delta\sigma}{\Delta\varepsilon} $$

2. 降伏(Yielding)

降伏点(yield point) を超えると、材料は永久変形(塑性変形)を始めます。降伏応力 $\sigma_Y$ は、明確な降伏点がない材料では 0.2% オフセット法 で定義されます:

ひずみ軸上の $\varepsilon = 0.002$ の点から $E$ の傾きの直線を引き、応力-ひずみ曲線との交点を降伏応力とします。

3. 加工硬化(Strain Hardening)

降伏後、材料はさらに変形するにつれて抵抗力が増します。これを加工硬化と呼びます。応力は増加を続け、引張強さ(ultimate tensile strength, UTS) $\sigma_{\text{UTS}}$ に達します。

4. ネッキングと破断

引張強さを超えると、試験片の一部が局所的にくびれるネッキング(necking) が発生します。公称応力は見かけ上低下し、最終的に破断(fracture) に至ります。

主な材料特性値

特性値 記号 意味
ヤング率 $E$ 弾性域の傾き
降伏応力 $\sigma_Y$ 塑性変形の開始点
引張強さ $\sigma_{\text{UTS}}$ 最大応力
破断ひずみ $\varepsilon_f$ 破断時のひずみ(延性の指標)
靭性 $u_T$ 曲線下の面積(エネルギー吸収能力)
レジリエンス $u_R$ 弾性域の曲線下の面積

レジリエンスは:

$$ u_R = \frac{\sigma_Y^2}{2E} $$

延性材料と脆性材料

延性材料(ductile material)

軟鋼やアルミニウムなど。大きな塑性変形が可能で、破断前に顕著なネッキングが見られます。破断ひずみは 10% 以上になることもあります。

脆性材料(brittle material)

セラミクス、ガラス、鋳鉄など。ほとんど塑性変形せずに破断します。弾性域の直後にいきなり破断するため、構造物では危険な破壊モードです。

真応力と真ひずみ

公称応力は初期断面積 $A_0$ を基準にしますが、実際の断面積は変形とともに変化します。瞬間の断面積を用いた応力が真応力です。

$$ \sigma_{\text{true}} = \frac{F}{A} $$

真ひずみ は:

$$ \varepsilon_{\text{true}} = \int_{L_0}^{L} \frac{dL}{L} = \ln\frac{L}{L_0} = \ln(1 + \varepsilon_{\text{eng}}) $$

体積一定($AL = A_0 L_0$)の仮定のもとで:

$$ \sigma_{\text{true}} = \frac{F}{A} = \frac{F}{A_0}\cdot\frac{L}{L_0} = \sigma_{\text{eng}}(1 + \varepsilon_{\text{eng}}) $$

真応力-真ひずみ曲線はネッキング後も単調増加します。

加工硬化モデル

塑性域の応力-ひずみ関係は、べき乗硬化則(power law) で近似されることが多いです:

$$ \sigma_{\text{true}} = K\varepsilon_{\text{true}}^n $$

ここで、$K$ は強度係数、$n$ は加工硬化指数です。$n$ が大きいほど加工硬化が著しくなります。

ネッキングの開始条件(コンシデール条件)は:

$$ \frac{d\sigma_{\text{true}}}{d\varepsilon_{\text{true}}} = \sigma_{\text{true}} $$

べき乗硬化則の場合、$\varepsilon_{\text{true}} = n$ でネッキングが開始します。

Pythonでの実装

import numpy as np
import matplotlib.pyplot as plt

def ductile_stress_strain(E, sigma_y, sigma_uts, eps_uts, eps_f, n_points=500):
    """延性材料の応力-ひずみ曲線を生成"""
    # 弾性域
    eps_y = sigma_y / E
    eps_elastic = np.linspace(0, eps_y, n_points // 4)
    sig_elastic = E * eps_elastic

    # 加工硬化域(べき乗近似)
    eps_plastic = np.linspace(eps_y, eps_uts, n_points // 2)
    n_hard = np.log(sigma_uts / sigma_y) / np.log(eps_uts / eps_y)
    K = sigma_y / eps_y**n_hard
    sig_plastic = sigma_y + (sigma_uts - sigma_y) * \
                  ((eps_plastic - eps_y) / (eps_uts - eps_y))**0.5

    # ネッキング域
    eps_necking = np.linspace(eps_uts, eps_f, n_points // 4)
    sig_necking = sigma_uts * np.exp(-3 * (eps_necking - eps_uts)**2 /
                  (eps_f - eps_uts)**2)
    # 破断点に向かって低下
    sig_necking = sigma_uts - (sigma_uts - sigma_uts * 0.7) * \
                  ((eps_necking - eps_uts) / (eps_f - eps_uts))**0.8

    eps = np.concatenate([eps_elastic, eps_plastic[1:], eps_necking[1:]])
    sig = np.concatenate([sig_elastic, sig_plastic[1:], sig_necking[1:]])
    return eps, sig

def brittle_stress_strain(E, sigma_f, eps_f, n_points=200):
    """脆性材料の応力-ひずみ曲線を生成"""
    eps = np.linspace(0, eps_f, n_points)
    # わずかな非線形性
    sig = E * eps * (1 - 0.1 * (eps / eps_f)**2)
    return eps, sig

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

# (1) 延性材料 vs 脆性材料
eps_d, sig_d = ductile_stress_strain(
    E=200e3, sigma_y=250, sigma_uts=400, eps_uts=0.15, eps_f=0.30)
eps_b, sig_b = brittle_stress_strain(E=70e3, sigma_f=350, eps_f=0.005)

axes[0].plot(eps_d * 100, sig_d, 'b-', linewidth=2.5, label='Ductile (Steel)')
axes[0].plot(eps_b * 100, sig_b, 'r-', linewidth=2.5, label='Brittle (Ceramic)')
axes[0].plot(eps_b[-1]*100, sig_b[-1], 'rx', markersize=12, markeredgewidth=3)
axes[0].plot(eps_d[-1]*100, sig_d[-1], 'bx', markersize=12, markeredgewidth=3)
axes[0].set_xlabel('Strain [%]')
axes[0].set_ylabel('Stress [MPa]')
axes[0].set_title('Ductile vs Brittle')
axes[0].legend()
axes[0].grid(True, alpha=0.3)

# (2) 応力-ひずみ曲線の各領域
eps_d2, sig_d2 = ductile_stress_strain(
    E=200e3, sigma_y=300, sigma_uts=500, eps_uts=0.12, eps_f=0.25)
axes[1].plot(eps_d2 * 100, sig_d2, 'b-', linewidth=2.5)

# 各点をアノテーション
eps_y = 300 / 200e3
axes[1].annotate('Yield Point', xy=(eps_y*100, 300),
                xytext=(2, 350), fontsize=10,
                arrowprops=dict(arrowstyle='->', color='red'))
idx_uts = np.argmax(sig_d2)
axes[1].annotate('UTS', xy=(eps_d2[idx_uts]*100, sig_d2[idx_uts]),
                xytext=(eps_d2[idx_uts]*100+2, sig_d2[idx_uts]+30),
                fontsize=10,
                arrowprops=dict(arrowstyle='->', color='red'))
axes[1].annotate('Fracture', xy=(eps_d2[-1]*100, sig_d2[-1]),
                xytext=(eps_d2[-1]*100-5, sig_d2[-1]-80),
                fontsize=10,
                arrowprops=dict(arrowstyle='->', color='red'))

# 弾性域を塗りつぶし
mask_elastic = eps_d2 <= eps_y
axes[1].fill_between(eps_d2[mask_elastic]*100, sig_d2[mask_elastic],
                     alpha=0.2, color='green', label='Elastic Region')
axes[1].set_xlabel('Strain [%]')
axes[1].set_ylabel('Stress [MPa]')
axes[1].set_title('Stress-Strain Curve Regions')
axes[1].legend()
axes[1].grid(True, alpha=0.3)

# (3) 公称応力 vs 真応力
eps_eng = np.linspace(0, 0.25, 300)
# 簡易モデル: 弾性+べき乗硬化
E = 200e3  # MPa
sigma_y = 300  # MPa
eps_y_val = sigma_y / E
K = 800  # 強度係数
n = 0.2  # 加工硬化指数

sig_eng = np.where(eps_eng <= eps_y_val,
                   E * eps_eng,
                   K * eps_eng**n)

# 真応力・真ひずみへの変換
eps_true = np.log(1 + eps_eng)
sig_true = sig_eng * (1 + eps_eng)

axes[2].plot(eps_eng * 100, sig_eng, 'b-', linewidth=2.5,
            label='Engineering')
axes[2].plot(eps_true * 100, sig_true, 'r--', linewidth=2.5,
            label='True')
axes[2].set_xlabel('Strain [%]')
axes[2].set_ylabel('Stress [MPa]')
axes[2].set_title('Engineering vs True Stress-Strain')
axes[2].legend()
axes[2].grid(True, alpha=0.3)

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

まとめ

本記事では、応力-ひずみ曲線の見方と材料特性について解説しました。

  • 引張試験から得られる応力-ひずみ曲線は、弾性域・降伏・加工硬化・ネッキング・破断の各段階を示す
  • 降伏応力 $\sigma_Y$ は塑性変形の開始点であり、0.2% オフセット法で定義される
  • 延性材料は大きな塑性変形、脆性材料はほぼ変形なく破断する
  • 真応力真ひずみは瞬間の断面積と長さを基準とし、$\sigma_{\text{true}} = \sigma_{\text{eng}}(1 + \varepsilon_{\text{eng}})$
  • べき乗硬化則 $\sigma = K\varepsilon^n$ で塑性域をモデル化できる

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