軸力と棒の伸び

軸力(axial force) を受ける棒の変形は、材料力学で最も基本的な問題の一つです。フックの法則と力のつり合いから、棒の伸び $\delta = PL / AE$ という簡明な公式が導かれます。

この公式は、トラス構造の解析や機械部品の強度計算の基礎として幅広く用いられます。本記事では、一様断面の棒から断面変化のある棒、さらに不静定問題まで段階的に解説します。

本記事の内容

  • 軸力と棒の伸びの基本公式 $\delta = PL / AE$
  • 断面積が変化する棒の変形
  • 不静定問題の解法
  • 温度変化を含む問題
  • Pythonでの計算と可視化

前提知識

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

一様断面の棒の伸び

導出

長さ $L$、断面積 $A$、ヤング率 $E$ の一様断面の棒に軸力 $P$ が作用する場合を考えます。

ステップ1: 応力の計算

$$ \sigma = \frac{P}{A} $$

ステップ2: フックの法則からひずみを求める

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

ステップ3: ひずみの定義から伸びを求める

$$ \varepsilon = \frac{\delta}{L} \implies \delta = \varepsilon L $$

$$ \boxed{\delta = \frac{PL}{AE}} $$

この式は軸力-伸びの関係と呼ばれ、材料力学の最も基本的な公式です。分母の $AE$ は軸剛性(axial rigidity) と呼ばれます。

具体例

直径 $d = 20$ mm、長さ $L = 2$ m のステンレス鋼棒($E = 200$ GPa)に引張力 $P = 50$ kN が作用するとき:

$$ A = \frac{\pi \times 0.02^2}{4} = 3.142 \times 10^{-4} \, \text{m}^2 $$

$$ \delta = \frac{50 \times 10^3 \times 2}{3.142 \times 10^{-4} \times 200 \times 10^9} = 1.59 \times 10^{-3} \, \text{m} = 1.59 \, \text{mm} $$

断面積が変化する棒

断面積が位置 $x$ の関数 $A(x)$ で変化する場合、微小要素 $dx$ の伸びは:

$$ d\delta = \frac{P \, dx}{A(x) \, E} $$

全体の伸びは積分で求めます:

$$ \boxed{\delta = \int_0^L \frac{P}{A(x) E} \, dx} $$

例: テーパー棒

断面積が $A(x) = A_1 + (A_2 – A_1)\frac{x}{L}$($A_1$ から $A_2$ へ線形に変化)の場合:

$$ \delta = \frac{P}{E} \int_0^L \frac{dx}{A_1 + (A_2 – A_1)\frac{x}{L}} $$

$u = A_1 + (A_2 – A_1)\frac{x}{L}$ と置換すると $du = \frac{A_2 – A_1}{L}dx$ より:

$$ \delta = \frac{PL}{E(A_2 – A_1)} \int_{A_1}^{A_2} \frac{du}{u} = \frac{PL}{E(A_2 – A_1)} \ln\frac{A_2}{A_1} $$

$$ \boxed{\delta = \frac{PL}{E(A_2 – A_1)} \ln\frac{A_2}{A_1}} $$

$A_1 = A_2 = A$ のとき、ロピタルの定理から $\delta = PL/AE$ に帰着します。

複数区間の棒

棒が複数の区間に分かれ、各区間 $i$ で断面積 $A_i$、長さ $L_i$、軸力 $P_i$ が異なる場合:

$$ \boxed{\delta = \sum_{i=1}^{n} \frac{P_i L_i}{A_i E_i}} $$

各区間の軸力 $P_i$ は力のつり合いから決定します。

不静定問題

静定と不静定

静定問題: つり合い方程式だけで内力が決定できる問題。

不静定問題: つり合い方程式だけでは内力が決定できず、適合条件(変形の幾何学的条件) が追加で必要な問題。

例: 両端固定の棒

両端が壁に固定された棒に軸力 $P$ が途中の点に作用する場合を考えます。棒の左側の長さを $a$、右側を $b$($a + b = L$)とし、左端の反力を $R_A$、右端の反力を $R_B$ とします。

つり合い方程式(1個):

$$ R_A + R_B = P \tag{1} $$

未知数が2つ($R_A, R_B$)で方程式が1つなので、不静定です。

適合条件(全体の伸びがゼロ):

$$ \delta = \frac{R_A \cdot a}{AE} – \frac{R_B \cdot b}{AE} = 0 \tag{2} $$

式 (1) と (2) を連立して:

$$ R_A = \frac{Pb}{L}, \quad R_B = \frac{Pa}{L} $$

温度変化を含む問題

自由膨張のとき、温度変化 $\Delta T$ による伸びは:

$$ \delta_T = \alpha \Delta T \cdot L $$

ここで、$\alpha$ は線膨張係数 [1/K] です。

両端が固定されている場合は自由膨張が拘束されるため、熱応力 が発生します(詳細は次の記事で解説します)。

Pythonでの実装

import numpy as np
import matplotlib.pyplot as plt

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

# (1) 一様断面棒の伸び: δ vs P
E = 200e9    # ヤング率 [Pa]
d = 0.02     # 直径 [m]
L = 2.0      # 長さ [m]
A = np.pi * d**2 / 4

P_range = np.linspace(0, 100e3, 100)  # [N]
delta_range = P_range * L / (A * E) * 1e3  # [mm]

axes[0].plot(P_range / 1e3, delta_range, 'b-', linewidth=2.5)
axes[0].set_xlabel('Axial Force P [kN]')
axes[0].set_ylabel('Elongation $\\delta$ [mm]')
axes[0].set_title(f'Uniform Bar (d={d*1e3:.0f}mm, L={L:.0f}m, E={E/1e9:.0f}GPa)')
axes[0].grid(True, alpha=0.3)

# (2) テーパー棒の伸びの比較
A1_val = 500e-6   # 始端断面積 [m^2]
P_val = 50e3       # 軸力 [N]
L_val = 1.0        # 長さ [m]

ratios = np.linspace(0.3, 3.0, 100)  # A2/A1
delta_taper = np.zeros_like(ratios)
for i, r in enumerate(ratios):
    A2_val = A1_val * r
    if abs(r - 1.0) < 1e-10:
        delta_taper[i] = P_val * L_val / (A1_val * E)
    else:
        delta_taper[i] = P_val * L_val / (E * (A2_val - A1_val)) * np.log(r)

delta_uniform = P_val * L_val / (A1_val * E)

axes[1].plot(ratios, delta_taper * 1e3, 'b-', linewidth=2.5, label='Tapered bar')
axes[1].axhline(delta_uniform * 1e3, color='r', linestyle='--',
               linewidth=1.5, label='Uniform bar ($A=A_1$)')
axes[1].set_xlabel('Area Ratio $A_2 / A_1$')
axes[1].set_ylabel('Elongation $\\delta$ [mm]')
axes[1].set_title('Tapered vs Uniform Bar')
axes[1].legend()
axes[1].grid(True, alpha=0.3)

# (3) 不静定問題: 両端固定棒の反力
L_total = 1.0  # 全長 [m]
P_applied = 80e3  # 作用力 [N]
a_values = np.linspace(0.01, 0.99, 100) * L_total
b_values = L_total - a_values

R_A = P_applied * b_values / L_total
R_B = P_applied * a_values / L_total

axes[2].plot(a_values / L_total, R_A / 1e3, 'b-', linewidth=2.5, label='$R_A = Pb/L$')
axes[2].plot(a_values / L_total, R_B / 1e3, 'r--', linewidth=2.5, label='$R_B = Pa/L$')
axes[2].axhline(P_applied / 1e3, color='gray', linestyle=':', alpha=0.5,
               label=f'P = {P_applied/1e3:.0f} kN')
axes[2].set_xlabel('Position $a/L$')
axes[2].set_ylabel('Reaction Force [kN]')
axes[2].set_title('Indeterminate Bar: Reactions')
axes[2].legend()
axes[2].grid(True, alpha=0.3)

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

まとめ

本記事では、軸力を受ける棒の伸びについて解説しました。

  • 一様断面の棒の伸び: $\delta = PL / AE$
  • 断面積が変化する棒: $\delta = \int_0^L P / (A(x)E) \, dx$
  • テーパー棒: $\delta = \frac{PL}{E(A_2 – A_1)}\ln\frac{A_2}{A_1}$
  • 不静定問題ではつり合い方程式に加えて適合条件(変形の幾何学的条件)が必要
  • 温度変化による自由膨張は $\delta_T = \alpha \Delta T L$

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