フックの法則と弾性係数をわかりやすく解説

材料に力を加えたとき、力を取り除けば元の形状に戻る性質を 弾性(elasticity) といいます。ゴムボールを握って離すと元に戻り、ばねを引っ張って放せば自然長に復帰する――これらはすべて弾性の現れです。

工学の設計においては、「この材料にこれだけの力を加えたら、どれだけ変形するか?」を正確に予測する必要があります。弾性係数はまさにその問いに答える物理量であり、航空機の翼のたわみ、橋梁の変形、エンジン部品の伸びなど、構造設計のあらゆる場面で必須となります。

本記事では、1次元のフックの法則から出発し、ヤング率・ポアソン比・剛性率・体積弾性率の4つの弾性係数を定義し、それらの間の関係式を導出します。最終的には3次元の一般化フックの法則(テンソル表記)までたどり着きます。

本記事の内容

  • 1次元のフックの法則とヤング率
  • ポアソン比・剛性率・体積弾性率の定義
  • 弾性係数間の関係式の導出
  • 一般化フックの法則(3次元テンソル表記)
  • 応力-ひずみ曲線の各領域の解説
  • Pythonによる可視化と弾性係数変換関数の実装

前提知識

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


1次元のフックの法則

フックの法則の式

棒状の部材に軸方向の力を加えたとき、弾性域では応力 $\sigma$ とひずみ $\varepsilon$ の間に比例関係が成り立ちます。

$$ \sigma = E \varepsilon $$

この関係を フックの法則(Hooke’s law) と呼びます。17世紀にイギリスの物理学者ロバート・フック(Robert Hooke)が発見した法則で、ばねの伸びと力の関係 $F = kx$ を材料力学の言葉に書き換えたものです。

フックの法則の意味

フックの法則は「応力とひずみが線形関係にある」という仮定です。これは 微小変形 を前提としており、大きな変形が生じると非線形な挙動が現れます。材料力学や構造力学の問題では、まず弾性域内であることを確認してからフックの法則を適用します。


ヤング率 E の定義と代表的な材料の値

ヤング率の定義

フックの法則 $\sigma = E\varepsilon$ における比例定数 $E$ を ヤング率(Young’s modulus) または 縦弾性係数 と呼びます。

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

ヤング率は 材料の剛性(stiffness)、つまり「変形しにくさ」を表す指標です。ヤング率が大きい材料ほど、同じ応力を加えてもひずみが小さい(変形しにくい)ことを意味します。

ヤング率の単位は応力と同じ Pa(パスカル)ですが、工学的には GPa がよく用いられます。

代表的な材料のヤング率

以下に代表的な工業材料のヤング率を示します。

材料 ヤング率 $E$ [GPa] 備考
ダイヤモンド 約 1,050 自然界最高クラス
タングステン 約 410 高融点金属
鋼(Steel) 約 200 構造材料の基準
チタン合金 約 110 航空宇宙で多用
約 110 電気配線
アルミニウム 約 70 軽量構造材
ガラス 約 70 脆性材料
コンクリート 約 25 圧縮に強い
木材(繊維方向) 約 10 異方性
ゴム 約 0.01 超弾性体

航空宇宙分野では、軽さと剛性のバランスが重要です。そのため「ヤング率を密度で割った値」である 比剛性(specific stiffness) $E/\rho$ がよく用いられます。アルミニウムと鋼は比剛性がほぼ等しく(約 25 GPa/(g/cm$^3$))、CFRP(炭素繊維強化プラスチック)はその数倍の比剛性を持つため、航空機構造に多用されます。


ポアソン比 ν の定義と意味

ポアソン比の定義

棒を $x$ 軸方向に引っ張ると軸方向に伸びますが、同時に横方向($y$ 方向、$z$ 方向)には縮みます。この横収縮と軸方向伸びの比を ポアソン比(Poisson’s ratio) $\nu$ と定義します。

$$ \nu = -\frac{\varepsilon_{\text{lateral}}}{\varepsilon_{\text{axial}}} $$

横方向のひずみ $\varepsilon_{\text{lateral}}$ は軸方向のひずみ $\varepsilon_{\text{axial}}$ と逆符号であるため、マイナスを付けて $\nu \geq 0$ となるように定義されています。

ポアソン比の取りうる範囲

等方性弾性体の場合、熱力学的な安定条件(弾性エネルギーが正定値であること)から、ポアソン比の理論的な範囲は以下のとおりです。

$$ -1 \leq \nu \leq 0.5 $$

物理的な意味を確認します。

  • $\nu = 0.5$: 体積変化なし(非圧縮性材料)。ゴムがこれに近い値を持ちます。
  • $\nu = 0$: 横方向に変形しない。コルクがこれに近い値を持ちます。
  • $\nu < 0$: 引っ張ると横にも膨らむ(オーゼティック材料)。特殊な構造材料で実現されます。

代表的な材料のポアソン比

材料 ポアソン比 $\nu$
約 0.30
アルミニウム 約 0.33
チタン合金 約 0.34
約 0.34
ゴム 約 0.50(非圧縮に近い)
コルク 約 0.00
コンクリート 約 0.20

剛性率(せん断弾性係数)G の定義

剛性率の定義

せん断応力 $\tau$ とせん断ひずみ $\gamma$ の間にも、弾性域では線形関係が成り立ちます。

$$ \tau = G \gamma $$

この比例定数 $G$ を 剛性率(shear modulus)せん断弾性係数、または 横弾性係数 と呼びます。

$$ G = \frac{\tau}{\gamma} $$

剛性率は「せん断変形に対する抵抗力」を表しています。剛性率が大きい材料ほど、同じせん断応力を加えてもせん断ひずみが小さくなります。

代表的な材料の剛性率

材料 剛性率 $G$ [GPa]
約 77
アルミニウム 約 26
チタン合金 約 42
約 41

体積弾性率 K の定義

体積弾性率の定義

物体に 等方的な圧力(静水圧) $p$ を加えると、体積が変化します。体積ひずみ(体積変化率)$\varepsilon_v$ を以下のように定義します。

$$ \varepsilon_v = \frac{\Delta V}{V} = \varepsilon_x + \varepsilon_y + \varepsilon_z $$

体積弾性率 $K$ は、等方圧力と体積ひずみの比として定義されます。

$$ p = -K \varepsilon_v $$

すなわち、

$$ K = -\frac{p}{\varepsilon_v} $$

マイナスが付くのは、圧力(圧縮)が正のとき体積が減少する($\varepsilon_v < 0$)ためです。$K$ が大きい材料は「圧縮しにくい」ことを意味します。

代表的な材料の体積弾性率

材料 体積弾性率 $K$ [GPa]
約 167
アルミニウム 約 69
約 2.2
空気 約 $1.0 \times 10^{-4}$

弾性係数間の関係式

等方性弾性体では、独立な弾性定数は 2つだけ です。$E$, $G$, $\nu$, $K$ の4つの弾性係数のうち、任意の2つが分かれば残りの2つを計算できます。以下では、これらの関係式を導出します。

E, G, ν の関係

まず、ヤング率 $E$、剛性率 $G$、ポアソン比 $\nu$ の間の関係を導きます。

単軸引張状態 $\sigma_x = \sigma$, $\sigma_y = \sigma_z = 0$ を考えます。このとき、主ひずみは以下のとおりです。

$$ \varepsilon_x = \frac{\sigma}{E}, \quad \varepsilon_y = \varepsilon_z = -\frac{\nu \sigma}{E} $$

次に、座標軸を $45°$ 回転した斜め面でのせん断応力・せん断ひずみを求めます。モールの円(Mohr’s circle)を用いると、最大せん断応力と最大せん断ひずみはそれぞれ以下のようになります。

$$ \tau_{\max} = \frac{\sigma}{2} $$

$$ \gamma_{\max} = \varepsilon_x – \varepsilon_y = \frac{\sigma}{E} + \frac{\nu \sigma}{E} = \frac{\sigma(1 + \nu)}{E} $$

せん断に対するフックの法則 $\tau_{\max} = G \gamma_{\max}$ を適用すると、

$$ \begin{align} \frac{\sigma}{2} &= G \cdot \frac{\sigma(1 + \nu)}{E} \end{align} $$

両辺を $\sigma$ で割って整理すると、

$$ \begin{align} \frac{1}{2} &= \frac{G(1 + \nu)}{E} \\ E &= 2G(1 + \nu) \end{align} $$

したがって、

$$ \boxed{G = \frac{E}{2(1 + \nu)}} $$

この関係は等方性弾性体における最も重要な弾性定数の関係式の一つです。

E, K, ν の関係

次に、等方圧力下の変形から $E$, $K$, $\nu$ の関係を導きます。

等方圧力 $p$ を受ける物体の各方向の応力は $\sigma_x = \sigma_y = \sigma_z = -p$ です。フックの法則から各方向のひずみを計算します。

$$ \varepsilon_x = \frac{1}{E} \left[ \sigma_x – \nu(\sigma_y + \sigma_z) \right] = \frac{-p}{E}(1 – 2\nu) $$

等方性より $\varepsilon_x = \varepsilon_y = \varepsilon_z$ なので、体積ひずみは以下のとおりです。

$$ \varepsilon_v = \varepsilon_x + \varepsilon_y + \varepsilon_z = 3\varepsilon_x = \frac{-3p}{E}(1 – 2\nu) $$

体積弾性率の定義 $K = -p / \varepsilon_v$ に代入すると、

$$ \begin{align} K &= -\frac{p}{\varepsilon_v} \\ &= -\frac{p}{\dfrac{-3p(1 – 2\nu)}{E}} \\ &= \frac{E}{3(1 – 2\nu)} \end{align} $$

したがって、

$$ \boxed{K = \frac{E}{3(1 – 2\nu)}} $$

G と K の関係

上記の2つの関係式から $\nu$ を消去して、$G$ と $K$ の直接的な関係を求めます。

$E = 2G(1 + \nu)$ より $\nu = \dfrac{E}{2G} – 1$ 、これを $K = \dfrac{E}{3(1 – 2\nu)}$ に代入します。

$$ \begin{align} 1 – 2\nu &= 1 – 2\left(\frac{E}{2G} – 1\right) \\ &= 1 – \frac{E}{G} + 2 \\ &= 3 – \frac{E}{G} \end{align} $$

したがって、

$$ K = \frac{E}{3\left(3 – \dfrac{E}{G}\right)} = \frac{EG}{3(3G – E)} $$

あるいは、$E = 2G(1+\nu)$ と $E = 3K(1-2\nu)$ の2式から $E$ を消去して、

$$ \begin{align} 2G(1 + \nu) &= 3K(1 – 2\nu) \\ 2G + 2G\nu &= 3K – 6K\nu \\ \nu(2G + 6K) &= 3K – 2G \\ \nu &= \frac{3K – 2G}{2(3K + G)} \end{align} $$

弾性係数の変換表

等方性弾性体における4つの弾性係数の主要な関係式をまとめます。

既知の量 $E$ $G$ $\nu$ $K$
$E, \nu$ $\dfrac{E}{2(1+\nu)}$ $\dfrac{E}{3(1-2\nu)}$
$E, G$ $\dfrac{E}{2G} – 1$ $\dfrac{EG}{3(3G-E)}$
$G, \nu$ $2G(1+\nu)$ $\dfrac{2G(1+\nu)}{3(1-2\nu)}$
$K, \nu$ $3K(1-2\nu)$ $\dfrac{3K(1-2\nu)}{2(1+\nu)}$

一般化フックの法則(3次元テンソル表記)

3次元の応力ーひずみ関係

ここまで見てきた1次元のフックの法則を、3次元の一般的な応力状態に拡張します。等方性弾性体において、各方向の垂直ひずみは他のすべての方向の垂直応力の影響を受けます。

$x$ 方向のひずみ $\varepsilon_x$ を考えます。$\sigma_x$ 方向の応力は直接 $\varepsilon_x = \sigma_x / E$ のひずみを生じ、$\sigma_y$ と $\sigma_z$ はポアソン効果で横方向に $-\nu \sigma_y / E$ および $-\nu \sigma_z / E$ のひずみを生じさせます。重ね合わせの原理により、

$$ \varepsilon_x = \frac{1}{E} \left[ \sigma_x – \nu(\sigma_y + \sigma_z) \right] $$

同様に $y$, $z$ 方向についても、

$$ \varepsilon_y = \frac{1}{E} \left[ \sigma_y – \nu(\sigma_z + \sigma_x) \right] $$

$$ \varepsilon_z = \frac{1}{E} \left[ \sigma_z – \nu(\sigma_x + \sigma_y) \right] $$

せん断成分については、

$$ \gamma_{xy} = \frac{\tau_{xy}}{G}, \quad \gamma_{yz} = \frac{\tau_{yz}}{G}, \quad \gamma_{zx} = \frac{\tau_{zx}}{G} $$

コンプライアンス行列による表記

上記の6つの式をまとめて行列形式で書くと、以下のようになります。

$$ \begin{pmatrix} \varepsilon_x \\ \varepsilon_y \\ \varepsilon_z \\ \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_x \\ \sigma_y \\ \sigma_z \\ \tau_{yz} \\ \tau_{zx} \\ \tau_{xy} \end{pmatrix} $$

この $6 \times 6$ 行列を コンプライアンス行列(compliance matrix) $\bm{S}$ と呼びます。ひずみベクトル $\bm{\varepsilon}$ と応力ベクトル $\bm{\sigma}$ を使って、

$$ \bm{\varepsilon} = \bm{S} \bm{\sigma} $$

と簡潔に書けます。

スティフネス行列による表記

逆に、応力をひずみで表す形式は以下のとおりです。

$$ \bm{\sigma} = \bm{C} \bm{\varepsilon} $$

ここで $\bm{C} = \bm{S}^{-1}$ を スティフネス行列(stiffness matrix) と呼びます。等方性弾性体のスティフネス行列は ラメの定数 $\lambda$, $\mu$ を用いて以下のように書けます。

$$ \bm{C} = \begin{pmatrix} \lambda + 2\mu & \lambda & \lambda & 0 & 0 & 0 \\ \lambda & \lambda + 2\mu & \lambda & 0 & 0 & 0 \\ \lambda & \lambda & \lambda + 2\mu & 0 & 0 & 0 \\ 0 & 0 & 0 & \mu & 0 & 0 \\ 0 & 0 & 0 & 0 & \mu & 0 \\ 0 & 0 & 0 & 0 & 0 & \mu \end{pmatrix} $$

ここで、ラメの定数は $E$ と $\nu$ を用いて以下のように表されます。

$$ \lambda = \frac{E\nu}{(1+\nu)(1-2\nu)}, \quad \mu = G = \frac{E}{2(1+\nu)} $$

テンソル表記

最も一般的なテンソル表記では、応力テンソル $\sigma_{ij}$ とひずみテンソル $\varepsilon_{kl}$ の間の関係を弾性テンソル $C_{ijkl}$ で表します。

$$ \sigma_{ij} = C_{ijkl} \, \varepsilon_{kl} $$

等方性弾性体の場合、弾性テンソルは以下のように書けます。

$$ C_{ijkl} = \lambda \, \delta_{ij} \delta_{kl} + \mu \left( \delta_{ik} \delta_{jl} + \delta_{il} \delta_{jk} \right) $$

ここで $\delta_{ij}$ はクロネッカーのデルタです。このテンソル表記は座標系に依存しない普遍的な形式であり、有限要素法(FEM)などの数値解析で広く用いられます。


応力-ひずみ曲線

材料に引張荷重を徐々に加え、応力とひずみの関係を測定した図を 応力-ひずみ曲線(stress-strain curve) と呼びます。ここでは軟鋼を例にとり、曲線上の各領域を解説します。

弾性域(Elastic Region)

原点から 比例限度(proportional limit) までの領域です。応力とひずみが線形関係にあり、フックの法則が成り立ちます。荷重を取り除くと変形がゼロに戻ります。曲線の傾きがヤング率 $E$ です。

降伏点(Yield Point)

弾性限度を超えると、荷重を除去しても変形が残る 塑性変形(plastic deformation) が始まります。この遷移点を 降伏点(yield point) といい、そのときの応力を 降伏応力 $\sigma_Y$ と呼びます。

明確な降伏点を示さない材料(アルミニウム合金など)では、ひずみ 0.2% のオフセット直線との交点で定義される 0.2% 耐力(proof stress) を用います。

ひずみ硬化域(Strain Hardening Region)

降伏後も変形を続けると、応力は再び増加します。これは ひずみ硬化(strain hardening / work hardening) と呼ばれ、転位の増殖と相互作用による塑性流動応力の増大に起因します。

引張強さ(Ultimate Tensile Strength)

応力-ひずみ曲線の最大値に対応する応力を 引張強さ $\sigma_u$ と呼びます。

ネッキングと破断

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


Python 実装

応力-ひずみ曲線の可視化

軟鋼の典型的な応力-ひずみ曲線を Python で描画します。弾性域・ひずみ硬化域・ネッキング域の各段階を近似モデルで表現しています。

import numpy as np
import matplotlib.pyplot as plt

# --- 材料パラメータ(軟鋼の典型値) ---
E = 200e3          # ヤング率 [MPa]
sigma_y = 250      # 降伏応力 [MPa]
sigma_u = 400      # 引張強さ [MPa]
eps_y = sigma_y / E          # 降伏ひずみ
eps_u = 0.15                 # 引張強さに対応するひずみ
eps_f = 0.25                 # 破断ひずみ
sigma_f = 300                # 破断時応力 [MPa]

# --- (1) 弾性域: 0 ~ eps_y ---
eps_elastic = np.linspace(0, eps_y, 200)
sigma_elastic = E * eps_elastic  # フックの法則

# --- (2) 降伏 + ひずみ硬化域: eps_y ~ eps_u ---
eps_hardening = np.linspace(eps_y, eps_u, 300)
n = 0.4  # 硬化指数
sigma_hardening = sigma_y + (sigma_u - sigma_y) * (
    (eps_hardening - eps_y) / (eps_u - eps_y)
) ** n

# --- (3) ネッキング~破断域: eps_u ~ eps_f ---
eps_necking = np.linspace(eps_u, eps_f, 200)
sigma_necking = sigma_u + (sigma_f - sigma_u) * (
    (eps_necking - eps_u) / (eps_f - eps_u)
)

# --- 全区間を結合 ---
eps_all = np.concatenate([eps_elastic, eps_hardening, eps_necking])
sigma_all = np.concatenate([sigma_elastic, sigma_hardening, sigma_necking])

# --- 描画 ---
fig, ax = plt.subplots(figsize=(9, 6))
ax.plot(eps_all * 100, sigma_all, color="steelblue", linewidth=2)

# 特徴的な点
ax.plot(eps_y * 100, sigma_y, "o", color="darkorange", markersize=8,
        label=f"Yield point ($\\sigma_Y$ = {sigma_y} MPa)")
ax.plot(eps_u * 100, sigma_u, "s", color="crimson", markersize=8,
        label=f"UTS ($\\sigma_u$ = {sigma_u} MPa)")
ax.plot(eps_f * 100, sigma_f, "^", color="purple", markersize=8,
        label=f"Fracture ($\\sigma_f$ = {sigma_f} MPa)")

# 弾性域の傾きを示す補助線
eps_guide = np.linspace(0, 0.003, 50)
ax.plot(eps_guide * 100, E * eps_guide, "--", color="gray", linewidth=1,
        label=f"Elastic region (E = {E/1e3:.0f} GPa)")

# 領域の注釈
ax.annotate("Elastic\nregion", xy=(0.05, 100), fontsize=10, color="gray")
ax.annotate("Strain\nhardening", xy=(5, 280), fontsize=10, color="gray")
ax.annotate("Necking", xy=(20, 370), fontsize=10, color="gray")

ax.set_xlabel("Strain $\\varepsilon$ [%]", fontsize=13)
ax.set_ylabel("Stress $\\sigma$ [MPa]", fontsize=13)
ax.set_title("Stress-Strain Curve of Mild Steel (Schematic)", fontsize=14)
ax.legend(fontsize=10, loc="lower right")
ax.set_xlim(0, eps_f * 100 + 2)
ax.set_ylim(0, sigma_u + 80)
ax.grid(True, linestyle="--", alpha=0.5)
plt.tight_layout()
plt.savefig("stress_strain_curve.png", dpi=150)
plt.show()

弾性係数間の変換関数

4つの弾性係数 $E$, $G$, $\nu$, $K$ のうち任意の2つから残りを計算する関数群を実装します。

import numpy as np


def from_E_nu(E: float, nu: float) -> dict:
    """ヤング率 E とポアソン比 nu から他の弾性係数を計算"""
    G = E / (2 * (1 + nu))
    K = E / (3 * (1 - 2 * nu))
    lam = E * nu / ((1 + nu) * (1 - 2 * nu))  # ラメの第1定数
    return {"E": E, "nu": nu, "G": G, "K": K, "lambda": lam, "mu": G}


def from_E_G(E: float, G: float) -> dict:
    """ヤング率 E と剛性率 G から他の弾性係数を計算"""
    nu = E / (2 * G) - 1
    K = E * G / (3 * (3 * G - E))
    lam = G * (E - 2 * G) / (3 * G - E)
    return {"E": E, "nu": nu, "G": G, "K": K, "lambda": lam, "mu": G}


def from_G_nu(G: float, nu: float) -> dict:
    """剛性率 G とポアソン比 nu から他の弾性係数を計算"""
    E = 2 * G * (1 + nu)
    K = 2 * G * (1 + nu) / (3 * (1 - 2 * nu))
    lam = 2 * G * nu / (1 - 2 * nu)
    return {"E": E, "nu": nu, "G": G, "K": K, "lambda": lam, "mu": G}


def from_K_nu(K: float, nu: float) -> dict:
    """体積弾性率 K とポアソン比 nu から他の弾性係数を計算"""
    E = 3 * K * (1 - 2 * nu)
    G = 3 * K * (1 - 2 * nu) / (2 * (1 + nu))
    lam = 3 * K * nu / (1 + nu)
    return {"E": E, "nu": nu, "G": G, "K": K, "lambda": lam, "mu": G}


# --- 使用例: 鋼の弾性係数を計算 ---
print("=== 鋼 (E=200 GPa, nu=0.30) ===")
steel = from_E_nu(E=200e9, nu=0.30)
for key, val in steel.items():
    print(f"  {key:>8s} = {val:.4e} Pa  ({val/1e9:.2f} GPa)")

print()
print("=== アルミニウム (E=70 GPa, nu=0.33) ===")
aluminum = from_E_nu(E=70e9, nu=0.33)
for key, val in aluminum.items():
    print(f"  {key:>8s} = {val:.4e} Pa  ({val/1e9:.2f} GPa)")

print()
print("=== 検算: E, G から nu を逆算 ===")
check = from_E_G(E=200e9, G=steel["G"])
print(f"  nu = {check['nu']:.4f}  (期待値: 0.3000)")

実行すると以下のような出力が得られます。

=== 鋼 (E=200 GPa, nu=0.30) ===
         E = 2.0000e+11 Pa  (200.00 GPa)
        nu = 3.0000e-01 Pa  (0.00 GPa)
         G = 7.6923e+10 Pa  (76.92 GPa)
         K = 1.6667e+11 Pa  (166.67 GPa)
    lambda = 1.1538e+11 Pa  (115.38 GPa)
        mu = 7.6923e+10 Pa  (76.92 GPa)

=== アルミニウム (E=70 GPa, nu=0.33) ===
         E = 7.0000e+10 Pa  (70.00 GPa)
        nu = 3.3000e-01 Pa  (0.00 GPa)
         G = 2.6316e+10 Pa  (26.32 GPa)
         K = 6.8627e+10 Pa  (68.63 GPa)
    lambda = 5.1072e+10 Pa  (51.07 GPa)
        mu = 2.6316e+10 Pa  (26.32 GPa)

=== 検算: E, G から nu を逆算 ===
  nu = 0.3000  (期待値: 0.3000)

鋼のヤング率 200 GPa とポアソン比 0.30 から、剛性率 $G \approx 76.9$ GPa、体積弾性率 $K \approx 166.7$ GPa が得られました。これらは文献値とよく一致します。

コンプライアンス行列の生成

3次元一般化フックの法則のコンプライアンス行列を生成し、数値的に確認します。

import numpy as np


def compliance_matrix(E: float, nu: float) -> np.ndarray:
    """等方性弾性体の 6x6 コンプライアンス行列を生成"""
    G = E / (2 * (1 + nu))
    S = np.zeros((6, 6))

    # 垂直成分 (3x3)
    for i in range(3):
        S[i, i] = 1.0 / E
        for j in range(3):
            if i != j:
                S[i, j] = -nu / E

    # せん断成分 (3x3)
    for i in range(3, 6):
        S[i, i] = 1.0 / G

    return S


def stiffness_matrix(E: float, nu: float) -> np.ndarray:
    """等方性弾性体の 6x6 スティフネス行列を生成"""
    lam = E * nu / ((1 + nu) * (1 - 2 * nu))
    mu = E / (2 * (1 + nu))
    C = np.zeros((6, 6))

    # 垂直成分
    for i in range(3):
        C[i, i] = lam + 2 * mu
        for j in range(3):
            if i != j:
                C[i, j] = lam

    # せん断成分
    for i in range(3, 6):
        C[i, i] = mu

    return C


# --- 鋼の例 ---
E_steel = 200e9   # [Pa]
nu_steel = 0.30

S = compliance_matrix(E_steel, nu_steel)
C = stiffness_matrix(E_steel, nu_steel)

print("コンプライアンス行列 S [1/Pa]:")
print(np.array2string(S, precision=4, suppress_small=True))

print("\nスティフネス行列 C [Pa]:")
print(np.array2string(C / 1e9, precision=2, suppress_small=True))
print("(単位: GPa)")

# 検算: S * C = I
identity_check = S @ C
print("\nS @ C (単位行列になるべき):")
print(np.array2string(identity_check, precision=6, suppress_small=True))

まとめ

本記事では、フックの法則と4つの弾性係数について解説しました。要点を整理します。

弾性係数 記号 定義式 物理的意味
ヤング率 $E$ $\sigma = E\varepsilon$ 引張・圧縮に対する剛性
ポアソン比 $\nu$ $\nu = -\varepsilon_{\text{lat}} / \varepsilon_{\text{ax}}$ 横収縮と軸方向伸びの比
剛性率 $G$ $\tau = G\gamma$ せん断変形に対する剛性
体積弾性率 $K$ $p = -K\varepsilon_v$ 等方圧縮に対する剛性
  • 等方性弾性体の独立な弾性定数は 2つ であり、$E = 2G(1+\nu)$、$K = E / [3(1-2\nu)]$ などの関係で相互変換できます
  • 一般化フックの法則は、6成分の応力・ひずみベクトルをコンプライアンス行列(またはスティフネス行列)で結びつけます
  • テンソル表記 $\sigma_{ij} = C_{ijkl} \varepsilon_{kl}$ は座標系に依存しない普遍的な形式であり、有限要素法などの数値解析の基礎となります
  • 応力-ひずみ曲線は、弾性域・降伏点・ひずみ硬化域・引張強さ・ネッキング・破断の各段階を通じて、材料の力学的特性を一望できる重要な図です

次のステップとして、以下のトピックに進みましょう。

  • 軸力と棒の伸び: フックの法則を用いた不静定問題の解法
  • 曲げ応力と断面二次モーメント: 梁の曲げに対する応力分布の導出
  • ねじり応力と極断面二次モーメント: 軸のねじりに対する強度設計