スプレッドシートのIMLN関数の使い方|複素数の自然対数と主値

スポンサーリンク

「スプレッドシートで複素数の自然対数を求めたら、1.6094…+0.9273…i という文字列が返ってきた。これ、どう読めばいいの?」

IMLN関数を初めて使うと、こんな疑問が出てきますよね。負の数を渡すと虚部に π が現れたり、IMEXP で戻したのに元の値と違ったり。

原因の多くは、「主値」と「戻り値が文字列」という2つの仕様にあります。ここを知らずに結果を使うと、位相の符号を読み違えたり、足し算で #VALUE! に悩まされたりしがちです。

この記事では、GoogleスプレッドシートのIMLN関数を実例で解説します。結果の読み方から主値の範囲、IMEXPとの関係、エラーの原因まで順に整理していきます。数値として取り出す方法まで押さえれば、計算シートにそのまま組み込めますよ。

スプレッドシートのIMLN関数とは

GoogleスプレッドシートのIMLN関数は、複素数の自然対数(底 e の対数)を返す関数です。名前は「imaginary(虚数)」と「ln(自然対数)」の組み合わせで、「アイエム・エルエヌ」と読めば通じます。

IMEXP(e のべき乗)の逆にあたる計算で、「逆自然対数(e のべき乗を求める計算)」とは別物なので、取り違えないようにしましょう。複素数を渡すと、結果も複素数の形をした文字列で返ってきます。

結果の読み方(実部=LN(IMABS(z))・虚部=IMARGUMENT(z))

IMLNの結果は、実部と虚部のそれぞれに意味があります。複素数 z を「絶対値 |z|」と「偏角 θ」で表すと、自然対数は次の式になります。

ln(z) = ln|z| + i × arg(z)
      = LN(絶対値) + i × 偏角(ラジアン)

実部は絶対値の自然対数、虚部は偏角そのもの。=IMLN("3+4i") を例に、中身を分解してみましょう。

項目値(約)検算に使う式
=IMLN("3+4i") の結果1.6094+0.9273i—
実部1.6094…(ln 5)=LN(IMABS("3+4i"))
虚部0.9273…(ラジアン)=IMARGUMENT("3+4i")

3+4i の絶対値は5なので、実部は LN(5) と一致します。虚部の 0.9273 ラジアンを度に直すと、約 53.13°。

絶対値はIMABS関数、偏角はIMARGUMENT関数で個別に求められます。結果が合っているか不安なときの検算に使ってみてください。

なお、公式ヘルプ(英語版)の注記にある定義式は、確認できた範囲では実部の ln が省略された形です。読み比べるときは、上の式を基準にしておきましょう。

LN関数との違い

正の実数を渡すと、IMLNの結果は LN と同じ値になり、虚部は 0 です。たとえば =IMLN(5) と =LN(5) は、どちらも 1.6094… を返します。

違いは次の2点。

  • LN は負の数を渡すとエラーになるが、IMLN は負の数や複素数も計算できる
  • LN の戻り値は数値、IMLN の戻り値は文字列(そのまま足し算できない)

底を10や2にしたいときは、IMLOG10関数やIMLOG2関数の出番です。どちらも IMLN の結果を ln10・ln2 で割った値になるので、考え方は共通ですよ。

IMLN関数の書き方と基本の使い方

構文と引数

=IMLN(複素数)
引数必須/任意説明
複素数必須自然対数を求める複素数。"3+4i" のような文字列・数値・セル参照で指定する

引数に数値を渡すと、虚部 0 の複素数として扱われます。虚数単位は小文字の i と j のどちらでも書けますが、大文字の I・J はエラーになるので気をつけましょう。

文字列・セル参照・COMPLEXで渡す

複素数の渡し方は3通りあります。

=IMLN("3+4i")          ← 文字列で直接指定
=IMLN(A2)              ← A2 に「3+4i」が入っている場合
=IMLN(COMPLEX(3, 4))   ← 実部と虚部の数値から組み立てる

3つとも結果は同じで、約 1.6094+0.9273i。実部と虚部が別々の列に入っているなら、COMPLEX関数で組み立てる3つ目の書き方が便利です。

複数行をまとめて計算したいときは、ARRAYFORMULA(数式を範囲全体に展開する関数)で範囲ごと渡せます。

=ARRAYFORMULA(IMLN(A2:A6))

A2〜A6 の自然対数が、数式を入れたセルから下へ順に展開されます。範囲は複素数が入っている行だけに絞っておくと、余計な結果が並ばずに済みますよ。

結果をIMREAL・IMAGINARYで数値として取り出す

IMLNの結果は、見た目は数値の組でも中身は文字列です。続けて計算に使うなら、IMREAL関数で実部を、IMAGINARY関数で虚部を数値として取り出しましょう。

=IMREAL(IMLN("3+4i"))      ← 1.6094…(実部・数値)
=IMAGINARY(IMLN("3+4i"))   ← 0.9273…(虚部・数値)

取り出した値は普通の数値なので、四則演算や DEGREES 関数での度への変換にそのまま使えます。

主値の範囲とIMEXPとの関係

複素数の偏角は、2π(360°)を足しても同じ向きを指します。そのため ln(z) の虚部は本来いくつも考えられますが、IMLN が返すのは「主値」と呼ばれる1つだけ。範囲は -π より大きく π 以下(-π < θ ≤ π)です。

象限ごとの結果を並べると、次のとおりです。

入力IMLNの結果(約)虚部の意味
"3+4i"(第1象限)1.6094+0.9273i偏角 約53.13°
"-3+4i"(第2象限)1.6094+2.2143i偏角 約126.87°
"-3-4i"(第3象限)1.6094-2.2143i偏角 約-126.87°
"-1"(負の実数)0+3.1416i偏角 π(180°)
"0-1i"(純虚数)0-1.5708i偏角 -π/2(-90°)

上の3行はどれも絶対値が5なので、実部は 1.6094 で揃います。注目したいのは第2象限の虚部。ATAN(4/-3) で計算すると -0.9273 になり、符号から違ってしまいます。

y/x の比だけを使う ATAN では、どの象限かという向きの区別が消えるためです。手計算で検算するときは、IMARGUMENT と見比べるようにしましょう。

負の実数では虚部が+πになる

=IMLN("-1") の結果は 0+3.14159…i で、虚部は +π になります。オイラーの等式 e^(iπ) = -1 の両辺の対数を取った形ですね。

-1 の偏角は π とも -π とも言えます。主値の範囲は「π 以下」で「-π を含まない」ため、+π のほうが選ばれるわけです。=IMLN("-4.6") も同じで、虚部は π、実部は LN(4.6) ≈ 1.5261 になります。

IMEXP→IMLNの往復で元に戻らないケース

IMLNとIMEXP関数は逆の計算ですが、どちらを先に使うかで結果が変わるのがポイント。

=IMEXP(IMLN("3+4i"))   ← 3+4i に戻る
=IMLN(IMEXP("1+4i"))   ← 1+4i ではなく、約 1-2.2832i になる

IMLN → IMEXP の順なら、0 以外の複素数は元の値に戻ります。ただし、表示の末尾にわずかな計算誤差が出ることはあるかもしれません。

逆に IMEXP → IMLN の順では、虚部が主値の範囲に収まっているときだけ元に戻ります。1+4i の虚部 4 は π(約3.1416)を超えているため、2π を引いた 4-2π ≈ -2.2832 に折り返されるわけです。実部の 1 はそのまま。

位相を連続して追いかける計算では、この折り返しで値が急に飛ぶ点に注意しましょう。必要なら、前の行との差が π を超えたときに 2π を足し引きする補正(アンラップ)を後段に入れてください。

実務での使いどころ

振幅と位相に分解する

IMLNが役立つのは、複素数を「大きさ」と「位相」に分けて読みたい場面です。交流回路のフェーザ(振幅と位相を複素数で表したもの)や、周波数応答の計算が代表例。

A列に複素数が並んでいるなら、次のように列を作ります。

B2: =IMLN(A2)              ← 自然対数
C2: =EXP(IMREAL(B2))       ← 振幅(絶対値)
D2: =IMAGINARY(B2)         ← 位相(ラジアン)
E2: =DEGREES(D2)           ← 位相(度)

実部に EXP をかけると ln が外れて絶対値に戻り、虚部はそのまま位相になる仕組み。サンプルの4行で計算すると、次のようになります。

A列(複素数)C列 振幅D列 位相(rad)E列 位相(度)
3+4i50.927353.13
-3+4i52.2143126.87
-3-4i5-2.2143-126.87
0-2i2-1.5708-90

表の数値は、ラジアンを小数点以下4桁、度を2桁に丸めています。振幅を dB で見たい場合は、=20*IMREAL(B2)/LN(10) で 20·log10|z| を計算できます。3+4i なら約 13.98 dB。

振幅と位相を出すだけなら、IMABS・IMARGUMENT を直接使っても同じ値が得られます。IMLN を経由すると、ゲインと位相を「対数の実部・虚部」として1列から取り出せるのが利点ですね。

IMEXPと組み合わせて複素数のべき乗を計算する

複素数を複素数でべき乗する z^w は、z^w = e^(w × ln z) という関係で計算できます。指数が実数ならIMPOWER関数で足りますが、指数そのものが複素数のときは IMLN と IMEXP を組み合わせましょう。

A2: 1+i                                  ← 底 z
B2: 2+i                                  ← 指数 w
C2: =IMEXP(IMPRODUCT(B2, IMLN(A2)))      ← z^w

IMPRODUCT(複素数の掛け算)で w と ln z を掛け、IMEXP で e のべき乗に戻す流れです。(1+i)^(2+i) なら、結果はおよそ -0.31+0.86i になります。

ここで使う ln z も主値なので、z^w も主値に基づく1つの値が返ります。手計算や別のツールと比べるときは、偏角の取り方をそろえておきましょう。

IMLN関数のよくあるエラーと対処法

症状別のエラー早見表

IMLNのエラーは、ほかのIM系関数と同じ規則で起こります。症状から引けるように、入力の例と対処を並べました。

症状(入力の例)結果対処
大文字の I・J("3+4I")#NUM!虚数単位を小文字の i か j にする
全角の文字("3+4i"・"3+4i")#NUM!半角で入力し直す
全角の空白("3 + 4i")#NUM!全角の空白を消す
i・j 以外の文字("3+4k"・"hello")#NUM!「a+bi」の形式に直す
論理値(=IMLN(TRUE))#NUM!数値か複素数の文字列を渡す
参照先がエラー(#N/A など)元のエラーがそのまま返る参照先のエラーを先に直す
IMLNの結果に +1 などの計算#VALUE!IMREAL・IMAGINARYで数値にする
半角の空白("3 + 4i")エラーにならない対処不要(空白なしと同じ値)

迷いやすいのは、半角の空白はエラーにならないのに全角の空白は #NUM! になる点。見た目では区別しにくいので、エラーが出たら半角で打ち直すのが近道です。

0 を渡したときの結果は、公式ヘルプに記載がありません。数学的に ln(0) は定義されないため、0 が入りうる列は先に除外しておくと安全です。

=IF(A2="", "", IF(IMABS(A2)=0, "対数なし", IMLN(A2)))

空白セルと 0 を先に分けておけば、残りの行だけを IMLN で計算できます。形式の誤りもまとめて受け止めたいなら、=IFERROR(IMLN(A2), "要確認") で包みましょう。

結果に足し算すると#VALUE!になる

=IMLN("3+4i")+1 のように、IMLNの結果へ直接 + で計算すると #VALUE! になります。戻り値が「1.6094…+0.9273…i」という文字列で、数値として扱えないためです。

対処は2通り。数値として計算したいなら IMREAL・IMAGINARY で取り出し、複素数のまま足したいなら IMSUM を使います。

=IMREAL(IMLN("3+4i"))+1      ← 2.6094…(実部に1を足した数値)
=IMSUM(IMLN("3+4i"), "1")    ← 2.6094…+0.9273…i(複素数として足す)

なお、正の実数を渡したときなど、虚部が 0 の結果は数字だけの文字列で返ることがあります。その場合は + でも計算できてしまい、入力によって挙動が変わりがち。計算に使うときは必ず IMREAL を通す、と決めておくと安心です。

まとめ

GoogleスプレッドシートのIMLN関数は、複素数の自然対数を「実部=LN(絶対値)、虚部=偏角」の形で返す関数です。押さえておきたいポイントは次のとおり。

  • 構文は =IMLN(複素数)。文字列・セル参照・COMPLEXの結果を渡せる
  • 実部は LN(IMABS(z))、虚部は IMARGUMENT(z) と一致する
  • 虚部は主値(-π より大きく π 以下)。負の実数では +π になる
  • IMLN→IMEXP は元に戻るが、IMEXP→IMLN は虚部が範囲外だと 2π ずれる
  • 戻り値は文字列。計算には IMREAL・IMAGINARY で数値を取り出す
  • 大文字の I・J や全角文字は #NUM!、結果への直接の足し算は #VALUE!

Excel にも同名・同じ構文の IMLN 関数があります。Excel で使う場合は、ExcelのIMLN関数の使い方も参考にしてください。

複素数の対数は、読み方さえわかれば振幅・位相の分析やべき乗の計算に応用が利きます。まずは =IMLN("3+4i") を入力して、この記事の表の値と見比べるところから始めてみてください。

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