スプレッドシートのIMCONJUGATE関数|共役複素数の求め方と使い道3つ

スポンサーリンク

複素数の計算をスプレッドシートで検算していて、「3+4i の共役ってどう出すんだっけ」と手が止まったことはありませんか。

やることは虚部の符号の反転だけ。それでも IMREAL と IMAGINARY で分解して COMPLEX で組み直すと、式が長くなりがちです。しかも IM 系関数の結果は文字列なので、うっかり足し算すると #VALUE! が出てきます。

Googleスプレッドシートなら、IMCONJUGATE関数ひとつで共役複素数が求まります。この記事では基本の使い方に加えて、共役が役立つ3つの場面を検算表つきで紹介します。絶対値の二乗、割り算の分母の実数化、交流回路の電力計算の3つ。

スプレッドシートのIMCONJUGATE関数とは?共役複素数を一発で返す関数

GoogleスプレッドシートのIMCONJUGATE関数は、複素数の共役複素数を返す関数です。読み方は「イマジナリー・コンジュゲート」で、imaginary(虚数)と conjugate(共役)を組み合わせた名前。電気・物理・工学系の計算で使う「エンジニアリング関数」のひとつに分類されています。

結論:=IMCONJUGATE(“3+4i”) は 3-4i を返す

=IMCONJUGATE("3+4i")

結果は「3-4i」です。実部の3はそのままで、虚部の符号だけが反転します。

共役複素数とは、複素数 a+bi の虚部の符号を反転させた a-bi のこと。元の数を z と書くと、共役は z̄(ゼットバー)と表します。複素平面で見ると、実軸をはさんで線対称の位置にある点です。

複素数 z共役 z̄変わったところ
3+4i3-4i虚部 +4 → -4
3-4i3+4i虚部 -4 → +4
-2+5i-2-5i虚部 +5 → -5
-1-2i-1+2i虚部 -2 → +2

1行目と2行目を見比べると分かるとおり、共役の共役は元の数に戻ります。実部の符号はどの行でも変わっていませんよね。

構文と引数(戻り値は文字列)

=IMCONJUGATE(複素数)
引数必須内容
複素数必須共役を求めたい複素数。”3+4i” のような文字列、セル参照、COMPLEX関数の結果などを指定する

引数は1つだけ。虚数単位は小文字の i か j を使います。数学では i、電気工学では j を使う慣習があるので、どちらでも書けるのは便利ですね。

ひとつ覚えておきたいのは、戻り値が数値ではなく文字列だという点です。見た目は「3-4i」でも、セルの中身はテキスト扱い。そのまま + や ABS で計算するとエラーになります。数値が欲しいときは IMREAL や IMABS を通しましょう(詳しくはエラーの章で解説)。

IMCONJUGATE関数の基本的な使い方

ここからは、引数の渡し方ごとに書き方を見ていきます。どの書き方でも、結果が文字列で返ってくる点は共通です。

文字列で直接指定する

いちばん手軽なのが、複素数をダブルクォーテーションで囲んで直接書く方法です。

=IMCONJUGATE("3-4i")

結果は「3+4i」。もともと虚部がマイナスなら、反転してプラスになります。

なお「3 + 4i」のように半角の空白が入っていても、空白なしと同じ値として計算されます。ただし全角の空白はエラーになるので、後半の早見表で確認してください。

セル参照で指定する

実際のシートでは、複素数がセルに入っていることが多いはず。A2 に「3+4i」が入っているなら、次のように書きます。

=IMCONJUGATE(A2)

B2 に入れると「3-4i」が表示されます。下の行へコピーすれば、A列の複素数を1つずつ共役に変換できますよ。

COMPLEX関数で作った複素数を渡す

実部と虚部が別々のセルに入っているなら、COMPLEX関数で複素数にしてから渡せます。

=IMCONJUGATE(COMPLEX(2, 3))

COMPLEX(2, 3) が「2+3i」を作り、IMCONJUGATE がその共役「2-3i」を返す流れです。A列に実部、B列に虚部があるなら、次の1行で済みます。

=IMCONJUGATE(COMPLEX(A2, B2))

実数・純虚数・j表記を渡したときの結果(早見表)

虚部が0の実数や、実部が0の純虚数も渡せます。それぞれの共役を数学的な値で整理すると次のとおり。

入力共役(数学的な値)ポイント
“3+4i”3-4i基本形。虚部の符号だけ反転
“3-4i”3+4i2回取ると元に戻る
“5”5実数は虚部が0なので変わらない
“2i”-2i純虚数は符号ごと反転
COMPLEX(-2,-5,”j”)-2+5jCOMPLEX 単体の値は -2-5j

最後の行は取り違えやすいので注意しましょう。COMPLEX(-2,-5,”j”) が作るのは -2-5j で、IMCONJUGATE を通すと -2+5j になります。

表の値は手計算による数学的な共役です。実数が「5」と「5+0i」のどちらで表示されるか、j が j のまま返るか。こうした表記の細部は、実際にセルへ入れて確かめてから使うと安心ですよ。

ARRAYFORMULAで列をまとめて変換する

行数が多いときは、ARRAYFORMULA関数(数式を範囲全体に展開する関数)でまとめて変換できます。

=ARRAYFORMULA(IMCONJUGATE(A2:A10))

B2 に1つ入れるだけで、A2:A10 の共役が B列に展開されます。データが増えたら、範囲の終わりを広げるだけで対応できるのも楽なところ。

共役複素数が役立つ3つの場面

共役を求めること自体より、「共役を使って何を計算するか」のほうが実務では大事です。ここでは IMPRODUCT や IMDIV と組み合わせる代表的な3つの場面を、検算表つきで紹介します。

表の数値はすべて手計算の値です。自分のシートの結果と見比べながら読んでみてください。

z×z̄で絶対値の二乗を求める(IMABSとの検算)

複素数に自分の共役を掛けると、虚部が消えて実数だけが残ります。

z × z̄ = (a+bi)(a-bi) = a² + b² = |z|²

z = 3+4i なら、(3+4i)(3-4i) = 9 + 16 = 25 です。スプレッドシートでは、IMPRODUCT関数(複素数の掛け算)と組み合わせて計算します。

A2: 3+4i
B2: =IMCONJUGATE(A2)       ← 共役
C2: =IMPRODUCT(A2, B2)     ← z × z̄(文字列)
D2: =IMREAL(C2)            ← 数値に変換
E2: =IMABS(A2)^2           ← 検算用
セル式手計算の値型
B2=IMCONJUGATE(A2)3-4i文字列
C2=IMPRODUCT(A2, B2)25(虚部は0)文字列
D2=IMREAL(C2)25数値
E2=IMABS(A2)^25² = 25数値

ポイントは、C2 の段階ではまだ文字列だということ。虚部が0でも、そのまま足し算には使えません。IMREAL関数で実部を取り出すと、普通の数値として扱えるようになります。

D2 と E2 が一致すれば検算は成功です。IMABS関数は絶対値 |z| を返すので、2乗すれば同じ値になるはず。

z = 1+2i のように絶対値が無理数になる例では、末尾にごく小さな誤差が出ることがあります。比べるときは =ROUND(D2-E2, 10)=0 のように丸めて判定すると安心です。

複素数の割り算で分母を実数にする(IMDIVとの一致を確認)

複素数の割り算では、分子と分母に「分母の共役」を掛けて分母を実数にするのが定番です。

(1+2i) ÷ (3+4i)
= (1+2i)(3-4i) ÷ (3+4i)(3-4i)
= (11+2i) ÷ 25

IMDIV関数なら1つの式で済みますが、数学的にはこの計算と同じ答えになります。共役を使って手順を分けると、途中の値を1つずつ確かめられます。

A2: 1+2i                                        ← 分子
B2: 3+4i                                        ← 分母
C2: =IMCONJUGATE(B2)                            ← 分母の共役
D2: =IMPRODUCT(A2, C2)                          ← 分子×共役
E2: =IMREAL(IMPRODUCT(B2, C2))                  ← 分母×共役
F2: =COMPLEX(IMREAL(D2)/E2, IMAGINARY(D2)/E2)   ← 共役を使った結果
G2: =IMDIV(A2, B2)                              ← IMDIVの結果
セル中身手計算の値
C2分母の共役3-4i
D2分子×共役(1+2i)(3-4i) = 11+2i
E2分母×共役3² + 4² = 25
F2共役を使った結果11/25 + (2/25)i = 0.44+0.08i
G2IMDIV の結果0.44+0.08i

F2 と G2 が同じ値になれば、共役を使った手順と IMDIV の答えが一致したことになります。逆に (0.44+0.08i)(3+4i) を計算すると 1+2i に戻るので、答えの検算にも使えますね。

表示の末尾に細かい桁が出たら、IMREAL と IMAGINARY で実部と虚部を取り出します。ROUND で丸めてから比べてみてください。

交流回路の複素電力 S = V × I* と皮相電力を計算する

交流回路では、電圧と電流をフェーザ(大きさと位相をもつ複素数)で表します。このとき複素電力 S は、電圧に電流の共役を掛けた S = V × I* で求められます。

S の実部が有効電力 P(W)、虚部が無効電力 Q(var)です。そして S の大きさ |S| が皮相電力(VA)。S そのものを皮相電力と呼ぶ説明も見かけますが、正確には「複素電力 S の大きさが皮相電力」と区別しておきましょう。

なぜ電流だけ共役を取るのでしょうか。V と I をそのまま掛けると、両者の位相角が足し算になってしまいます。電流の共役を取ると「電圧と電流の位相の差」が残り、力率の計算に必要な角度が得られるわけです。

例として、電圧 V = 100+0i(V)、電流 I = 8-6i(A)とします。どちらも実効値(RMS)のフェーザで、電流が電圧より遅れる誘導性の負荷を想定した値です。

A2: 100+0i                             ← 電圧 V(実効値)
B2: 8-6i                               ← 電流 I(実効値)
C2: =IMPRODUCT(A2, IMCONJUGATE(B2))    ← 複素電力 S
D2: =IMREAL(C2)                        ← 有効電力 P
E2: =IMAGINARY(C2)                     ← 無効電力 Q
F2: =IMABS(C2)                         ← 皮相電力(S の大きさ)
G2: =D2/F2                             ← 力率
項目セル手計算の値
電流の共役 I*(C2 の内部)8+6i
複素電力 SC2100 × (8+6i) = 800+600i
有効電力 PD2800 W
無効電力 QE2600 var
皮相電力(S の大きさ)F2√(800² + 600²) = 1000 VA
力率G2800 ÷ 1000 = 0.8(遅れ)

無効電力の取り出しにはIMAGINARY関数を使っています。検算として |V| × |I| を計算すると、100 × √(8² + 6²) = 100 × 10 = 1000 VA。皮相電力と一致しました。

最後に、無効電力 Q の符号には流儀の違いがある点も押さえておきましょう。S = V × I* の流儀では、遅れ電流(誘導性)で Q が正、進み電流(容量性)で Q が負になります。

電圧側の共役を取る流儀もあります。教科書や現場の表記と符号が逆に見えたら、どちらの式を採っているかを確かめてください。ピーク値のフェーザなら S = V × I* ÷ 2 とする流儀もあります。この例は実効値で計算しています。

IMCONJUGATE関数のエラーと思った結果にならないときの対処法

IMCONJUGATE が思いどおりに動かないときの原因は、主に2つ。「複素数の書き方」か「戻り値が文字列であること」のどちらかです。下の早見表は、当サイトが Google スプレッドシートの実機で確かめた IM 系関数の規則にもとづいています。

症状→原因→直し方の早見表

症状(式の例)原因直し方
=IMCONJUGATE(“3+4I”) が #NUM!虚数単位が大文字の I小文字の i か j にする
=IMCONJUGATE(“3+4i”) が #NUM!数字や i が全角すべて半角にする
=IMCONJUGATE(“3 + 4i”) が #NUM!全角の空白が入っている全角の空白を削除する
=IMCONJUGATE(“3+4k”) が #NUM!i・j 以外の文字虚数単位を i か j にする
=IMCONJUGATE(“hello”) が #NUM!複素数ではない文字列参照先の中身を確認する
=IMCONJUGATE(TRUE) が #NUM!論理値を渡している参照先のセルを確認する
=IMCONJUGATE(A2) が #N/A参照先のセルがすでに #N/A参照先のエラーを先に直す
=IMPRODUCT(“3+4i”,”3-4j”) が #NUM!i と j が混在しているどちらか一方にそろえる
=IMCONJUGATE(“3+4i”)+1 が #VALUE!戻り値が文字列IMREAL などで数値にする
=ABS(“3+4i”) が #VALUE!ABS は複素数を扱えないIMABS を使う

逆に、「3 + 4i」や「 3+4i 」のような半角の空白は問題になりません。見た目は正しいのにエラーになるなら、全角の空白や数字が紛れていないか疑ってみてください。

#N/A のセルを参照したときは、#VALUE! に変わらず #N/A がそのまま返ってきます。ネットの解説(Excel 向けを含む)では、別のエラー名が書かれていることもあります。スプレッドシートではこの表を基準にしてください。

i と j の混在は、z × z̄ や V × I* のように2つの複素数を掛けるときに起きがちです。COMPLEX で j 表記を作った列と、i で手入力した列を混ぜないようにしましょう。

IFERRORでエラーを吸収する

入力データに書式の乱れが混じりそうなら、IFERROR関数で包んでおくと表全体が崩れません。IFERROR は、エラーのときに代わりの値を返す関数です。

=IFERROR(IMCONJUGATE(A2), "形式エラー")

一般に IFERROR はエラーの種類を問わず置き換えます。ただ、何でも隠してしまうと原因に気づきにくくなります。まず早見表で原因をつぶし、それでも混入が避けられない列にだけ使うのがおすすめ。

IMCONJUGATEと組み合わせる複素数関数とExcel版との違い

組み合わせて使うIM系関数

IMCONJUGATE は「複素数から複素数を作る」関数なので、単体よりも他の IM 系関数と組み合わせる場面が中心です。この記事で登場した関数と、その役割をまとめました。

関数役割この記事での使いどころ
COMPLEX実部と虚部から複素数を作るCOMPLEX の結果を共役にする
IMREAL実部を数値で取り出すz×z̄ の数値化・有効電力
IMAGINARY虚部を数値で取り出す割り算の虚部・無効電力
IMABS絶対値(大きさ)を返す絶対値の二乗の検算・皮相電力
IMARGUMENT偏角(位相角)を返す共役で偏角の符号が反転することの確認
IMPRODUCT複素数の掛け算z×z̄ と V×I* の計算
IMDIV複素数の割り算共役を使った割り算との一致確認
IMSUM複素数の足し算IM 系の結果どうしを足すとき
IMSUB複素数の引き算IM 系の結果どうしの差を取るとき

共役を取ると複素平面上で実軸に対して折り返すため、偏角は符号が逆になります(実軸上の数は除く)。z = 3+4i の偏角は約 0.927 ラジアンで、3-4i は約 -0.927 ラジアン。位相の向きを確かめたいときは IMARGUMENT と並べてみると分かりやすいですよ。

また、IM 系の結果どうしを + で足すと #VALUE! になります。足し算は IMSUM、引き算は IMSUB を使いましょう。

Excelで使う場合

Excel にも同じ名前の IMCONJUGATE 関数があり、構文は同じです。ただし、この記事のエラーの規則は Google スプレッドシートで確かめた内容のため、Excel では異なる場合があります。Excel で使う方はExcelのIMCONJUGATE関数の使い方をご覧ください。

まとめ

スプレッドシートのIMCONJUGATE関数は、共役複素数を1つの式で求められる関数です。要点を振り返っておきましょう。

  • =IMCONJUGATE("3+4i") は 3-4i を返す。虚部の符号だけを反転し、実部はそのまま
  • 戻り値は文字列。数値が欲しいときは IMREAL や IMABS を通す
  • 代表的な使い道は、絶対値の二乗(z×z̄)・割り算の分母の実数化・複素電力 S = V × I* の3つ
  • #NUM! の主な原因は大文字の I・全角文字・全角の空白。半角の空白は問題ない

共役を使いこなせたら、掛け算と割り算の関数も押さえておくと複素数の計算がぐっと楽になります。次に読むならこの3本がおすすめです。

タイトルとURLをコピーしました