#13 ふれてみよう高校数学 幾何と図形

複素数平面

複素数のおさらい

1\sqrt{-1} という、二乗するとマイナスになる不思議な数」——これが虚数単位 ii です。現実世界に存在しないように見えても、電気工学や量子力学など実用的な分野で大活躍しています。

複素数 z=a+biz = a + bi実部 aa虚部 bb を持ちます(i=1i = \sqrt{-1}、虚数単位)。

実数は虚部が 0 の複素数の特殊ケース(b=0b = 0)——「複素数は実数を含むより広い数の世界」です。

基本演算

「実部どうし・虚部どうしをまとめて計算する」——i2=1i^2 = -1 に注意するだけです:

z1=a+biz_1 = a + biz2=c+diz_2 = c + di のとき:

z1+z2=(a+c)+(b+d)iz_1 + z_2 = (a+c) + (b+d)i z1z2=(acbd)+(ad+bc)iz_1 \cdot z_2 = (ac - bd) + (ad + bc)i z1z2=(a+bi)(cdi)c2+d2=ac+bdc2+d2+bcadc2+d2i\frac{z_1}{z_2} = \frac{(a+bi)(c-di)}{c^2 + d^2} = \frac{ac+bd}{c^2+d^2} + \frac{bc-ad}{c^2+d^2}i

割り算では「分母の共役複素数をかける」——cdic-di をかけると分母が実数になります。

複素数平面(アルガン図)

「複素数をグラフ上の点として見る」——この発想が複素数平面(複素平面、アルガン図)です。実部を横軸、虚部を縦軸にとれば、すべての複素数が平面上の 1 点に対応します。

複素数 z=a+biz = a + bi を、平面上の点 (a,b)(a, b)(または座標 (a,b)(a, b) を示すベクトル)として表したものが複素数平面です。

  • 実軸xx 軸):実部 aa
  • 虚軸yy 軸):虚部 bb

この表現により、複素数の演算が幾何学的変換と対応します——「足し算は移動、かけ算は回転と拡大縮小」という美しい対応関係が生まれます。

絶対値(modulus)と偏角(argument)

絶対値

「原点からその複素数までの距離」——ピタゴラスの定理そのままです:

z=a+bi=a2+b2|z| = |a + bi| = \sqrt{a^2 + b^2}

原点からの距離。z1z2=z1z2|z_1 z_2| = |z_1||z_2| という性質があります——「積の絶対値 = 絶対値の積」。

偏角

「実軸の正方向から反時計回りに何度回転したか」——時計の針の逆方向を正とします:

arg(z)=θ=arctan(ba)\arg(z) = \theta = \arctan\left(\frac{b}{a}\right)

実軸正の向きから反時計回りに測った角度。π<θπ-\pi < \theta \leq \pi を主値といいます。

極形式(polar form)

「複素数を大きさ rr と角度 θ\theta の組み合わせで表す」——地図で「北東方向に 3km」と表すのと同じ考え方です:

z=r(cosθ+isinθ)=reiθz = r(\cos\theta + i\sin\theta) = re^{i\theta}

ここで r=zr = |z|(絶対値)、θ=arg(z)\theta = \arg(z)(偏角)。

オイラーの公式 eiθ=cosθ+isinθe^{i\theta} = \cos\theta + i\sin\theta により、指数形式でも書けます——これは数学史上もっとも美しい公式のひとつとも言われます。

極形式の積

「複素数の積は、大きさをかけて角度を足す」——計算が劇的に簡単になります:

z1z2=r1r2ei(θ1+θ2)z_1 z_2 = r_1 r_2 e^{i(\theta_1 + \theta_2)}

絶対値の積、偏角の和になります。

共役複素数

「実部はそのままで虚部の符号だけ変えた複素数」——グラフ上では実軸を鏡に見立てたときの鏡像です:

zˉ=abi\bar{z} = a - bi

実軸に関する鏡映(反射)です。

性質:

  • z+zˉ=2az + \bar{z} = 2a(実部の 2 倍)——「自分と鏡像を足すと実部だけ残る」
  • zzˉ=2biz - \bar{z} = 2bi(虚部の 2 倍)——「自分から鏡像を引くと虚部だけ残る」
  • zzˉ=a2+b2=z2z\bar{z} = a^2 + b^2 = |z|^2——「自分と鏡像の積は絶対値の二乗(常に実数)」

インタラクティブ図解:複素数平面

マウスを動かすと複素数 zz が移動します。絶対値・偏角・共役複素数がリアルタイムに表示されます。

マウスを動かして複素数 z を移動する。|z|、arg(z)、共役 z̄ の変化に注目

var OX = 300, OY = 190, SC = 55;

function loop() {
ctx.clearRect(0, 0, W, H);

var re = (mx - OX) / SC;
var im = (OY - my) / SC;

// グリッド
ctx.strokeStyle = '#161b22'; ctx.lineWidth = 1;
for (var gx=-5;gx<=5;gx++){ctx.beginPath();ctx.moveTo(OX+gx*SC,0);ctx.lineTo(OX+gx*SC,H);ctx.stroke();}
for (var gy=-3;gy<=4;gy++){ctx.beginPath();ctx.moveTo(0,OY-gy*SC);ctx.lineTo(W,OY-gy*SC);ctx.stroke();}
ctx.strokeStyle='#30363d';ctx.lineWidth=1.5;
ctx.beginPath();ctx.moveTo(0,OY);ctx.lineTo(W,OY);ctx.stroke();
ctx.beginPath();ctx.moveTo(OX,0);ctx.lineTo(OX,H);ctx.stroke();
ctx.fillStyle='#8b949e';ctx.font='13px sans-serif';
ctx.fillText('実軸',W-50,OY-8);ctx.fillText('虚軸',OX+8,14);
ctx.fillText('i',OX+8,OY-SC+5);
ctx.fillText('-i',OX+8,OY+SC+5);
ctx.fillText('1',OX+SC-6,OY+16);
ctx.fillText('-1',OX-SC-10,OY+16);

var modZ = Math.sqrt(re*re + im*im);
var argZ = Math.atan2(im, re);
var argDeg = argZ * 180 / Math.PI;

// |z| の円
if (modZ > 0.1) {
  ctx.beginPath();
  ctx.arc(OX, OY, modZ*SC, 0, Math.PI*2);
  ctx.strokeStyle = '#58a6ff20'; ctx.lineWidth = 1.5;
  ctx.setLineDash([3,3]); ctx.stroke(); ctx.setLineDash([]);
}

// 偏角弧
ctx.beginPath();
ctx.arc(OX, OY, 25, -argZ, 0, argZ < 0);
ctx.strokeStyle = '#ffa65780'; ctx.lineWidth = 2;
ctx.stroke();

// 実部・虚部の投影線
ctx.beginPath();
ctx.moveTo(mx, OY);
ctx.lineTo(mx, my);
ctx.strokeStyle = '#f0883e60'; ctx.lineWidth = 1.5; ctx.setLineDash([4,3]); ctx.stroke(); ctx.setLineDash([]);

ctx.beginPath();
ctx.moveTo(OX, my);
ctx.lineTo(mx, my);
ctx.strokeStyle = '#56d36460'; ctx.lineWidth = 1.5; ctx.setLineDash([4,3]); ctx.stroke(); ctx.setLineDash([]);

// 原点からの線(ベクトル)
ctx.beginPath();
ctx.moveTo(OX, OY);
ctx.lineTo(mx, my);
ctx.strokeStyle = '#58a6ff'; ctx.lineWidth = 2; ctx.stroke();

// z の点
ctx.beginPath(); ctx.arc(mx, my, 7, 0, Math.PI*2);
ctx.fillStyle = '#58a6ff'; ctx.fill();
ctx.fillStyle = '#58a6ff'; ctx.font = 'bold 13px sans-serif';
var zLabel = re.toFixed(1) + (im>=0?' + ':' - ') + Math.abs(im).toFixed(1) + 'i';
ctx.fillText('z = ' + zLabel, mx+10, my-10);

// 共役 z̄(実軸鏡像)
var conjY = OY + im*SC; // (im は正なら上なので鏡は下)
ctx.beginPath();
ctx.moveTo(OX, OY);
ctx.lineTo(mx, conjY);
ctx.strokeStyle = '#bc8cff80'; ctx.lineWidth = 1.5; ctx.setLineDash([4,3]); ctx.stroke(); ctx.setLineDash([]);
ctx.beginPath(); ctx.arc(mx, conjY, 6, 0, Math.PI*2);
ctx.fillStyle = '#bc8cff'; ctx.fill();
ctx.fillStyle = '#bc8cff'; ctx.font = '12px sans-serif';
ctx.fillText('z̄ = ' + re.toFixed(1) + (im<=0?' + ':' - ') + Math.abs(im).toFixed(1) + 'i', mx+10, conjY+16);

// 鏡映線(実軸)を強調
ctx.beginPath();
ctx.moveTo(OX-5, OY);
ctx.lineTo(OX+5, OY);
ctx.strokeStyle = '#bc8cff80'; ctx.lineWidth = 1; ctx.stroke();

// 実軸と虚軸の投影ラベル
ctx.fillStyle = '#f0883e'; ctx.font = '11px sans-serif';
ctx.fillText('Re(z)=' + re.toFixed(2), mx+4, OY+16);
ctx.fillStyle = '#56d364';
ctx.fillText('Im(z)=' + im.toFixed(2), OX+8, my);

// 偏角ラベル
ctx.fillStyle = '#ffa657'; ctx.font = '12px serif';
ctx.fillText('θ=' + argDeg.toFixed(1) + '°', OX+32, OY-16);

// 情報パネル
ctx.fillStyle = '#0d1117e0';
ctx.fillRect(8, 8, 240, 130);
ctx.strokeStyle = '#30363d'; ctx.lineWidth = 1;
ctx.strokeRect(8, 8, 240, 130);

ctx.font = '13px monospace';
ctx.fillStyle = '#58a6ff';
ctx.fillText('z = ' + zLabel, 16, 28);
ctx.fillStyle = '#bc8cff';
ctx.fillText('z̄ = ' + re.toFixed(1) + (im<=0?' + ':' - ') + Math.abs(im).toFixed(1)+'i', 16, 48);
ctx.fillStyle = '#f0883e';
ctx.fillText('|z| = ' + modZ.toFixed(3), 16, 68);
ctx.fillStyle = '#ffa657';
ctx.fillText('arg(z) = ' + argDeg.toFixed(1) + '°', 16, 88);
ctx.fillStyle = '#56d364';
ctx.fillText('z·z̄ = |z|² = ' + (re*re+im*im).toFixed(3), 16, 108);
ctx.fillStyle = '#8b949e';
ctx.fillText('z+z̄ = ' + (2*re).toFixed(2) + '  (= 2·Re)', 16, 128);

requestAnimationFrame(loop);
}
loop();

ド・モアブルの定理

「角度 θ\theta の回転を nn 回繰り返すと、角度 nθn\theta の回転になる」——これがド・モアブルの定理の直感です:

(cosθ+isinθ)n=cosnθ+isinnθ(\cos\theta + i\sin\theta)^n = \cos n\theta + i\sin n\theta

または極形式で:

(eiθ)n=einθ(e^{i\theta})^n = e^{in\theta}

応用:三角関数の加法定理

「2 つの角度を合わせた複素数の掛け算から、加法定理が自然に出てくる」——ei(α+β)=eiαeiβe^{i(\alpha+\beta)} = e^{i\alpha} \cdot e^{i\beta} を展開すると:

cos(α+β)+isin(α+β)=(cosα+isinα)(cosβ+isinβ)\cos(\alpha+\beta) + i\sin(\alpha+\beta) = (\cos\alpha + i\sin\alpha)(\cos\beta + i\sin\beta)

実部・虚部を比較すると加法定理が得られます——「加法定理はオイラーの公式の実部・虚部を見ているだけ」という驚きの発見です。

複素数の計算例

例題 1

z=1+3iz = 1 + \sqrt{3}i の絶対値と偏角を求めよ。

解:

z=12+(3)2=1+3=2|z| = \sqrt{1^2 + (\sqrt{3})^2} = \sqrt{1+3} = 2 arg(z)=arctan31=60°=π3\arg(z) = \arctan\frac{\sqrt{3}}{1} = 60° = \frac{\pi}{3}

極形式:z=2eiπ/3=2(cos60°+isin60°)z = 2e^{i\pi/3} = 2(\cos 60° + i\sin 60°)

例題 2

z3z^3 を計算せよ(z=1+3iz = 1 + \sqrt{3}i として)。

解: 「成分で地道に計算するより、極形式を使うと一発で解ける」——ド・モアブルの定理の威力です:

z3=(2eiπ/3)3=8eiπ=8(cosπ+isinπ)=8(1+0i)=8z^3 = (2e^{i\pi/3})^3 = 8e^{i\pi} = 8(\cos\pi + i\sin\pi) = 8(-1 + 0i) = -8

成分計算でも確認できますが、極形式のほうがはるかに楽です。

まとめ

  • 複素数 z=a+biz = a + bi を平面上の点 (a,b)(a, b) として表す → 複素数平面——「数直線から数平面へ拡張」
  • 絶対値 z=a2+b2|z| = \sqrt{a^2+b^2}:原点からの距離——「ピタゴラスの定理そのまま」
  • 偏角 arg(z)=θ\arg(z) = \theta:実軸からの角度——「北からの方位角と同じ発想」
  • 極形式 z=reiθz = re^{i\theta}:積が「絶対値の積、偏角の和」に——「掛け算が回転と拡大縮小になる」
  • 共役 zˉ=abi\bar{z} = a - bi:実軸に関する鏡映——「虚部の符号を変えるだけ」

次回は複素数の乗算が「回転と拡大縮小」に対応することを学び、幾何変換としての複素数を深掘りします。