コンテンツへスキップ
Varligガイド
Varligホーム

複素数

複素数は実部と虚部を持ち、−1の平方根である i を使って書きます。このページでは、複素数の書き方、複素数の演算、絶対値と偏角への分解、負の数の平方根の求め方、そして複素数を受け付ける数学関数を説明します。

2次方程式が実数解を持たないとき、交流回路や信号を扱うとき、複素解析の課題を確かめるときに役立ちます。

複素数の書き方

calc
2 + 3i 答え 2 + 3i
complex(3, -4) 答え 3 - 4i
i^2 答え -1

虚部は 3i1.5i のように数値のすぐ後に i を付けて書くか、i だけを使います。complex(real, imaginary) は2つの部分から同じ値を作ります。complex(抵抗, リアクタンス) のように、部分が名前のときに便利です。どちらの部分も、単位のないただの数値でなければなりません。

i が虚数単位を意味するのは、ノートの中にほかに i という名前のものがない間だけです。i という名前やカスタム単位を定義すると、そちらが優先されます。

calc
i = 5
2 + 3i 答え 17
complex(2, 3) 答え 2 + 3i

ここでは 3i が3 × 5となり、この行は17になりました。名前はノート内の計算ブロックをまたいで引き継がれるので、ノートのそれより前のどこかに i = … があっても同じことが起こります。複素数を使うノートでは、i を名前に使わないでください。complex(2, 3) はこの名前を使わないので、そのまま使えます。

演算

calc
(2 + 3i) + (1 - 5i) 答え 3 - 2i
(1 + 2i) * (3 - i) 答え 5 + 5i
(2 + 3i) * (2 - 3i) 答え 13
10 / (3 + 4i) 答え 1.2 - 1.6i
(1 + i)^8 答え 16

足し算、引き算、掛け算、割り算、整数のべき乗は厳密に計算されます。(2 + 3i) * (2 - 3i) のように結果の虚部がゼロになると、答えはふつうの数値として表示されます。掛け算や割り算をするときは、(2 + 3i) * (2 - 3i)2 + (3i * 2) - 3i と読まれないように、それぞれの複素数をかっこで囲んでください。

複素数の各部分

calc
z = 3 + 4i
real(z) 答え 3
imag(z) 答え 4
conj(z) 答え 3 - 4i
abs(z) 答え 5
arg(1 + i) 答え 0.7853981634
arg(1 + i) rad in degrees 答え 45°
関数 返す値
real(z) 実部
imag(z) 虚部(ただの数値として)
conj(z) 共役複素数:実部は同じで、虚部の符号を反転したもの
abs(z) 絶対値:ゼロからの距離
arg(z) 偏角:正の実軸からの角度(ラジアン)

arg は−πからπまでのラジアンをただの数値で返します。度で見るには、最後の行のようにラジアンであることを示してから変換します。逆に、絶対値と角度から複素数に戻すには exp を使います。2 * exp(i * pi / 3)1 + 1.7320508076i です。

負の数の平方根

ふつうの負の数の平方根は実数の計算なので、sqrt(-16) は代わりにどう書けばよいかを示すエラーを表示します。Error: imaginary number. For a complex answer, write sqrt(-16 + 0i) です。複素数の根を求めるには、数値を複素数として書きます。0i を足すか、complex(…, 0) を使ってください。

calc
sqrt(-16 + 0i) 答え 4i
sqrt(complex(-16, 0)) 答え 4i
sqrt(3 + 4i) 答え 2 + i
sqrt(2i) 答え 1 + i

sqrt は主値の根、つまり実部が正(負の数の場合は虚部が正)の根を返します。もう1つの平方根は、その符号を反転したものです。

複素数として書いた値は、虚部がゼロでも複素数のままです。名前に保存したり、先に計算を続けたりしてもかまいません。x = -16 + 0i の後なら、x-16 と表示されますが、sqrt(x)4i になります。

これにより、どんな2次方程式にも解の公式が使えます。

calc
# x^2 + 2x + 5 = 0 の解
a = 1
b = 2
c = 5
判別式 = b^2 - 4*a*c 答え -16
(-b + sqrt(判別式 + 0i)) / (2*a) 答え -1 + 2i
(-b - sqrt(判別式 + 0i)) / (2*a) 答え -1 - 2i

立方根も同じ主値の規則に従うので、負の数では意外な結果になることがあります。

calc
cbrt(-8) 答え -2
cbrt(-8 + 0i) 答え 1 + 1.7320508076i

どちらも−8の立方根です。実数版は実数の根を、複素数版は主値の複素数の根を返します。

複素数の関数

calc
exp(i * pi) 答え -1
ln(-1 + 0i) 答え 3.1415926536i
i^i 答え 0.2078795764
cos(i) 答え 1.5430806348
sinh(i) 答え 0.8414709848i
2^i 答え 0.7692389014 + 0.6389612763i

次の関数は複素数を受け付けます。

  • sincostan と、その逆関数 asinacosatan
  • sinhcoshtanh と、その逆関数 asinhacoshatanh
  • explnlog(または log10)、log2sqrtcbrt
  • i^0.52^i のような、小数や複素数の指数によるべき乗

これらは2進浮動小数点で計算するので、答えは精度の高い近似値です。問題にならないほど小さな丸め誤差は0と表示されるので、exp(i * pi) は教科書どおりの答えである−1と表示されます。保存されている値はすべての桁を保持しているので、こうした結果を比べるときは == を使わず、abs(exp(i * pi) + 1) < 1e-9 のように差がごく小さいことを確かめてください。

各関数は主枝から1つの答えを返します。複素数には無限に多くの対数と複数の根がありますが、得られるのは標準的な1つです。sqrt と同じく、実数の入力は実数のまま扱われます。ln(-1)log(-100) は、試すべき複素数の形を添えて虚数のエラーを表示し、ln(-1 + 0i) はπiを返します。ゼロの対数はエラーになります。

floorround のように、実数にしか意味のない関数は複素数を受け付けません。

複素数の比較

calc
2 + 3i == complex(2, 3) 答え true
2 + 3i != 2 - 3i 答え true
complex(3, 0) >= 3 答え true
abs(3 + 4i) > abs(1 + 2i) 答え true

==!= はどんな複素数にも使えます。複素数には自然な順序がないので、<<=>>= が使えるのは両辺の虚部がゼロのときだけです。i < 2 はエラーになります。大きさを比べるには、最後の行のように abs で絶対値を比べてください。複素数は並べ替えられません。

完全な規則は高度な数学:機能と制限にあります。

まとめて使う

交流回路の問題を確かめる例です。30 Ωの抵抗とリアクタンス40 Ωのインダクターを直列につなぎ、10 Vの電源に接続しています。

calc
# 直列回路:30 Ωの抵抗、40 Ωのリアクタンス、10 Vの電源
抵抗 = 30
リアクタンス = 40
z = complex(抵抗, リアクタンス) 答え 30 + 40i
abs(z) 答え 50
電流 = 10 / z 答え 0.12 - 0.16i
abs(電流) 答え 0.2
arg(z) rad in degrees to 1 dp 答え 53.1°

インピーダンスは 30 + 40i で、その大きさは50 Ωなので、電流は0.2 Aで、電圧より約53.1°遅れます。エンジニアは虚数単位を j と書くことがよくありますが、Varligでは常に i です。複素数の各部分には単位を付けられないので、オーム、ボルト、アンペアはコメントに書いています。