減衰振動と強制振動の物理

現実の振動系には必ず摩擦や抵抗による減衰が存在します。また、外力が加わることで共振が起きれば、振幅が異常に増大して構造破壊に至ることもあります。タコマ橋の崩壊やワイングラスの共鳴破壊は有名な例です。

本記事では物理現象としての減衰振動と強制振動を解説します。数学的な詳細は前提記事で扱っています。

本記事の内容

  • 物理系での減衰メカニズム
  • 減衰振動の3分類と物理的意味
  • Q値とエネルギー散逸
  • 共振の物理と工学的意味
  • RLC回路との類似性

前提知識

物理系での減衰

減衰メカニズム 減衰係数
ばね-質点 粘性摩擦 $F = -cv$ $c$ [Ns/m]
振り子 空気抵抗 $b$ [kg/s]
RLC回路 抵抗 $R$ $R$ [Ω]
建築構造 制振ダンパー $c$ [Ns/m]

3分類の物理的意味

不足減衰 ($\zeta < 1$): ドアのクローザー(ゆっくり閉まりながら少し戻る)

臨界減衰 ($\zeta = 1$): 車のサスペンション(最速で振動なく戻る)

過減衰 ($\zeta > 1$): 重いオイルダンパー(ゆっくりと戻る)

Q値の物理

$$ Q = \frac{\omega_n}{2\zeta\omega_n} = \frac{1}{2\zeta} = 2\pi \times \frac{\text{蓄積エネルギー}}{\text{1周期あたりの散逸エネルギー}} $$

典型的なQ値
クォーツ時計 ~10,000
ピアノの弦 ~3,000
地震時の建物 5-20
車のサスペンション 0.5-1

RLC回路との類似性

$$ L\ddot{q} + R\dot{q} + \frac{1}{C}q = V(t) $$

機械系 電気系
質量 $m$ インダクタンス $L$
減衰係数 $c$ 抵抗 $R$
ばね定数 $k$ $1/C$(キャパシタンスの逆数)
変位 $x$ 電荷 $q$
速度 $v$ 電流 $i$
力 $F$ 電圧 $V$

Pythonでの実装

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp

omega_n = 2*np.pi*5  # 5 Hz

fig, axes = plt.subplots(2, 2, figsize=(12, 9))

# エネルギー散逸
zeta = 0.1
t = np.linspace(0, 2, 1000)
def damped(t, y):
    return [y[1], -2*zeta*omega_n*y[1] - omega_n**2*y[0]]
sol = solve_ivp(damped, [0, 2], [1, 0], t_eval=t, max_step=0.001)
K = 0.5*sol.y[1]**2
U = 0.5*omega_n**2*sol.y[0]**2
E = K + U

axes[0, 0].plot(t, E/E[0], 'k-', linewidth=2, label='全エネルギー')
axes[0, 0].plot(t, K/E[0], 'r-', alpha=0.5, label='運動エネルギー')
axes[0, 0].plot(t, U/E[0], 'b-', alpha=0.5, label='ポテンシャル')
axes[0, 0].set_title(f'エネルギー散逸($\\zeta={zeta}$, Q={1/(2*zeta):.0f})')
axes[0, 0].set_xlabel('時間 [s]')
axes[0, 0].set_ylabel('正規化エネルギー')
axes[0, 0].legend()
axes[0, 0].grid(True, alpha=0.3)

# Q値の比較
for Q, color in [(2, 'r'), (5, 'g'), (20, 'b'), (100, 'purple')]:
    z = 1/(2*Q)
    def osc(t, y, z=z):
        return [y[1], -2*z*omega_n*y[1] - omega_n**2*y[0]]
    sol = solve_ivp(osc, [0, 1], [1, 0], t_eval=np.linspace(0, 1, 500), max_step=0.001)
    axes[0, 1].plot(sol.t, sol.y[0], color=color, label=f'Q={Q}')
axes[0, 1].set_title('Q値と振動の減衰')
axes[0, 1].set_xlabel('時間 [s]')
axes[0, 1].legend()
axes[0, 1].grid(True, alpha=0.3)

# 共振曲線(異なるQ値)
r = np.linspace(0.01, 2.5, 500)
for Q in [2, 5, 10, 50]:
    z = 1/(2*Q)
    X = 1/np.sqrt((1-r**2)**2 + (2*z*r)**2)
    axes[1, 0].plot(r, X, label=f'Q={Q}')
axes[1, 0].set_title('共振曲線')
axes[1, 0].set_xlabel('$\\omega/\\omega_n$')
axes[1, 0].set_ylabel('振幅倍率')
axes[1, 0].legend()
axes[1, 0].grid(True, alpha=0.3)
axes[1, 0].set_ylim(0, 55)

# RLC回路の類似性
R_vals = [10, 50, 100, 500]
L, C = 0.1, 1e-6  # H, F
omega0 = 1/np.sqrt(L*C)
f = np.linspace(1, omega0*3/(2*np.pi), 500)
omega = 2*np.pi*f

for R in R_vals:
    Z = np.sqrt(R**2 + (omega*L - 1/(omega*C))**2)
    I = 1.0/Z  # V=1V
    axes[1, 1].plot(f/1000, I*1000, label=f'R={R}$\\Omega$')

axes[1, 1].axvline(x=omega0/(2*np.pi*1000), color='k', linestyle=':', alpha=0.5)
axes[1, 1].set_title('RLC直列回路の周波数応答')
axes[1, 1].set_xlabel('周波数 [kHz]')
axes[1, 1].set_ylabel('電流 [mA]')
axes[1, 1].legend()
axes[1, 1].grid(True, alpha=0.3)

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

まとめ

  • 減衰振動は $\zeta$ により3つに分類、工学的用途が異なる
  • Q値はエネルギー保持能力の指標(高Q→鋭い共振ピーク)
  • 機械振動とRLC回路は数学的に等価
  • 共振は構造破壊の原因にも、フィルタ設計の基盤にもなる

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