静水力学(hydrostatics)は、静止した流体中における圧力分布と力の釣り合いを扱う分野です。日常的な水圧の計算からダムの設計、潜水艦の浮沈制御まで、幅広い工学問題の基礎となります。
本記事では、圧力の定義から出発し、パスカルの原理、静水圧の導出、浮力とアルキメデスの原理を数式で丁寧に導出し、Pythonで計算例を確認します。
本記事の内容
- 圧力の定義
- パスカルの原理
- 静水圧の深さ依存性
- 浮力とアルキメデスの原理
- 浮沈の条件
- Pythonでの計算と可視化
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
圧力の定義
スカラー量としての圧力
圧力 $p$ は、単位面積あたりに作用する力として定義されます。
$$ p = \frac{F}{A} $$
ここで $F$ は面に垂直に作用する力 [N]、$A$ は面積 [m$^2$] です。圧力の単位は Pa(パスカル)= N/m$^2$ です。
重要な点は、静止流体中の圧力はスカラー量 であるということです。つまり、ある点における圧力は向きに依存しません。これは次節のパスカルの原理から導かれます。
パスカルの原理
圧力の等方性
静止流体中の任意の点において、圧力は すべての方向で等しい です。これを パスカルの原理 と呼びます。
この性質を示すために、静止流体中に微小な三角形の要素を考えます。厚さを $\delta z$ とし、三角形の底辺を $\delta x$、高さを $\delta y$、斜辺を $\delta s$ とします。各面に作用する圧力を $p_x$, $p_y$, $p_s$ とします。
$x$ 方向の力の釣り合いから、
$$ p_x \delta y \delta z – p_s \delta s \delta z \sin\theta = 0 $$
幾何学的関係 $\delta y = \delta s \sin\theta$ を使うと、
$$ p_x \delta y \delta z – p_s \delta y \delta z = 0 $$
$$ \therefore p_x = p_s $$
$y$ 方向の力の釣り合い(微小要素の重力は2次の微小量として無視)から同様に $p_y = p_s$ が得られるため、
$$ \boxed{p_x = p_y = p_s = p} $$
すなわち、静止流体中のある点における圧力は方向によらず一定です。
密閉容器への応用
パスカルの原理の工学的な応用として、密閉容器に加えた圧力は流体全体に等しく伝わる という性質があります。
油圧ジャッキを考えます。小さなピストン(面積 $A_1$)に力 $F_1$ を加えると、流体中の圧力変化は $\Delta p = F_1 / A_1$ です。この圧力変化が大きなピストン(面積 $A_2$)に伝わり、
$$ F_2 = \Delta p \cdot A_2 = F_1 \frac{A_2}{A_1} $$
面積比 $A_2 / A_1$ だけ力が増幅されます。
静水圧の深さ依存性
導出
重力場中の静止流体を考えます。鉛直方向を $z$ 軸(上向き正)とし、微小な流体要素(断面積 $A$、高さ $dz$)に対する力の釣り合いを考えます。
流体要素の下面に作用する圧力を $p$、上面に作用する圧力を $p + dp$ とすると、鉛直方向の力の釣り合いから、
$$ pA – (p + dp)A – \rho g A \, dz = 0 $$
整理すると、
$$ \boxed{\frac{dp}{dz} = -\rho g} $$
これが 静水圧の基本式 です。圧力は深さとともに増加します。
非圧縮性流体の場合
密度 $\rho$ が一定(非圧縮性)の場合、上式を水面($z = 0$, $p = p_0$)から深さ $h$($z = -h$)まで積分します。
$$ \int_{p_0}^{p} dp = -\rho g \int_0^{-h} dz = \rho g h $$
$$ \boxed{p = p_0 + \rho g h} $$
ここで $p_0$ は水面での圧力(大気圧)、$h$ は水面からの深さです。
ゲージ圧と絶対圧
大気圧 $p_0$ を基準にした圧力を ゲージ圧 $p_g$ と呼びます。
$$ p_g = p – p_0 = \rho g h $$
大気圧を含む全圧力を 絶対圧 と呼びます。
浮力とアルキメデスの原理
浮力の導出
静止流体中に沈められた物体に作用する浮力を導出します。物体表面の各微小面に作用する圧力は $p = p_0 + \rho g h$ です。物体の上面と下面での圧力差が浮力を生じます。
簡単のため、底面積 $A$、高さ $H$ の直方体が深さ $h_1$(上面)から $h_2 = h_1 + H$(下面)に沈んでいる場合を考えます。
下面に作用する上向きの力は $p_0 + \rho g h_2$ に面積 $A$ を掛けたもの、上面に作用する下向きの力は $p_0 + \rho g h_1$ に面積 $A$ を掛けたものです。浮力 $F_B$ は上向きの力から下向きの力を引いたものです。
$$ \begin{align} F_B &= (p_0 + \rho g h_2) A – (p_0 + \rho g h_1) A \\ &= \rho g (h_2 – h_1) A \\ &= \rho g H A \\ &= \rho g V_{\text{sub}} \end{align} $$
ここで $V_{\text{sub}} = HA$ は物体が排除した流体の体積です。
アルキメデスの原理
上の結果は一般の形状の物体に拡張でき、アルキメデスの原理 として知られます。
$$ \boxed{F_B = \rho_f g V_{\text{sub}}} $$
「流体中の物体に作用する浮力は、その物体が排除した流体の重さに等しい」
ここで $\rho_f$ は流体の密度、$V_{\text{sub}}$ は流体中に沈んでいる部分の体積です。
浮沈の条件
物体の密度を $\rho_s$、流体の密度を $\rho_f$ とします。物体の全体積を $V$ とすると、重力は $W = \rho_s g V$、浮力は $F_B = \rho_f g V_{\text{sub}}$ です。
| 条件 | 結果 |
|---|---|
| $\rho_s < \rho_f$ | 浮く(一部が水面上に出る) |
| $\rho_s = \rho_f$ | 中性浮力(どの深さでも静止) |
| $\rho_s > \rho_f$ | 沈む |
浮いている場合、水面上に出る割合は次のように求まります。力の釣り合い $W = F_B$ から、
$$ \rho_s g V = \rho_f g V_{\text{sub}} $$
$$ \frac{V_{\text{sub}}}{V} = \frac{\rho_s}{\rho_f} $$
例えば氷($\rho_s \approx 917 \, \mathrm{kg/m^3}$)が水($\rho_f = 1000 \, \mathrm{kg/m^3}$)に浮く場合、体積の約 91.7% が水中に沈みます。
Pythonでの計算と可視化
静水圧の深さ依存性と浮力の計算を行います。
import numpy as np
import matplotlib.pyplot as plt
fig, axes = plt.subplots(1, 3, figsize=(18, 5))
# --- (1) 静水圧の深さ依存性 ---
h = np.linspace(0, 100, 300) # 深さ [m]
rho_water = 1000 # kg/m^3
rho_seawater = 1025 # kg/m^3
g = 9.81
p0 = 101325 # 大気圧 [Pa]
p_fresh = p0 + rho_water * g * h
p_sea = p0 + rho_seawater * g * h
axes[0].plot(p_fresh / 1e6, h, 'b-', lw=2, label='Fresh water')
axes[0].plot(p_sea / 1e6, h, 'r--', lw=2, label='Sea water')
axes[0].set_xlabel('Absolute pressure [MPa]', fontsize=12)
axes[0].set_ylabel('Depth [m]', fontsize=12)
axes[0].set_title('Hydrostatic Pressure vs Depth', fontsize=13)
axes[0].invert_yaxis()
axes[0].legend(fontsize=10)
axes[0].grid(True, alpha=0.3)
# --- (2) 油圧ジャッキ(パスカルの原理)---
A1 = np.linspace(0.001, 0.01, 100) # 小ピストン面積 [m^2]
A2 = 0.1 # 大ピストン面積 [m^2]
F1 = 100 # 入力力 [N]
F2 = F1 * A2 / A1
ratio = A2 / A1
axes[1].plot(A1 * 1e4, F2 / 1e3, 'g-', lw=2)
axes[1].set_xlabel('Small piston area [cm$^2$]', fontsize=12)
axes[1].set_ylabel('Output force [kN]', fontsize=12)
axes[1].set_title("Pascal's Principle: Hydraulic Jack\n($F_1$=100 N, $A_2$=0.1 m$^2$)", fontsize=13)
axes[1].grid(True, alpha=0.3)
# --- (3) 浮沈の条件 ---
rho_f = 1000 # 水の密度
rho_s = np.linspace(100, 2000, 300) # 物体の密度
# 沈んでいる割合(浮いている場合は rho_s/rho_f、沈む場合は1.0)
submerged_fraction = np.minimum(rho_s / rho_f, 1.0)
axes[2].plot(rho_s, submerged_fraction * 100, 'b-', lw=2)
axes[2].axvline(x=rho_f, color='r', ls='--', alpha=0.7, label='$\\rho_s = \\rho_f$ (neutral)')
axes[2].axhline(y=100, color='gray', ls=':', alpha=0.5)
# 材料の例をプロット
materials = {
'Wood (pine)': 500, 'Ice': 917, 'Human body': 985,
'Steel': 7850, 'Aluminum': 2700
}
for name, rho in materials.items():
frac = min(rho / rho_f, 1.0) * 100
axes[2].annotate(name, xy=(rho, frac), fontsize=8,
ha='center', va='bottom',
arrowprops=dict(arrowstyle='->', color='gray'))
axes[2].plot(rho, frac, 'ko', ms=4)
axes[2].set_xlabel('Object density $\\rho_s$ [kg/m$^3$]', fontsize=12)
axes[2].set_ylabel('Submerged fraction [%]', fontsize=12)
axes[2].set_title("Archimedes' Principle", fontsize=13)
axes[2].legend(fontsize=10)
axes[2].grid(True, alpha=0.3)
axes[2].set_xlim(0, 2000)
plt.tight_layout()
plt.show()
左のグラフでは、水深に対する絶対圧力の増加が確認できます。淡水と海水で勾配がわずかに異なることがわかります。深さ 10 m で約 1 気圧(0.1 MPa)増加する目安は覚えておくと便利です。
中央のグラフでは、油圧ジャッキにおけるパスカルの原理を示しています。小ピストンの面積が小さいほど、大きな力の増幅が得られます。
右のグラフでは、物体の密度と沈んでいる割合の関係を示しています。物体の密度が水の密度より小さいとき浮き、大きいとき完全に沈みます。
まとめ
本記事では、静水力学の基礎を解説しました。
- パスカルの原理: 静止流体中の圧力は方向によらず等しい。密閉容器では圧力変化が全体に伝わる
- 静水圧: $p = p_0 + \rho g h$ — 深さに比例して圧力が増加
- アルキメデスの原理: 浮力 $F_B = \rho_f g V_{\text{sub}}$ — 排除した流体の重さに等しい
- 浮沈の条件: $\rho_s < \rho_f$ で浮き、$\rho_s > \rho_f$ で沈む
次のステップとして、以下の記事も参考にしてください。