「虚数って、実在しない数でしょ?」 「i² = -1 って意味が分からない…」 「数学の授業で習ったけど、何の役に立つの?」 「マイナス×マイナスがプラスなのに、なんで二乗してマイナスになるの?」
こんな疑問、誰もが一度は持ちますよね。
実は、虚数は「imaginary(想像上の)」という不思議な名前がついていますが、現実世界で大活躍している超重要な数なんです!
スマートフォンの電波、音楽のデジタル処理、量子コンピュータ… すべて虚数なしには成り立ちません。
この記事を読めば、虚数の本質から実用例まで、すべてが分かるようになります!
難しい数式は最小限にして、イメージで理解できるよう工夫しました。
虚数が生まれた歴史:数学者たちの苦悩

なぜ虚数が必要になったのか
虚数の誕生には、面白い歴史があります。
16世紀のイタリア:三次方程式を解きたい!
数学者カルダーノが三次方程式を解いていた時…
x³ = 15x + 4
この方程式を解く過程で、√(-121) のような「ありえない数」が出現。
でも、この「ありえない数」を使うと、正しい答えが得られる!
数学者たちの反応:
- 「こんな数は存在しない!」
- 「でも計算は合ってる…」
- 「仕方ない、一時的に使おう」
- 「あれ?めちゃくちゃ便利じゃない?」
名前の由来と不幸な誤解
「虚数(imaginary number)」という名前の問題:
- デカルトが「想像上の数」と命名(1637年)
- 実際は「想像」ではなく「拡張」
- 英語の「imaginary」も誤解を生む原因
もし今名前を付け直すなら「拡張数」や「回転数」の方が適切かもしれません。
虚数の基本:i(アイ)を理解しよう

虚数単位 i の定義
虚数の基本は、たった1つの定義から始まります。
定義:
i² = -1
つまり
i = √(-1)
これだけ!シンプルですよね。
複素数:実数と虚数の組み合わせ
複素数の基本形
実数と虚数を組み合わせた数を「複素数」と呼びます。
一般形:
z = a + bi
a: 実部(real part)
b: 虚部(imaginary part)
i: 虚数単位
具体例:
3 + 4i
-2 + 5i
7 - 2i
0 + 3i = 3i(純虚数)
5 + 0i = 5(実数)
複素数平面:2次元で数を表現
複素数は2次元平面上の点として表現できます!
虚軸(Imaginary)
↑
|
3i |(2, 3) = 2 + 3i
|
2i |
|
i |
|
-------|-------→ 実軸(Real)
O| 1 2 3
|
-i |
|
-2i |
メリット:
- 数を「点」として視覚化
- 回転や拡大が直感的
- ベクトルと同じ感覚で扱える
複素数の計算:意外と簡単!
基本的な四則演算
複素数の計算は、普通の数式と同じように扱えます。
足し算・引き算:
# 実部同士、虚部同士を計算
(3 + 4i) + (2 + 5i) = (3+2) + (4+5)i = 5 + 9i
(3 + 4i) - (2 + 5i) = (3-2) + (4-5)i = 1 - i
掛け算:
(a + bi)(c + di) = ac + adi + bci + bdi²
= ac + adi + bci - bd # i² = -1
= (ac - bd) + (ad + bc)i
例:(3 + 4i)(2 + 5i) = 6 + 15i + 8i + 20i²
= 6 + 23i - 20
= -14 + 23i
Pythonで複素数を扱う
Pythonは複素数を標準でサポートしています!
# 複素数の定義(jを使う)
z1 = 3 + 4j
z2 = 2 + 5j
# 基本演算
print(f"足し算: {z1 + z2}") # (5+9j)
print(f"引き算: {z1 - z2}") # (1-1j)
print(f"掛け算: {z1 * z2}") # (-14+23j)
print(f"割り算: {z1 / z2}") # (0.8965...-0.2413...j)
# 複素数の性質
print(f"実部: {z1.real}") # 3.0
print(f"虚部: {z1.imag}") # 4.0
print(f"絶対値: {abs(z1)}") # 5.0
print(f"共役: {z1.conjugate()}") # (3-4j)
import cmath
print(f"位相: {cmath.phase(z1)}") # 0.9272... (ラジアン)
オイラーの公式:数学で最も美しい式

世界一美しい数式
オイラーの公式は「数学の宝石」と呼ばれています。
オイラーの公式:
e^(iθ) = cos(θ) + i·sin(θ)
特別な場合(オイラーの等式):
e^(iπ) + 1 = 0
この式には数学の重要な5つの定数が全て含まれています:
- e(自然対数の底)
- i(虚数単位)
- π(円周率)
- 1(乗法の単位元)
- 0(加法の単位元)
直感的な理解:回転としての複素数
import numpy as np
import matplotlib.pyplot as plt
# オイラーの公式を視覚化
theta = np.linspace(0, 2*np.pi, 100)
x = np.cos(theta)
y = np.sin(theta)
plt.figure(figsize=(8, 8))
plt.plot(x, y)
plt.axis('equal')
plt.grid(True)
plt.title('e^(iθ) は単位円上を回転')
plt.xlabel('実部')
plt.ylabel('虚部')
# 特定の角度での点
angles = [0, np.pi/4, np.pi/2, np.pi, 3*np.pi/2]
for angle in angles:
z = np.exp(1j * angle)
plt.plot(z.real, z.imag, 'ro')
plt.text(z.real*1.1, z.imag*1.1, f'e^(i·{angle:.2f})')
plt.show()
実世界での虚数の活用例
1. 電気工学:交流回路
電気工学では虚数は必須です!
交流電圧の表現:
# 交流電圧を複素数で表現
V = 100 * np.exp(1j * 2 * np.pi * 60 * t) # 100V, 60Hz
# インピーダンス(複素抵抗)
Z = R + jX # R: 抵抗、X: リアクタンス
# オームの法則(交流版)
I = V / Z
なぜ虚数?
- 位相のズレを自然に表現
- 計算が圧倒的に簡単になる
- 回路設計に不可欠
2. 信号処理:フーリエ変換
音楽や画像の処理に使われます。
import numpy as np
from scipy.fft import fft, fftfreq
import matplotlib.pyplot as plt
# 音声信号の例
sample_rate = 44100 # CD音質
duration = 1.0
t = np.linspace(0, duration, int(sample_rate * duration))
# 440Hz(ラの音)+ 880Hz(1オクターブ上)
signal = np.sin(2 * np.pi * 440 * t) + 0.5 * np.sin(2 * np.pi * 880 * t)
# フーリエ変換(虚数を使った周波数解析)
frequencies = fftfreq(len(signal), 1/sample_rate)
spectrum = fft(signal)
# 周波数成分を表示
plt.plot(frequencies[:len(frequencies)//2],
np.abs(spectrum[:len(spectrum)//2]))
plt.xlabel('周波数 (Hz)')
plt.ylabel('振幅')
plt.title('フーリエ変換で周波数成分を分析')
plt.show()
3. 量子力学:波動関数
量子力学では、粒子の状態を複素数で表現します。
シュレディンガー方程式:
iℏ ∂ψ/∂t = Ĥψ
- ψ(プサイ):波動関数(複素数値)
- 確率振幅が複素数
- 観測確率は|ψ|²(絶対値の二乗)
4. コンピュータグラフィックス:回転
3D グラフィックスでの回転計算に使用。
# クォータニオン(四元数)による3D回転
import numpy as np
class Quaternion:
def __init__(self, w, x, y, z):
self.w = w # 実部
self.x = x # i成分
self.y = y # j成分
self.z = z # k成分
def rotate_vector(self, vector):
# 3Dベクトルを回転
# 複素数の拡張で効率的な回転計算
pass
5. 制御工学:システムの安定性
# 伝達関数の極(複素数)でシステムの安定性を判定
poles = np.roots([1, 2, 5]) # s² + 2s + 5 = 0
print(f"極: {poles}") # 複素数の極
# 実部が負なら安定
if all(pole.real < 0 for pole in poles):
print("システムは安定")
複素数のプログラミング活用

NumPyでの複素数処理
import numpy as np
# 複素数配列
z = np.array([1+2j, 3+4j, 5+6j])
# 各種演算
print(f"絶対値: {np.abs(z)}")
print(f"偏角: {np.angle(z)}")
print(f"共役: {np.conj(z)}")
print(f"実部: {np.real(z)}")
print(f"虚部: {np.imag(z)}")
# 極形式への変換
r = np.abs(z)
theta = np.angle(z)
print(f"極形式: r={r}, θ={theta}")
# 極形式から直交形式へ
z_reconstructed = r * np.exp(1j * theta)
print(f"再構築: {z_reconstructed}")
マンデルブロ集合:複素数が作る美しいフラクタル
import numpy as np
import matplotlib.pyplot as plt
def mandelbrot(h, w, max_iter=100):
# 複素平面の範囲
x = np.linspace(-2, 1, w)
y = np.linspace(-1.5, 1.5, h)
X, Y = np.meshgrid(x, y)
C = X + 1j * Y
# マンデルブロ集合の計算
Z = np.zeros_like(C)
M = np.zeros(C.shape)
for i in range(max_iter):
mask = np.abs(Z) <= 2
Z[mask] = Z[mask]**2 + C[mask]
M[mask] = i
return M
# 描画
plt.figure(figsize=(12, 10))
M = mandelbrot(800, 1000)
plt.imshow(M, cmap='hot', extent=[-2, 1, -1.5, 1.5])
plt.colorbar(label='反復回数')
plt.title('マンデルブロ集合:複素数が生み出すフラクタル')
plt.xlabel('実部')
plt.ylabel('虚部')
plt.show()
よくある質問と誤解
Q1: 虚数は本当に存在するの?
A: 「存在」の定義によります。-1も昔は「存在しない」と言われていました。虚数は数学的に定義された概念で、現実世界の現象を記述するのに非常に有用です。
Q2: なぜ i ではなく j を使うことがあるの?
A: 電気工学では電流を i で表すため、虚数単位は j を使います。Pythonも工学系の慣習に従って j を採用しています。
Q3: 虚数の大小は比較できる?
A: 複素数に大小関係は定義されていません。ただし、絶対値(大きさ)は比較できます。
Q4: 四元数って何?
A: 複素数をさらに拡張したもので、3次元回転を効率的に扱えます。ゲームエンジンなどで使われています。
Q5: 虚数時間って何?
A: 物理学で使われる概念で、時間を虚数にすると相対性理論と量子力学が統一的に扱えることがあります。
まとめ:虚数は現実世界の必需品!
虚数について、基礎から応用まで解説してきました。
この記事のポイント:
✅ i² = -1 という単純な定義から始まる
✅ 複素数平面で視覚的に理解できる
✅ 電気、信号処理、量子力学で必須
✅ プログラミングでも簡単に扱える
虚数の本質:
- 数の概念を2次元に拡張
- 回転を自然に表現
- 波や振動の記述に最適
- 計算を劇的に簡単にする
- 現実世界の現象を正確に記述
最後に: 虚数は「虚しい」どころか、現代文明を支える重要な数学的道具です。 スマートフォン、インターネット、医療機器…すべて虚数の恩恵を受けています。
「想像上の数」という名前に惑わされず、「拡張された数」として理解すれば、その美しさと実用性が見えてくるはずです。
数学は、現実世界を記述する言語。 虚数は、その表現力を飛躍的に高めた偉大な発明なのです!
コメント