フックの法則と弾性係数の理論を完全解説

バネを引っ張って手を離すと、バネは元の長さに戻ります。輪ゴムを伸ばしても、力を抜けばまた縮みます。では、「どのくらいの力で引っ張ったら、どのくらい伸びるのか」を定量的に予測できるでしょうか。この問いに答える最も基本的な法則がフックの法則です。

フックの法則は、17世紀にロバート・フックが発見した「弾性体の変形は加えた力に比例する」という経験則であり、材料力学の全ての計算の出発点となります。この法則を理解すると、たとえば次のような幅広い問題に取り組むことができます。

  • 構造設計: 橋梁やビルの柱がどれだけ変形するかを計算し、安全な設計を行う
  • 機械設計: 自動車のサスペンションや航空機の翼に加わる荷重から、必要な材料の厚さを決める
  • 物理シミュレーション: 弾性体の振動解析や有限要素法(FEM)の基礎方程式を構築する
  • 材料選定: ヤング率やポアソン比といった弾性定数を比較し、用途に最適な材料を選ぶ

本記事では、1次元のバネの法則から出発し、ヤング率・ポアソン比・剛性率・体積弾性率といった弾性定数の物理的意味を丁寧に解説します。さらに、これらの弾性定数の間に成り立つ関係式を導出し、最終的に3次元空間でのテンソル形式の一般化フックの法則まで到達します。

本記事の内容

  • 1次元のフックの法則とバネ定数
  • ヤング率の物理的意味と材料の「硬さ」
  • ポアソン比:伸ばすと横が縮む現象
  • 剛性率:せん断変形に対する抵抗
  • 体積弾性率と弾性定数間の関係式の導出
  • 3次元一般化フックの法則(テンソル形式)
  • 各種材料の弾性定数比較
  • Pythonでの応力-ひずみ関係の計算と可視化

前提知識

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

バネのフックの法則 ー 全ての出発点

バネを引っ張る体験から始めよう

身の回りにあるバネを思い浮かべてください。ボールペンのバネでも、トランポリンのバネでも構いません。バネを少しだけ引っ張ると軽い力で伸びますが、もっと伸ばそうとするとそれだけ大きな力が必要になります。そして手を離すと、バネは元の長さにぴったり戻ります。この「力と伸びが比例する」という関係こそが、フックの法則の原点です。

ロバート・フックは1678年、この関係を次のように定式化しました。

$$ \begin{equation} F = kx \end{equation} $$

ここで、$F$ は加えた力 [N]、$x$ はバネの自然長からの伸び(変位)[m]、$k$ はバネ定数(ばね定数)[N/m] です。バネ定数 $k$ が大きいほど、同じ伸びに対して大きな力が必要、つまり「硬いバネ」であることを意味します。

この式の重要なポイントは「線形性」です。力を2倍にすれば伸びも2倍になり、力を3倍にすれば伸びも3倍になります。ただし、これは無限に成り立つわけではありません。バネを引っ張りすぎると、永久変形(塑性変形)を起こして元に戻らなくなります。フックの法則が成り立つ範囲を弾性域と呼びます。

バネから「材料」へ:なぜバネ定数では不十分なのか

バネのフックの法則は直感的で分かりやすいのですが、材料力学で使うには1つ大きな問題があります。バネ定数 $k$ は、バネの材質だけでなく、バネの長さや巻き数、線径などの「形状」にも依存します。つまり、同じ鋼でも、太いバネと細いバネではバネ定数が異なるのです。

構造設計では、「鋼はどのくらい硬いか」「アルミはどのくらい伸びやすいか」といった材料そのものの特性を知りたい場面がほとんどです。そこで、形状の影響を取り除くために、力を断面積で割った応力 $\sigma$ と、伸びを元の長さで割ったひずみ $\varepsilon$ を導入します。

$$ \sigma = \frac{F}{A}, \quad \varepsilon = \frac{\Delta L}{L} $$

$A$ は断面積 [m$^2$]、$L$ は元の長さ [m]、$\Delta L$ は伸び [m] です。応力とひずみの詳細な定義は応力とひずみの定義を参照してください。

応力とひずみを使ってフックの法則を書き直すと、材料固有の特性だけが残ります。これが材料力学におけるフックの法則であり、次のセクションで詳しく見ていきましょう。

1次元のフックの法則

応力とひずみの比例関係

棒を引っ張る場面を考えます。断面積 $A$ の棒に軸方向の力 $F$ を加えると、棒の内部には応力 $\sigma = F/A$ が生じ、棒はひずみ $\varepsilon = \Delta L / L$ だけ伸びます。弾性域では、この応力とひずみの間に次の線形関係が成り立ちます。

$$ \begin{equation} \sigma = E\varepsilon \end{equation} $$

これが1次元のフックの法則です。比例定数 $E$ はヤング率(Young’s modulus)と呼ばれ、単位は [Pa](パスカル)です。バネの法則 $F = kx$ と比較すると、バネ定数 $k$ に相当するのがヤング率 $E$ であることがわかります。ただし、ヤング率はバネの形状に依存しない材料固有の定数であるという大きな違いがあります。

棒の伸びの公式

1次元のフックの法則を使って、力 $F$ を加えたときの棒の伸び $\Delta L$ を求めてみましょう。

$\sigma = F/A$ と $\varepsilon = \Delta L / L$ をフックの法則 $\sigma = E\varepsilon$ に代入すると、

$$ \frac{F}{A} = E \frac{\Delta L}{L} $$

$\Delta L$ について解くと、

$$ \begin{equation} \Delta L = \frac{FL}{EA} \end{equation} $$

が得られます。ここで $EA$ は軸剛性と呼ばれ、「材料の硬さ $E$」と「断面の大きさ $A$」の積が棒全体の伸びにくさを決めていることがわかります。この公式の詳しい応用は軸力と棒の伸びで扱っています。

同じ材料(同じ $E$)でも、断面積 $A$ を2倍にすれば伸びは半分になり、長さ $L$ を2倍にすれば伸びは2倍になります。これは直感にも合う結果です。長い棒ほどよく伸び、太い棒ほど伸びにくいのです。

ここまでで、1次元のフックの法則とそこから導かれる棒の伸びの公式を理解しました。次に、フックの法則の核心となるヤング率 $E$ の物理的意味をもう少し深掘りしていきます。

ヤング率 $E$ ー 材料の「硬さ」を測る指標

ヤング率の直感的な意味

ヤング率 $E$ は、ひとことで言えば「材料がどれだけ伸びにくいか」を表す数値です。ヤング率が大きい材料は、同じ応力を加えてもほとんど変形しません。逆に、ヤング率が小さい材料は、少しの力でよく伸びます。

日常的な感覚と対応させてみましょう。

  • ($E \approx 200$ GPa):非常に硬く、力を加えてもほとんど伸びない
  • アルミニウム合金($E \approx 70$ GPa):鋼の約1/3の硬さ。同じ力で鋼の3倍伸びる
  • ゴム($E \approx 0.01$ GPa):鋼の2万分の1。手で簡単に伸ばせる

この「硬さの指標」としてのヤング率は、応力-ひずみ曲線のグラフでいうと弾性域の直線部分の傾きに対応します。傾きが急な材料ほどヤング率が大きく、硬い材料であることを意味します。

ヤング率の厳密な定義

応力-ひずみ曲線の弾性域(原点付近の直線部分)において、ヤング率は次のように定義されます。

$$ \begin{equation} E = \frac{\sigma}{\varepsilon} = \frac{\text{応力}}{\text{ひずみ}} \end{equation} $$

ひずみ $\varepsilon$ は無次元量なので、ヤング率の単位は応力と同じ [Pa] です。工学的には GPa(ギガパスカル、$10^9$ Pa)で表すことが多いです。

ヤング率は原子間の結合力に起源を持ちます。金属の場合、原子間の結合(金属結合)が強いほどヤング率が高くなります。そのため、同じ鉄でも合金の種類によってヤング率が微妙に異なりますが、おおむね結晶構造と原子の種類で決まります。温度が上がると原子の熱振動が大きくなり、結合が弱まるため、ヤング率はやや低下する傾向があります。

ここまでで、引張方向の変形とヤング率を理解しました。しかし、棒を引っ張ると縦に伸びるだけでなく、横方向にも変化が起きます。次に、この「横方向の変形」を定量化するポアソン比について見ていきましょう。

ポアソン比 $\nu$ ー 伸ばすと横が縮む

直感的な理解

消しゴムを指で挟んで縦に引っ張ってみてください。縦に伸びると同時に、横方向が細くなる(くびれる)のが観察できるはずです。同じことはゴムバンドでもパスタの生地でも起きます。材料を一方向に引っ張ると、垂直な方向には収縮するのです。

この「縦に伸ばすと横が縮む」現象を定量化するのがポアソン比 $\nu$(ニュー)です。

ポアソン比の定義

ポアソン比は、引張方向のひずみ $\varepsilon_{\text{縦}}$ に対する、横方向のひずみ $\varepsilon_{\text{横}}$ の比の負値として定義されます。

$$ \begin{equation} \nu = -\frac{\varepsilon_{\text{横}}}{\varepsilon_{\text{縦}}} \end{equation} $$

マイナスが付いているのは、通常の材料では引っ張ると横が縮む($\varepsilon_{\text{横}} < 0$)ため、ポアソン比を正の値にするための約束です。

たとえば、鋼のポアソン比は $\nu \approx 0.3$ です。これは、棒を縦に $1\%$ 伸ばすと、横方向に $0.3\%$ 縮むことを意味します。

ポアソン比の物理的な範囲

等方性材料(どの方向にも同じ性質を持つ材料)では、ポアソン比は次の範囲に制限されます。

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

この範囲の上限 $\nu = 0.5$ は非圧縮性材料に対応します。非圧縮性材料とは、変形しても体積が変わらない材料のことで、ゴムが $\nu \approx 0.49$ と非常にこの値に近いことが知られています。水やゴムのように「形は変わるけど体積は変わらない」物質がこれに該当します。

下限の $\nu = -1$ は理論的な限界ですが、通常の材料では $\nu > 0$ です。ただし近年、引っ張ると横にも膨らむ $\nu < 0$ の特殊な材料(オーセティック材料)が開発されています。ハニカム構造を工夫した人工材料や一部の結晶がこの性質を示します。

一般的な工業材料のポアソン比は $0.25$ から $0.35$ の間に収まることが多いです。代表的な値を挙げると、鋼が $0.30$、アルミニウムが $0.33$、銅が $0.34$、コンクリートが $0.20$ です。

ポアソン比の詳しい解説と、ヤング率との関係についてはヤング率・ポアソン比を参照してください。

ここまでで、引張・圧縮方向の変形(ヤング率)と、横方向の変形(ポアソン比)を理解しました。しかし、材料に加わる力は引張・圧縮だけではありません。トランプのカードの山を横からずらすような「せん断力」に対する変形も重要です。次のセクションでは、このせん断変形を支配する弾性定数「剛性率」を見ていきましょう。

剛性率 $G$ ー せん断変形に対する抵抗

せん断変形のイメージ

はさみで紙を切る動作を思い浮かべてください。はさみの2枚の刃は、紙を上下にずらすように力を加えています。このように、材料の表面に平行な方向に力を加えて変形させることをせん断変形と呼びます。

もう1つのイメージとして、積み重ねた本の山を横から押す場面を考えてみてください。本の山は傾いて平行四辺形のように変形します。これがまさにせん断変形です。引張・圧縮が「伸び縮み」だとすれば、せん断は「ずれ」に対応します。

せん断のフックの法則

せん断変形に対しても、弾性域ではフックの法則と同じ形の線形関係が成り立ちます。

$$ \begin{equation} \tau = G\gamma \end{equation} $$

ここで、$\tau$ はせん断応力 [Pa]、$\gamma$ はせん断ひずみ [rad](角度の変化量)、$G$ は剛性率(せん断弾性係数、剛性率、shear modulus)[Pa] です。

せん断ひずみ $\gamma$ は、直角だった辺がどれだけ傾いたかの角度を表します。小さな変形では、$\gamma = \tan\theta \approx \theta$ とラジアンで表現できます。

剛性率 $G$ が大きい材料ほど、同じせん断応力に対して角度の変化が小さく、ずれにくい材料です。鋼の剛性率は $G \approx 77$ GPa、アルミニウムでは $G \approx 26$ GPa です。

剛性率とヤング率の関係:なぜ独立でないのか

等方性材料では、剛性率 $G$ はヤング率 $E$ とポアソン比 $\nu$ から一意に決まります。つまり、$G$ は独立な弾性定数ではありません。

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

直感的に言えば、引張変形とせん断変形は本質的に同じ原子間相互作用から生じるので、互いに独立ではないのです。この関係式の導出は後のセクションで詳しく行います。

鋼の場合、$E = 200$ GPa、$\nu = 0.3$ を代入すると $G = 200 / (2 \times 1.3) \approx 76.9$ GPa となり、実測値とよく一致します。

ここまでで、引張・圧縮(ヤング率)、横方向変形(ポアソン比)、せん断(剛性率)と3種類の弾性定数を学びました。あともう1つ、材料全体が均等に押し縮められる場合の弾性定数「体積弾性率」を紹介した後で、これら4つの弾性定数の間の関係を導出します。

体積弾性率 $K$ ー 均等圧縮に対する抵抗

直感的な理解

深海に沈んだ潜水艇を想像してください。水圧は全方向から均等に作用し、潜水艇を押し縮めようとします。このとき、材料はどの方向にも等しく圧縮されるため、体積が小さくなります。この「均等な圧力に対してどれだけ体積が変化するか」を表すのが体積弾性率 $K$ です。

体積弾性率の定義

体積弾性率は、等方圧力(静水圧)$p$ と体積ひずみ $\Delta V / V$ の比として定義されます。

$$ \begin{equation} p = -K\frac{\Delta V}{V} \end{equation} $$

マイナス符号は、圧力を加えると体積が減少($\Delta V < 0$)するため、$K$ を正の値にするための約束です。体積弾性率が大きい材料ほど、圧力を加えても体積が変化しにくい材料です。

水の体積弾性率は約 $2.2$ GPa です。これは、水深 $1000$ m(約 $100$ 気圧 $\approx 10$ MPa)でも体積は $0.5\%$ 程度しか減少しないことを意味します。鋼の体積弾性率は約 $167$ GPa と非常に大きく、ほとんど体積変化しません。

体積弾性率の逆数 $\kappa = 1/K$ を圧縮率と呼びます。圧縮率が大きい材料ほど、圧縮されやすい材料です。

ここまでで、等方性弾性体を特徴づける4つの弾性定数($E$, $\nu$, $G$, $K$)を全て紹介しました。注目すべきは、これら4つのうち独立なのは2つだけという点です。次のセクションで、弾性定数間の関係式を導出し、なぜ2つだけで全てが決まるのかを理解しましょう。

弾性定数間の関係式

なぜ独立な定数は2つだけなのか

等方性材料とは、どの方向にも同じ性質を示す材料です。このとき、材料の弾性的な応答を完全に記述するために必要な独立パラメータは、理論的にちょうど2つです。これは、等方性という対称条件が非常に強い制約を課すためです。

したがって、$E$, $\nu$, $G$, $K$ の4つの弾性定数のうち、どの2つを選んでも残りの2つは計算で求められます。以下では、主要な関係式を段階的に導出します。

剛性率 $G$ とヤング率 $E$、ポアソン比 $\nu$ の関係の導出

この関係式の導出には、純せん断状態を主応力に変換するというアイデアを使います。

まず、純せん断状態を考えます。$xy$ 平面にせん断応力 $\tau$ だけが作用している状態です。

$$ \sigma_{xx} = 0, \quad \sigma_{yy} = 0, \quad \tau_{xy} = \tau $$

この応力状態を45°回転した座標系(主応力方向)で見ると、主応力とモールの応力円の理論から、次の主応力が得られます。

$$ \sigma_1 = +\tau, \quad \sigma_2 = -\tau $$

つまり、純せん断は「45°方向の引張と圧縮の組み合わせ」と等価なのです。

次に、この主応力状態でのひずみをフックの法則(ポアソン効果を含む)で求めます。主応力方向の $\varepsilon_1$ は、

$$ \varepsilon_1 = \frac{\sigma_1}{E} – \nu\frac{\sigma_2}{E} $$

$\sigma_1 = \tau$、$\sigma_2 = -\tau$ を代入すると、

$$ \varepsilon_1 = \frac{\tau}{E} – \nu\frac{(-\tau)}{E} = \frac{\tau}{E}(1 + \nu) $$

一方、せん断ひずみ $\gamma$ と主ひずみ $\varepsilon_1$ の幾何学的な関係から、

$$ \gamma = 2\varepsilon_1 $$

が成り立ちます(モールのひずみ円から導かれる関係です)。したがって、

$$ \gamma = 2 \cdot \frac{\tau}{E}(1 + \nu) = \frac{2\tau(1 + \nu)}{E} $$

せん断のフックの法則 $\tau = G\gamma$ から $\gamma = \tau / G$ なので、上の式と比較すると、

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

両辺を $\tau$($\neq 0$)で割ると、

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

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

この導出の核心は、「せん断 = 45°回転した引張・圧縮」という座標変換にあります。等方性材料では引張とせん断が独立でないことが、この関係式として表現されているのです。

体積弾性率 $K$ とヤング率 $E$、ポアソン比 $\nu$ の関係の導出

等方的な圧力 $p$ が作用する状態を考えます。三方向に等しい圧縮応力が作用するので、

$$ \sigma_{xx} = \sigma_{yy} = \sigma_{zz} = -p $$

3次元のフックの法則(ポアソン効果を含む)から、$x$ 方向のひずみは、

$$ \varepsilon_{xx} = \frac{1}{E}\left[\sigma_{xx} – \nu(\sigma_{yy} + \sigma_{zz})\right] $$

3方向の応力が全て $-p$ に等しいので代入すると、

$$ \varepsilon_{xx} = \frac{1}{E}\left[-p – \nu(-p – p)\right] = \frac{1}{E}\left[-p + 2\nu p\right] = \frac{-p(1 – 2\nu)}{E} $$

等方性から $\varepsilon_{xx} = \varepsilon_{yy} = \varepsilon_{zz}$ なので、体積ひずみは、

$$ \frac{\Delta V}{V} = \varepsilon_{xx} + \varepsilon_{yy} + \varepsilon_{zz} = 3\varepsilon_{xx} = \frac{-3p(1 – 2\nu)}{E} $$

体積弾性率の定義 $p = -K(\Delta V / V)$ と比較すると、

$$ -K \cdot \frac{-3p(1 – 2\nu)}{E} = p $$

整理すると、

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

この式から重要なことがわかります。$\nu \to 0.5$ のとき $K \to \infty$、つまりポアソン比が $0.5$ に近い材料は体積変化にほぼ無限の抵抗を示します。これはまさに非圧縮性材料(ゴムなど)の性質と一致します。

$E$, $K$, $G$ の関係

上の2つの関係式から $\nu$ を消去すると、$E$ を $K$ と $G$ で表す関係式が得られます。

$G = E/(2(1+\nu))$ より $\nu = E/(2G) – 1$ を求め、これを $K = E/(3(1-2\nu))$ に代入します。

$1 – 2\nu = 1 – 2(E/(2G) – 1) = 3 – E/G$ を用いると、

$$ K = \frac{E}{3(3 – E/G)} = \frac{EG}{3(3G – E)} $$

$E$ について整理すると、

$$ \begin{equation} \boxed{E = \frac{9KG}{3K + G}} \end{equation} $$

この式は、ヤング率 $E$ が体積弾性率 $K$(体積変形に対する抵抗)と剛性率 $G$(形状変形に対する抵抗)の両方から決まることを示しています。

弾性定数の関係のまとめ

以下に、等方性材料の弾性定数間の主要な関係式をまとめます。

求めたい量 $E, \nu$ から $K, G$ から
$G$ $\dfrac{E}{2(1+\nu)}$
$K$ $\dfrac{E}{3(1-2\nu)}$
$E$ $\dfrac{9KG}{3K+G}$
$\nu$ $\dfrac{3K-2G}{2(3K+G)}$

このように、等方性弾性体の弾性定数は互いに密接に関連しています。では、これらの弾性定数を使って応力-ひずみ関係を3次元空間に拡張すると、どのような形になるのでしょうか。次のセクションでは、一般化フックの法則を導入します。

Pythonで弾性定数の関係を確認する

理論の確認を行う前に、まずは上で導出した弾性定数の関係式をPythonで計算し、代表的な材料について値を確認してみましょう。

import numpy as np

# --- 弾性定数の相互変換関数 ---
def elastic_constants(E, nu):
    """ヤング率とポアソン比から他の弾性定数を計算"""
    G = E / (2 * (1 + nu))           # 剛性率
    K = E / (3 * (1 - 2 * nu))       # 体積弾性率
    lam = E * nu / ((1 + nu) * (1 - 2 * nu))  # ラメの第1パラメータ
    return G, K, lam

# --- 代表的な材料 ---
materials = {
    '鋼':         {'E': 200.0, 'nu': 0.30},
    'アルミ合金':  {'E':  70.0, 'nu': 0.33},
    'チタン合金':  {'E': 110.0, 'nu': 0.34},
    '銅':         {'E': 120.0, 'nu': 0.34},
    'コンクリート': {'E':  30.0, 'nu': 0.20},
    'ガラス':      {'E':  70.0, 'nu': 0.22},
    'ゴム':        {'E':   0.01, 'nu': 0.49},
}

print(f"{'材料': <8s} {'E [GPa]':>10s} {'ν':>6s} {'G [GPa]':>10s} {'K [GPa]':>10s} {'λ [GPa]':>10s}")
print("-" * 62)

for name, props in materials.items():
    E, nu = props['E'], props['nu']
    G, K, lam = elastic_constants(E, nu)
    print(f"{name: <8s} {E:10.2f} {nu:6.2f} {G:10.2f} {K:10.2f} {lam:10.2f}")

# --- 検算: E = 9KG/(3K+G) の確認 ---
print("\n--- 検算: E = 9KG/(3K+G) ---")
for name, props in materials.items():
    E, nu = props['E'], props['nu']
    G, K, _ = elastic_constants(E, nu)
    E_check = 9 * K * G / (3 * K + G)
    print(f"{name}: E = {E:.2f} GPa,  9KG/(3K+G) = {E_check:.2f} GPa,  誤差 = {abs(E - E_check):.2e}")

このコードでは、各材料のヤング率 $E$ とポアソン比 $\nu$ から、剛性率 $G$、体積弾性率 $K$、ラメの第1パラメータ $\lambda$ を計算しています。さらに、検算として $E = 9KG/(3K+G)$ が元のヤング率と一致するかを確認しています。

出力結果を見ると、全ての材料で検算の誤差が浮動小数点の丸め誤差程度($10^{-14}$ 以下)に収まっていることがわかります。これは、導出した弾性定数間の関係式が数学的に整合していることの数値的な確認です。また、ゴムの体積弾性率 $K$ が約 $0.17$ GPa と非常に小さく見えますが、ヤング率 $E = 0.01$ GPa と比べると $K/E \approx 17$ と非常に大きな比を持っており、ゴムが「形は変わりやすいが体積は変わりにくい」非圧縮性に近い材料であることが数値的にも確認できます。

具体例:鋼の丸棒の引張

理論式の使い方を具体的な数値例で確認しましょう。

問題設定

直径 $d = 10$ mm、長さ $L = 1$ m の鋼の丸棒($E = 200$ GPa、$\nu = 0.3$)に、軸方向の引張力 $F = 10$ kN を加えます。このとき、棒の軸方向の伸び $\Delta L$、横方向の直径変化 $\Delta d$、および棒の体積変化を求めてみましょう。

断面積と応力の計算

まず、円形断面の面積を求めます。

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

応力は力を断面積で割って、

$$ \sigma = \frac{F}{A} = \frac{10000}{7.854 \times 10^{-5}} = 127.3 \text{ MPa} $$

ひずみと伸びの計算

フックの法則 $\varepsilon = \sigma / E$ から、

$$ \varepsilon = \frac{127.3 \times 10^6}{200 \times 10^9} = 6.37 \times 10^{-4} $$

これは約 $0.064\%$ のひずみです。この程度のひずみは、鋼の降伏ひずみ(約 $0.1\% \sim 0.2\%$)よりも十分に小さいため、弾性域にあると判断できます。

伸びは、

$$ \Delta L = \varepsilon L = 6.37 \times 10^{-4} \times 1.0 = 0.637 \text{ mm} $$

横方向の収縮(ポアソン効果)

ポアソン比の定義から、横方向のひずみは、

$$ \varepsilon_{\text{横}} = -\nu \varepsilon = -0.3 \times 6.37 \times 10^{-4} = -1.91 \times 10^{-4} $$

直径の変化は、

$$ \Delta d = \varepsilon_{\text{横}} \cdot d = -1.91 \times 10^{-4} \times 10 = -1.91 \times 10^{-3} \text{ mm} $$

つまり、直径は約 $0.002$ mm 縮みます。$10$ mm の直径に対して $0.002$ mm の変化ですから、肉眼では到底見えない微小な変化です。しかし精密機械の設計や計測器の校正では、このレベルの変形も無視できません。

体積変化

体積ひずみは、

$$ \frac{\Delta V}{V} = \varepsilon_{xx} + \varepsilon_{yy} + \varepsilon_{zz} = \varepsilon(1 – 2\nu) = 6.37 \times 10^{-4} \times (1 – 0.6) = 2.55 \times 10^{-4} $$

棒が縦に伸びる一方で横に縮むため、体積変化はひずみそのものよりも小さくなります。ポアソン比が $0.5$ に近い材料ほど体積変化が小さく、$\nu = 0.5$(非圧縮性)なら体積は全く変化しません。

この具体例を通して、フックの法則とポアソン効果が実際の計算でどう使われるかを確認できました。次に、これらの計算をPythonで実装し、さらにポアソン効果の可視化も行いましょう。

Pythonで1次元応力-ひずみ関係とポアソン効果を可視化する

1次元の応力-ひずみ線図

まず、各種材料の応力-ひずみ関係(弾性域)を比較するグラフを描いてみましょう。ヤング率の違いがグラフの傾きとしてどのように現れるかを視覚的に確認します。

import numpy as np
import matplotlib.pyplot as plt

# 材料データ: (ヤング率 [GPa], ポアソン比, 降伏応力の目安 [MPa])
materials_1d = {
    '鋼 (E=200 GPa)':       (200.0, 0.30, 250),
    'チタン (E=110 GPa)':    (110.0, 0.34, 200),
    '銅 (E=120 GPa)':        (120.0, 0.34, 70),
    'アルミ (E=70 GPa)':     (70.0,  0.33, 100),
    'コンクリート (E=30 GPa)': (30.0, 0.20, 30),
}

fig, ax = plt.subplots(figsize=(9, 6))

for name, (E_gpa, nu, sy) in materials_1d.items():
    # 弾性域のひずみ範囲(降伏応力まで)
    eps_max = sy / (E_gpa * 1e3)  # MPa / MPa = 無次元
    eps = np.linspace(0, eps_max, 100)
    sigma = E_gpa * 1e3 * eps  # [MPa]
    ax.plot(eps * 1e3, sigma, linewidth=2.5, label=name)  # ひずみを‰表示

ax.set_xlabel('Strain [×10⁻³]', fontsize=13)
ax.set_ylabel('Stress [MPa]', fontsize=13)
ax.set_title('Stress-Strain Curves in Elastic Region', fontsize=14)
ax.legend(fontsize=11, loc='upper left')
ax.grid(True, alpha=0.3)
ax.set_xlim(0, None)
ax.set_ylim(0, None)
plt.tight_layout()
plt.show()

このグラフから、以下のことが読み取れます。

  1. 傾きが急な材料ほどヤング率が大きい: 鋼($E = 200$ GPa)の線が最も急な傾きを持ち、同じひずみに対して大きな応力を発生させます。これは、鋼が硬い材料であることのグラフ的な表現です。
  2. コンクリートは傾きが緩やかだが伸びも小さい: コンクリートはヤング率が低い($E = 30$ GPa)だけでなく、降伏応力も低いため、弾性域が狭いことがわかります。
  3. アルミと銅は傾きが近い: $E = 70$ GPa と $E = 120$ GPa で約2倍の差がありますが、降伏応力の違いにより弾性域の「範囲」も大きく異なります。

ポアソン効果の可視化

次に、棒を引っ張ったときに縦に伸び、横に縮む様子(ポアソン効果)をPythonで可視化してみましょう。矩形断面の棒を引張荷重で変形させた様子を、変形前と変形後で重ねて描きます。

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

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

# 異なるポアソン比での比較
cases = [
    ('鋼 (ν=0.30)', 0.30),
    ('ゴム (ν=0.49)', 0.49),
    ('コルク (ν≈0.0)', 0.00),
]

eps_axial = 0.15  # 可視化のため大きめのひずみ

for ax, (label, nu) in zip(axes, cases):
    eps_lateral = -nu * eps_axial

    # 変形前(灰色、破線)
    W0, H0 = 2.0, 4.0
    rect_before = patches.Rectangle(
        (-W0/2, -H0/2), W0, H0,
        linewidth=2, edgecolor='gray', facecolor='lightgray', alpha=0.5,
        linestyle='--', label='Before'
    )
    ax.add_patch(rect_before)

    # 変形後(色付き)
    W1 = W0 * (1 + eps_lateral)
    H1 = H0 * (1 + eps_axial)
    rect_after = patches.Rectangle(
        (-W1/2, -H1/2), W1, H1,
        linewidth=2, edgecolor='steelblue', facecolor='lightskyblue', alpha=0.6,
        label='After'
    )
    ax.add_patch(rect_after)

    # 矢印(引張力)
    ax.annotate('', xy=(0, H1/2 + 0.4), xytext=(0, H1/2),
                arrowprops=dict(arrowstyle='->', color='red', lw=2))
    ax.annotate('', xy=(0, -H1/2 - 0.4), xytext=(0, -H1/2),
                arrowprops=dict(arrowstyle='->', color='red', lw=2))

    ax.set_xlim(-2.0, 2.0)
    ax.set_ylim(-3.5, 3.5)
    ax.set_aspect('equal')
    ax.set_title(f'{label}\nε_lat = {eps_lateral:.3f}', fontsize=12)
    ax.legend(loc='lower right', fontsize=9)
    ax.grid(True, alpha=0.2)

plt.suptitle('Poisson Effect: Axial Tension', fontsize=14, y=1.02)
plt.tight_layout()
plt.show()

このグラフから、ポアソン比の値が材料の変形の仕方にどのような影響を与えるかが視覚的に理解できます。

  1. 鋼($\nu = 0.30$): 縦に伸びると横方向にやや縮みます。工業材料の典型的な挙動です。
  2. ゴム($\nu = 0.49$): 横方向の収縮が非常に大きく、体積がほぼ保存されていることが見て取れます。ゴムが非圧縮性に近い材料であることの視覚的な表現です。
  3. コルク($\nu \approx 0$): 横方向の変形がほとんどなく、縦にだけ伸びます。コルクは実際にワインの栓として使われますが、ポアソン比がほぼゼロであるため、瓶に挿入するときに横に膨らまず、容易に差し込めるという実用上の利点があります。

この可視化から、ポアソン比が材料選定において重要なパラメータであることが実感できるでしょう。次に、2次元の応力-ひずみ関係を扱い、3次元への一般化へと進んでいきます。

2次元の応力-ひずみ関係

なぜ2次元を考えるのか

実際の構造物では、1方向だけの力が加わることは稀です。たとえば、圧力容器の壁には内圧により周方向と軸方向の2方向に応力が作用します。航空機の外板にも、飛行中に複数方向の応力が同時に加わります。

このような場合、ポアソン効果を考慮した2次元(あるいは3次元)のフックの法則が必要になります。

平面応力状態のフックの法則

薄い板状の構造(板厚方向に応力がない状態)を平面応力状態と呼びます。この場合、$\sigma_{zz} = 0$ として、$x$-$y$ 平面内の応力-ひずみ関係は次のように書けます。

ひずみから応力を求める形(逆関係・コンプライアンス形式)は直感的に理解しやすいです。

$$ \varepsilon_{xx} = \frac{1}{E}(\sigma_{xx} – \nu\sigma_{yy}) $$

$$ \varepsilon_{yy} = \frac{1}{E}(\sigma_{yy} – \nu\sigma_{xx}) $$

$$ \gamma_{xy} = \frac{\tau_{xy}}{G} $$

1行目の意味を考えてみましょう。$x$ 方向のひずみ $\varepsilon_{xx}$ は、$x$ 方向の応力 $\sigma_{xx}$ による直接的な伸び $\sigma_{xx}/E$ から、$y$ 方向の応力 $\sigma_{yy}$ によるポアソン効果($y$ 方向に引っ張られると $x$ 方向が縮む)$\nu\sigma_{yy}/E$ を引いたものです。

これを行列形式で書くと、

$$ \begin{pmatrix} \varepsilon_{xx} \\ \varepsilon_{yy} \\ \gamma_{xy} \end{pmatrix} = \frac{1}{E} \begin{pmatrix} 1 & -\nu & 0 \\ -\nu & 1 & 0 \\ 0 & 0 & \frac{E}{G} \end{pmatrix} \begin{pmatrix} \sigma_{xx} \\ \sigma_{yy} \\ \tau_{xy} \end{pmatrix} $$

ここで $E/G = 2(1+\nu)$ を使えば、コンプライアンスマトリクスは $E$ と $\nu$ だけで記述できます。

逆に、ひずみから応力を求める形(スティフネス形式)は、

$$ \begin{pmatrix} \sigma_{xx} \\ \sigma_{yy} \\ \tau_{xy} \end{pmatrix} = \frac{E}{1-\nu^2} \begin{pmatrix} 1 & \nu & 0 \\ \nu & 1 & 0 \\ 0 & 0 & \frac{1-\nu}{2} \end{pmatrix} \begin{pmatrix} \varepsilon_{xx} \\ \varepsilon_{yy} \\ \gamma_{xy} \end{pmatrix} $$

平面応力と平面ひずみの記事で、平面応力と平面ひずみの違いについて詳しく解説しています。

ここまでで、1次元から2次元への拡張を行いました。この考え方をさらに推し進めて、3次元空間での完全な応力-ひずみ関係を定式化しましょう。

一般化フックの法則(3次元)

なぜテンソルが必要なのか

3次元空間では、応力とひずみはそれぞれ2階の対称テンソルとして表現されます。応力テンソル $\sigma_{ij}$ は6つの独立成分($\sigma_{xx}, \sigma_{yy}, \sigma_{zz}, \tau_{yz}, \tau_{xz}, \tau_{xy}$)を持ち、ひずみテンソル $\varepsilon_{ij}$ も同様に6つの独立成分を持ちます。

1次元のフックの法則 $\sigma = E\varepsilon$ では、応力とひずみが1つのスカラーで済みましたが、3次元では6つの応力成分と6つのひずみ成分を結びつける必要があります。これが「テンソル形式」の一般化フックの法則が必要となる理由です。

テンソル形式の一般化フックの法則

最も一般的な形は、応力テンソルとひずみテンソルを4階の弾性テンソルで結びつけます。

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

ここで $C_{ijkl}$ は弾性スティフネステンソル(4階テンソル)です。添字 $i, j, k, l$ はそれぞれ $1, 2, 3$ の値を取るので、成分は全部で $3^4 = 81$ 個あります。

しかし、応力テンソルの対称性 $\sigma_{ij} = \sigma_{ji}$、ひずみテンソルの対称性 $\varepsilon_{kl} = \varepsilon_{lk}$、およびエネルギーの対称性($C_{ijkl} = C_{klij}$)を考慮すると、独立な成分数は $81 \to 36 \to 21$ と減少します。

さらに、等方性材料(どの方向にも同じ性質を持つ材料)では、独立な弾性定数はわずか2つにまで減ります。異方性材料(複合材料や単結晶など)では独立な定数が増え、最大21個が必要になります。

等方性材料のフックの法則(ラメの定数を用いた表現)

等方性材料では、弾性テンソルが2つの定数 $\lambda$(ラメの第1パラメータ)と $\mu$(ラメの第2パラメータ、$= G$)だけで表現できます。

$$ \begin{equation} \sigma_{ij} = \lambda \, \varepsilon_{kk} \, \delta_{ij} + 2\mu \, \varepsilon_{ij} \end{equation} $$

ここで、$\varepsilon_{kk} = \varepsilon_{xx} + \varepsilon_{yy} + \varepsilon_{zz}$ は体積ひずみ(トレース)、$\delta_{ij}$ はクロネッカーのデルタ($i = j$ なら1、それ以外は0)です。

この式の構造を解釈しましょう。第1項 $\lambda \varepsilon_{kk} \delta_{ij}$ は、体積変化に比例した等方的な応力を表し、全ての垂直応力成分に等しく寄与します。第2項 $2\mu \varepsilon_{ij}$ は、各ひずみ成分に直接比例した応力を表します。このように、等方性材料の応力は「体積変化に対する応答」と「形状変化に対する応答」の重ね合わせとして表現されるのです。

ラメの定数と工学的弾性定数の関係は次の通りです。

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

ボイト記法(工学的記法)

テンソルの添字表記は理論的には美しいのですが、実際の計算では煩雑になることがあります。そこで、応力とひずみをそれぞれ6成分のベクトルとして表現し、弾性テンソルを $6 \times 6$ の行列として書き下すボイト記法(Voigt notation)が広く使われています。

スティフネス形式(ひずみ→応力)は、

$$ \begin{pmatrix} \sigma_{xx} \\ \sigma_{yy} \\ \sigma_{zz} \\ \tau_{yz} \\ \tau_{xz} \\ \tau_{xy} \end{pmatrix} = \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} \begin{pmatrix} \varepsilon_{xx} \\ \varepsilon_{yy} \\ \varepsilon_{zz} \\ \gamma_{yz} \\ \gamma_{xz} \\ \gamma_{xy} \end{pmatrix} $$

この行列の構造を観察してみましょう。左上の $3 \times 3$ ブロックは垂直応力と垂直ひずみの関係を表し、対角成分 $(1-\nu)$ と非対角成分 $\nu$ が現れています。右下の $3 \times 3$ ブロックはせん断応力とせん断ひずみの関係を表し、対角成分のみ $(1-2\nu)/2$ が現れます。左上と右下のブロックが完全に分離していることは、等方性材料では垂直応力がせん断ひずみを生じさせず、せん断応力が垂直ひずみを生じさせないことを意味しています。

コンプライアンス形式(応力→ひずみ)

実験では応力を測定してひずみを求めることが多いため、逆の関係(コンプライアンス形式)も重要です。

$$ \begin{pmatrix} \varepsilon_{xx} \\ \varepsilon_{yy} \\ \varepsilon_{zz} \\ \gamma_{yz} \\ \gamma_{xz} \\ \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_{xz} \\ \tau_{xy} \end{pmatrix} $$

コンプライアンスマトリクスの各成分の意味は明快です。たとえば、1行目を展開すると、

$$ \varepsilon_{xx} = \frac{1}{E}\left[\sigma_{xx} – \nu(\sigma_{yy} + \sigma_{zz})\right] $$

$x$ 方向のひずみは、$x$ 方向の応力 $\sigma_{xx}$ による直接の伸びから、$y$ 方向と $z$ 方向の応力によるポアソン効果を差し引いたものです。2次元の場合を3次元に自然に拡張した形であることが確認できます。

ここまでで、3次元のフックの法則の一般的な形式を導入しました。次に、この理論をPythonで実装し、2次元平面応力状態の応力-ひずみ関係を計算・可視化してみましょう。

Pythonで3次元フックの法則を実装する

スティフネスマトリクスとコンプライアンスマトリクスの構築

まず、等方性材料の弾性マトリクスをPythonで構築し、応力-ひずみ変換を行う関数を実装します。

import numpy as np

def stiffness_matrix_3d(E, nu):
    """等方性材料の3次元スティフネスマトリクス [6x6] を構築"""
    coeff = E / ((1 + nu) * (1 - 2 * nu))
    C = coeff * np.array([
        [1 - nu,  nu,      nu,      0,              0,              0             ],
        [nu,      1 - nu,  nu,      0,              0,              0             ],
        [nu,      nu,      1 - nu,  0,              0,              0             ],
        [0,       0,       0,       (1 - 2*nu) / 2, 0,              0             ],
        [0,       0,       0,       0,              (1 - 2*nu) / 2, 0             ],
        [0,       0,       0,       0,              0,              (1 - 2*nu) / 2],
    ])
    return C

def compliance_matrix_3d(E, nu):
    """等方性材料の3次元コンプライアンスマトリクス [6x6] を構築"""
    S = (1 / E) * np.array([
        [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) ],
    ])
    return S

# --- 鋼の例 ---
E_steel = 200e9   # Pa
nu_steel = 0.3

C = stiffness_matrix_3d(E_steel, nu_steel)
S = compliance_matrix_3d(E_steel, nu_steel)

# C と S が逆行列の関係にあるか確認
identity_check = C @ S
print("C × S (should be identity):")
print(np.round(identity_check, 10))

# --- 一軸引張のテスト ---
sigma_uniaxial = np.array([100e6, 0, 0, 0, 0, 0])  # σ_xx = 100 MPa
eps = S @ sigma_uniaxial

print(f"\n一軸引張 σ_xx = 100 MPa のひずみ:")
print(f"  ε_xx = {eps[0]:.6e}  (= σ/E = {100e6/E_steel:.6e})")
print(f"  ε_yy = {eps[1]:.6e}  (= -ν·σ/E = {-nu_steel*100e6/E_steel:.6e})")
print(f"  ε_zz = {eps[2]:.6e}")
print(f"  γ_yz = {eps[3]:.6e}, γ_xz = {eps[4]:.6e}, γ_xy = {eps[5]:.6e}")

このコードでは、3次元のスティフネスマトリクス $\bm{C}$ とコンプライアンスマトリクス $\bm{S}$ を構築し、2つのことを確認しています。

1つ目は $\bm{C} \times \bm{S} = \bm{I}$(単位行列)であること、すなわちスティフネスマトリクスとコンプライアンスマトリクスが逆行列の関係にあることです。2つ目は一軸引張($\sigma_{xx} = 100$ MPa、他は全てゼロ)のひずみが、手計算の結果 $\varepsilon_{xx} = \sigma/E$、$\varepsilon_{yy} = \varepsilon_{zz} = -\nu\sigma/E$ と一致することです。行列演算と個別の公式が同じ結果を与えることで、実装の正しさが検証されます。

2次元平面応力状態の応力場の可視化

次に、2軸応力状態のひずみ場をポアソン比を変えて比較し、ポアソン比が応力-ひずみ関係にどのような影響を与えるかを可視化します。

import numpy as np
import matplotlib.pyplot as plt

def plane_stress_strain(sigma_xx, sigma_yy, tau_xy, E, nu):
    """平面応力状態でのひずみを計算"""
    eps_xx = (sigma_xx - nu * sigma_yy) / E
    eps_yy = (sigma_yy - nu * sigma_xx) / E
    gamma_xy = tau_xy / (E / (2 * (1 + nu)))
    eps_zz = -nu * (sigma_xx + sigma_yy) / E  # 板厚方向ひずみ
    return eps_xx, eps_yy, gamma_xy, eps_zz

# 二軸応力 (σ_xx = 100 MPa, σ_yy = 50 MPa) でポアソン比を変化
E = 200e9  # Pa
sigma_xx = 100e6  # Pa
sigma_yy = 50e6   # Pa
tau_xy = 0

nu_range = np.linspace(0.0, 0.49, 100)

eps_xx_list = []
eps_yy_list = []
eps_zz_list = []
vol_strain_list = []

for nu in nu_range:
    exx, eyy, gxy, ezz = plane_stress_strain(sigma_xx, sigma_yy, tau_xy, E, nu)
    eps_xx_list.append(exx)
    eps_yy_list.append(eyy)
    eps_zz_list.append(ezz)
    vol_strain_list.append(exx + eyy + ezz)

fig, axes = plt.subplots(1, 2, figsize=(14, 5))

# 左: 各方向のひずみ
axes[0].plot(nu_range, np.array(eps_xx_list) * 1e6, 'b-', linewidth=2, label=r'$\varepsilon_{xx}$')
axes[0].plot(nu_range, np.array(eps_yy_list) * 1e6, 'r-', linewidth=2, label=r'$\varepsilon_{yy}$')
axes[0].plot(nu_range, np.array(eps_zz_list) * 1e6, 'g--', linewidth=2, label=r'$\varepsilon_{zz}$ (thickness)')
axes[0].set_xlabel('Poisson\'s ratio ν', fontsize=13)
axes[0].set_ylabel('Strain [×10⁻⁶]', fontsize=13)
axes[0].set_title('Strain Components vs Poisson\'s Ratio\n(σ_xx=100 MPa, σ_yy=50 MPa)', fontsize=12)
axes[0].legend(fontsize=12)
axes[0].grid(True, alpha=0.3)

# 右: 体積ひずみ
axes[1].plot(nu_range, np.array(vol_strain_list) * 1e6, 'k-', linewidth=2.5)
axes[1].set_xlabel('Poisson\'s ratio ν', fontsize=13)
axes[1].set_ylabel('Volumetric Strain [×10⁻⁶]', fontsize=13)
axes[1].set_title('Volumetric Strain vs Poisson\'s Ratio', fontsize=12)
axes[1].grid(True, alpha=0.3)
axes[1].axhline(y=0, color='gray', linestyle=':', alpha=0.5)

plt.tight_layout()
plt.show()

このグラフから次のことが読み取れます。

  1. $\varepsilon_{xx}$(青)はポアソン比が大きくなるほど減少する: $y$ 方向の応力 $\sigma_{yy}$ によるポアソン効果が強くなり、$x$ 方向の伸びが相殺されるためです。ポアソン比がゼロなら、$\varepsilon_{xx} = \sigma_{xx}/E$ で他の応力成分の影響を受けません。
  2. $\varepsilon_{zz}$(緑破線)は常に負で、ポアソン比が大きいほど大きく縮む: 板厚方向のひずみ $\varepsilon_{zz} = -\nu(\sigma_{xx} + \sigma_{yy})/E$ は、二軸引張のポアソン効果で板が薄くなることを表しています。
  3. 体積ひずみ(右図)はポアソン比の増加とともに単調に減少する: $\nu \to 0.5$ で体積ひずみがゼロに近づき、非圧縮性材料の特性と一致しています。

各種材料のヤング率比較

材料選定の指標としてのヤング率

構造設計では、材料のヤング率を比較して適切な材料を選定します。以下に、工学で頻繁に使用される材料のヤング率とポアソン比、密度をまとめます。

材料 ヤング率 $E$ [GPa] ポアソン比 $\nu$ 密度 $\rho$ [kg/m$^3$] 比剛性 $E/\rho$ [MNm/kg]
ダイヤモンド 1050 0.10 3510 299
タングステン 400 0.28 19300 21
200 0.30 7850 25
チタン合金 110 0.34 4500 24
120 0.34 8960 13
アルミニウム合金 70 0.33 2700 26
ガラス 70 0.22 2500 28
コンクリート 30 0.20 2400 13
木材(繊維方向) 10-15 0.30 500 20-30
ポリエチレン 0.8 0.42 950 0.8
ゴム 0.01 0.49 1100 0.009

比剛性:軽くて硬い材料

表の最右列の比剛性 $E/\rho$(ヤング率を密度で割った値)は、「単位質量あたりの硬さ」を表す重要な指標です。航空宇宙分野では機体の軽量化が最重要課題であるため、比剛性の高い材料が好まれます。

注目すべきは、鋼($E/\rho \approx 25$)、チタン合金($\approx 24$)、アルミ合金($\approx 26$)の比剛性がほぼ同じ値になっていることです。つまり「同じ剛性を持つ構造体を作る」という条件では、鋼でもアルミでも重量はあまり変わりません。これは材料選定が単純にヤング率だけでは決まらないことを示しており、強度・疲労特性・コスト・加工性なども総合的に判断する必要があります。

CFRP(炭素繊維強化プラスチック)などの先進複合材料は比剛性が $100$ を超えることもあり、航空宇宙構造に広く使われる理由がここにあります。ただし、CFRPは異方性材料であるため、等方性を仮定したフックの法則をそのまま適用することはできず、より一般的な構成則が必要になります。

次のセクションで、各材料のヤング率と剛性率をPythonで棒グラフとして可視化し、材料間の違いを直感的に比較してみましょう。

Pythonで材料比較の可視化

import numpy as np
import matplotlib.pyplot as plt

# 材料データ
materials = {
    'Diamond':    (1050, 0.10, 3510),
    'Tungsten':   (400,  0.28, 19300),
    'Steel':      (200,  0.30, 7850),
    'Titanium':   (110,  0.34, 4500),
    'Copper':     (120,  0.34, 8960),
    'Aluminum':   (70,   0.33, 2700),
    'Glass':      (70,   0.22, 2500),
    'Concrete':   (30,   0.20, 2400),
    'PE':         (0.8,  0.42, 950),
}

names = list(materials.keys())
E_vals = np.array([v[0] for v in materials.values()])
nu_vals = np.array([v[1] for v in materials.values()])
rho_vals = np.array([v[2] for v in materials.values()])
G_vals = E_vals / (2 * (1 + nu_vals))
specific_E = E_vals * 1e3 / rho_vals  # [kNm/kg]

fig, axes = plt.subplots(2, 2, figsize=(14, 10))
x = np.arange(len(names))

# (1) ヤング率
axes[0, 0].bar(x, E_vals, color='steelblue', alpha=0.85)
axes[0, 0].set_xticks(x)
axes[0, 0].set_xticklabels(names, rotation=45, ha='right', fontsize=10)
axes[0, 0].set_ylabel("Young's Modulus E [GPa]", fontsize=11)
axes[0, 0].set_title("Young's Modulus Comparison", fontsize=13)
axes[0, 0].grid(True, alpha=0.3, axis='y')

# (2) ポアソン比
axes[0, 1].bar(x, nu_vals, color='coral', alpha=0.85)
axes[0, 1].set_xticks(x)
axes[0, 1].set_xticklabels(names, rotation=45, ha='right', fontsize=10)
axes[0, 1].set_ylabel("Poisson's Ratio ν", fontsize=11)
axes[0, 1].set_title("Poisson's Ratio Comparison", fontsize=13)
axes[0, 1].set_ylim(0, 0.55)
axes[0, 1].grid(True, alpha=0.3, axis='y')

# (3) 剛性率
axes[1, 0].bar(x, G_vals, color='seagreen', alpha=0.85)
axes[1, 0].set_xticks(x)
axes[1, 0].set_xticklabels(names, rotation=45, ha='right', fontsize=10)
axes[1, 0].set_ylabel("Shear Modulus G [GPa]", fontsize=11)
axes[1, 0].set_title("Shear Modulus Comparison", fontsize=13)
axes[1, 0].grid(True, alpha=0.3, axis='y')

# (4) 比剛性
axes[1, 1].bar(x, specific_E, color='orchid', alpha=0.85)
axes[1, 1].set_xticks(x)
axes[1, 1].set_xticklabels(names, rotation=45, ha='right', fontsize=10)
axes[1, 1].set_ylabel("Specific Stiffness E/ρ [kNm/kg]", fontsize=11)
axes[1, 1].set_title("Specific Stiffness Comparison", fontsize=13)
axes[1, 1].grid(True, alpha=0.3, axis='y')

plt.tight_layout()
plt.show()

4つのグラフから、以下の重要な知見が読み取れます。

  1. ヤング率(左上): ダイヤモンドが圧倒的に硬く、タングステンがそれに次ぎます。金属材料の中では鋼が最も硬い部類に入り、アルミニウムやガラスはその約3分の1です。ポリエチレン(PE)はグラフ上でほぼ見えないほど小さく、プラスチック類と金属の間に桁違いの差があることが一目でわかります。
  2. ポアソン比(右上): ダイヤモンドの $\nu = 0.10$ が突出して低く、共有結合の結晶構造に起因します。金属類は $0.28 \sim 0.34$ の狭い範囲に集中しており、ポリエチレンの $\nu = 0.42$ は非圧縮性($0.5$)に近いことがわかります。
  3. 剛性率(左下): ヤング率とほぼ同じ傾向を示しますが、$G = E/(2(1+\nu))$ の関係からポアソン比の影響を受けるため、完全には比例しません。
  4. 比剛性(右下): ダイヤモンドの比剛性が極めて高いことが際立ちますが、鋼・チタン・アルミはほぼ同等の比剛性を持つことが数値的にも確認できます。ガラスの比剛性が金属に匹敵する高さである点も注目に値します。

熱応力とフックの法則

温度変化による応力

ここまでは機械的な荷重(力)による変形だけを扱ってきましたが、材料には温度変化による変形もあります。温度が上がると材料は膨張し、温度が下がると収縮します。自由に膨張できれば応力は生じませんが、変形が拘束されている場合には熱応力が発生します。

たとえば、橋のレールが両端で固定されている場合、夏場の温度上昇で膨張しようとするレールは伸びることができず、内部に圧縮応力が発生します。この熱応力を計算する際にも、フックの法則が基礎となります。

温度変化 $\Delta T$ を考慮した1次元フックの法則は、

$$ \sigma = E(\varepsilon – \alpha \Delta T) $$

ここで $\alpha$ は線膨張係数 [1/K] です。全ひずみ $\varepsilon$ から熱ひずみ $\alpha \Delta T$ を引いた弾性ひずみの部分にヤング率をかけたものが応力です。

3次元では、

$$ \sigma_{ij} = \lambda \varepsilon_{kk} \delta_{ij} + 2\mu \varepsilon_{ij} – (3\lambda + 2\mu)\alpha \Delta T \, \delta_{ij} $$

と一般化されます。$(3\lambda + 2\mu)\alpha = E\alpha/(1-2\nu)$ は熱応力係数と呼ばれます。

両端固定の棒の場合、$\varepsilon = 0$(伸びが拘束されている)なので、

$$ \sigma = -E\alpha \Delta T $$

となります。温度が上昇($\Delta T > 0$)すると圧縮応力($\sigma < 0$)が、温度が下降($\Delta T < 0$)すると引張応力($\sigma > 0$)が発生します。熱応力の詳しい解説は熱応力を参照してください。

バネ-質量系の振動とフックの法則

フックの法則は材料力学だけでなく、振動・波動の理論とも深く結びついています。質量 $m$ の物体がバネ定数 $k$ のバネに接続されているバネ-質量系では、ニュートンの運動方程式にフックの法則を適用すると、

$$ m\ddot{x} = -kx $$

という単振動の運動方程式が得られます。固有角振動数は $\omega_n = \sqrt{k/m}$ であり、これは構造物の固有振動解析の基礎となります。

材料力学の文脈では、棒の軸方向振動の固有振動数は、

$$ f_n = \frac{n}{2L}\sqrt{\frac{E}{\rho}} $$

で与えられます。ここで $\rho$ は材料の密度です。ヤング率 $E$ が弾性波の伝播速度 $c = \sqrt{E/\rho}$ を決定し、振動特性を支配していることがわかります。このように、フックの法則は静的な問題だけでなく、動的な問題の出発点でもあるのです。

フックの法則の適用限界

弾性域と塑性域の境界

フックの法則が成り立つのは弾性域に限られます。応力が降伏応力 $\sigma_Y$ を超えると、材料は塑性変形を起こし、応力とひずみの線形関係は成り立たなくなります。応力-ひずみ曲線を参照すると、弾性域から塑性域への遷移が視覚的に理解できます。

降伏応力の目安は、軟鋼で約 $250$ MPa、アルミニウム合金で約 $100 \sim 300$ MPa(合金の種類による)、チタン合金で約 $800 \sim 1000$ MPa です。

等方性の仮定

本記事で扱ったフックの法則は等方性材料を仮定しています。木材や複合材料(CFRP, GFRP)のように繊維方向と垂直方向で性質が異なる異方性材料では、より多くの独立な弾性定数が必要です。

  • 直交異方性材料(木材、積層複合材料): 独立な弾性定数は 9 個
  • 横等方性材料(一方向CFRP): 独立な弾性定数は 5 個
  • 完全異方性材料(三斜晶系の単結晶): 独立な弾性定数は 21 個

線形弾性の仮定

フックの法則は応力とひずみが線形関係にあることを仮定していますが、ゴムのような大変形する材料では、応力-ひずみ関係は非線形になります。このような場合には、ネオフッキアン模型やムーニー・リブリン模型といった非線形弾性の構成則が使われます。

また、粘弾性材料(プラスチックなど)では、変形速度(ひずみ速度)にも応力が依存するため、フックの法則だけでは記述できず、マクスウェルモデルやフォークトモデルなどの粘弾性モデルが必要になります。

これらの限界を理解した上でフックの法則を使うことが、材料力学を正しく応用するための第一歩です。

Pythonで弾性域判定と応力-ひずみ曲線を描く

最後に、フックの法則による弾性域と、弾性限界を超えた場合の簡易的な弾塑性モデルをPythonで実装し、両者の違いを可視化してみましょう。

import numpy as np
import matplotlib.pyplot as plt

def stress_elastic(eps, E):
    """フックの法則(線形弾性)"""
    return E * eps

def stress_elastoplastic(eps, E, sigma_y, E_t):
    """弾完全塑性 + 線形硬化モデル"""
    eps_y = sigma_y / E
    sigma = np.where(
        eps <= eps_y,
        E * eps,
        sigma_y + E_t * (eps - eps_y)
    )
    return sigma

# パラメータ(鋼を想定)
E = 200e3       # [MPa]
sigma_y = 250   # [MPa](降伏応力)
E_t = 2e3       # [MPa](接線弾性率、硬化勾配)

eps = np.linspace(0, 0.01, 500)

sigma_linear = stress_elastic(eps, E)
sigma_ep = stress_elastoplastic(eps, E, sigma_y, E_t)

fig, ax = plt.subplots(figsize=(9, 6))

ax.plot(eps * 100, sigma_linear, 'b--', linewidth=2, alpha=0.7,
        label="Hooke's law (linear elastic)")
ax.plot(eps * 100, sigma_ep, 'r-', linewidth=2.5,
        label='Bilinear elastoplastic model')

# 降伏点マーカー
eps_y = sigma_y / E
ax.plot(eps_y * 100, sigma_y, 'ko', markersize=10, zorder=5)
ax.annotate(f'Yield point\n(ε={eps_y*100:.3f}%, σ={sigma_y} MPa)',
            xy=(eps_y * 100, sigma_y),
            xytext=(eps_y * 100 + 0.15, sigma_y - 50),
            fontsize=11, arrowprops=dict(arrowstyle='->', color='black'))

# 弾性域を色で塗る
ax.axvspan(0, eps_y * 100, color='lightblue', alpha=0.3, label='Elastic region')

ax.set_xlabel('Strain [%]', fontsize=13)
ax.set_ylabel('Stress [MPa]', fontsize=13)
ax.set_title('Hooke\'s Law vs Elastoplastic Model (Steel)', fontsize=14)
ax.legend(fontsize=11, loc='lower right')
ax.grid(True, alpha=0.3)
ax.set_xlim(0, 1.0)
ax.set_ylim(0, 350)
plt.tight_layout()
plt.show()

このグラフから、フックの法則の適用範囲と限界が明確に理解できます。

  1. 弾性域(水色の領域): ひずみが降伏ひずみ $\varepsilon_Y \approx 0.125\%$ 以下の範囲では、フックの法則(青破線)と弾塑性モデル(赤実線)が完全に一致しています。この範囲では応力-ひずみ関係が線形であり、荷重を取り除けば変形が完全に回復します。
  2. 塑性域: 降伏点を超えると、フックの法則はそのまま直線を延長してしまい、現実を反映しません。実際の材料は降伏後に硬化(接線弾性率 $E_t \ll E$)しながら塑性変形していきます。
  3. 降伏ひずみの小ささ: 鋼の降伏ひずみは約 $0.1\%$ と非常に小さく、弾性域は応力-ひずみ曲線のごく初期の部分に限られることがグラフから読み取れます。フックの法則は「小さな変形」を扱う法則であることが視覚的にも確認できます。

まとめ

本記事では、フックの法則を1次元のバネの法則から3次元のテンソル形式まで、段階的に解説しました。

  • 1次元フックの法則 $\sigma = E\varepsilon$: 弾性域における応力とひずみの線形関係であり、材料力学の全ての計算の出発点です
  • ヤング率 $E$: 材料の「硬さ」を表す指標で、応力-ひずみ曲線の弾性域の傾きに対応します
  • ポアソン比 $\nu$: 引張方向に対する横方向収縮の比であり、等方性材料では $0 \leq \nu \leq 0.5$ の範囲に制限されます
  • 剛性率 $G$: せん断変形に対する抵抗で、$G = E/(2(1+\nu))$ によりヤング率とポアソン比から決まります
  • 体積弾性率 $K$: 等方的な圧縮に対する抵抗で、$K = E/(3(1-2\nu))$ で求まります
  • 等方性材料の独立な弾性定数は2つだけ: $E$ と $\nu$ を決めれば、$G$, $K$, $\lambda$, $\mu$ の全てが計算できます
  • 一般化フックの法則: $\sigma_{ij} = \lambda\varepsilon_{kk}\delta_{ij} + 2\mu\varepsilon_{ij}$ で3次元の応力-ひずみ関係を記述します
  • 適用限界: フックの法則は弾性域・等方性・線形性を仮定しており、塑性変形・異方性材料・大変形には拡張が必要です

フックの法則を基礎として、曲げ応力と断面二次モーメントでは梁の曲げ変形へと展開し、主応力とモールの応力円では多軸応力状態の解析に進むことができます。また、熱応力ではフックの法則に温度の効果を組み込む方法を学びます。

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