複素数
複素数は実部と虚部を持ち、−1の平方根である i を使って書きます。このページでは、複素数の書き方、複素数の演算、絶対値と偏角への分解、負の数の平方根の求め方、そして複素数を受け付ける数学関数を説明します。
2次方程式が実数解を持たないとき、交流回路や信号を扱うとき、複素解析の課題を確かめるときに役立ちます。
複素数の書き方
2 + 3i 答え 2 + 3icomplex(3, -4) 答え 3 - 4ii^2 答え -1虚部は 3i や 1.5i のように数値のすぐ後に i を付けて書くか、i だけを使います。complex(real, imaginary) は2つの部分から同じ値を作ります。complex(抵抗, リアクタンス) のように、部分が名前のときに便利です。どちらの部分も、単位のないただの数値でなければなりません。
i が虚数単位を意味するのは、ノートの中にほかに i という名前のものがない間だけです。i という名前やカスタム単位を定義すると、そちらが優先されます。
i = 52 + 3i 答え 17complex(2, 3) 答え 2 + 3iここでは 3i が3 × 5となり、この行は17になりました。名前はノート内の計算ブロックをまたいで引き継がれるので、ノートのそれより前のどこかに i = … があっても同じことが起こります。複素数を使うノートでは、i を名前に使わないでください。complex(2, 3) はこの名前を使わないので、そのまま使えます。
演算
(2 + 3i) + (1 - 5i) 答え 3 - 2i(1 + 2i) * (3 - i) 答え 5 + 5i(2 + 3i) * (2 - 3i) 答え 1310 / (3 + 4i) 答え 1.2 - 1.6i(1 + i)^8 答え 16足し算、引き算、掛け算、割り算、整数のべき乗は厳密に計算されます。(2 + 3i) * (2 - 3i) のように結果の虚部がゼロになると、答えはふつうの数値として表示されます。掛け算や割り算をするときは、(2 + 3i) * (2 - 3i) が 2 + (3i * 2) - 3i と読まれないように、それぞれの複素数をかっこで囲んでください。
複素数の各部分
z = 3 + 4ireal(z) 答え 3imag(z) 答え 4conj(z) 答え 3 - 4iabs(z) 答え 5arg(1 + i) 答え 0.7853981634arg(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) を使ってください。
sqrt(-16 + 0i) 答え 4isqrt(complex(-16, 0)) 答え 4isqrt(3 + 4i) 答え 2 + isqrt(2i) 答え 1 + isqrt は主値の根、つまり実部が正(負の数の場合は虚部が正)の根を返します。もう1つの平方根は、その符号を反転したものです。
複素数として書いた値は、虚部がゼロでも複素数のままです。名前に保存したり、先に計算を続けたりしてもかまいません。x = -16 + 0i の後なら、x は -16 と表示されますが、sqrt(x) は 4i になります。
これにより、どんな2次方程式にも解の公式が使えます。
# x^2 + 2x + 5 = 0 の解a = 1b = 2c = 5判別式 = b^2 - 4*a*c 答え -16(-b + sqrt(判別式 + 0i)) / (2*a) 答え -1 + 2i(-b - sqrt(判別式 + 0i)) / (2*a) 答え -1 - 2i立方根も同じ主値の規則に従うので、負の数では意外な結果になることがあります。
cbrt(-8) 答え -2cbrt(-8 + 0i) 答え 1 + 1.7320508076iどちらも−8の立方根です。実数版は実数の根を、複素数版は主値の複素数の根を返します。
複素数の関数
exp(i * pi) 答え -1ln(-1 + 0i) 答え 3.1415926536ii^i 答え 0.2078795764cos(i) 答え 1.5430806348sinh(i) 答え 0.8414709848i2^i 答え 0.7692389014 + 0.6389612763i次の関数は複素数を受け付けます。
sin、cos、tanと、その逆関数asin、acos、atansinh、cosh、tanhと、その逆関数asinh、acosh、atanhexp、ln、log(またはlog10)、log2、sqrt、cbrti^0.5や2^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を返します。ゼロの対数はエラーになります。
floor や round のように、実数にしか意味のない関数は複素数を受け付けません。
複素数の比較
2 + 3i == complex(2, 3) 答え true2 + 3i != 2 - 3i 答え truecomplex(3, 0) >= 3 答え trueabs(3 + 4i) > abs(1 + 2i) 答え true== と != はどんな複素数にも使えます。複素数には自然な順序がないので、<、<=、>、>= が使えるのは両辺の虚部がゼロのときだけです。i < 2 はエラーになります。大きさを比べるには、最後の行のように abs で絶対値を比べてください。複素数は並べ替えられません。
完全な規則は高度な数学:機能と制限にあります。
まとめて使う
交流回路の問題を確かめる例です。30 Ωの抵抗とリアクタンス40 Ωのインダクターを直列につなぎ、10 Vの電源に接続しています。
# 直列回路:30 Ωの抵抗、40 Ωのリアクタンス、10 Vの電源抵抗 = 30リアクタンス = 40z = complex(抵抗, リアクタンス) 答え 30 + 40iabs(z) 答え 50電流 = 10 / z 答え 0.12 - 0.16iabs(電流) 答え 0.2arg(z) rad in degrees to 1 dp 答え 53.1°インピーダンスは 30 + 40i で、その大きさは50 Ωなので、電流は0.2 Aで、電圧より約53.1°遅れます。エンジニアは虚数単位を j と書くことがよくありますが、Varligでは常に i です。複素数の各部分には単位を付けられないので、オーム、ボルト、アンペアはコメントに書いています。