スプレッドシートのIMCOSH関数の使い方|複素数coshとエラー対処

スポンサーリンク

スプレッドシートで複素数の cosh を計算しようとして、こんなところで手が止まっていませんか。

  • IMCOSH を使ったら「-27.03…+3.85…i」が返ってきて、計算への使い方が分からない
  • 書式どおりに入れたつもりなのに #NUM! が出る
  • Excel のヘルプを読んだら、手元のエラーの種類と説明が違う

じつは IMCOSH の結果は数値ではなく文字列です。そのまま足し算や丸めにかけると、思わぬエラーにつまずきます。エラーの規則も、Excel 版のヘルプとは一部異なるのが厄介なところ。

この記事では、GoogleスプレッドシートのIMCOSH関数の書き方を解説します。結果の分解・丸め・検算、エラーの早見表までまとめたので、式はコピーしてそのまま使えますよ。

スプレッドシートのIMCOSH関数とは(複素数のcoshを返す・逆関数ではない)

GoogleスプレッドシートのIMCOSH関数は、複素数の双曲線余弦(ハイパボリックコサイン、cosh)を返す関数です。分類はエンジニアリング関数。電気回路や制御、物理の計算で複素数を扱うときに出番があります。

COSH は双曲線余弦(hyperbolic cosine)を表す記号です。IMABS や IMREAL と同じく、名前が IM で始まる複素数の関数の仲間です。

名前が似ていて紛らわしいのですが、IMCOSH は逆双曲線余弦(acosh)ではありません。実数の cosh をそのまま複素数に広げた関数です。英語の解説サイトには逆関数と説明しているものもあるので、気をつけましょう。

書式は引数が1つだけのシンプルな形です。

=IMCOSH(複素数)
項目内容
引数複素数。"4+3i" のような文字列・セル参照・COMPLEX関数の結果・実数
戻り値a+bi 形式の文字列(例: -27.0349456030742+3.85115333481178i)
分類エンジニアリング

内部では次の定義式で計算しています。

cosh(a+bi) = cosh(a)·cos(b) + i·sinh(a)·sin(b)

実部が cosh(a)·cos(b)、虚部が sinh(a)·sin(b) という組み立てです。

実数の COSH は常に 1 以上の値を返します。一方、複素数では cos(b) の符号しだいで実部が負にもなるのがポイント。後で出てくる "4+3i" の実部が -27.03… になるのは、cos(3) が負だからです。

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

引数の渡し方は、文字列・セル参照・COMPLEX関数の3通りです。結果の例と一緒に順に見ていきましょう。

なお、記事中の結果は計算上の値です。セルに表示される桁数は、環境によって多少異なる場合があります。

文字列で複素数を直接指定する

いちばん手軽なのは、複素数を文字列で直接書く方法です。

=IMCOSH("4+3i")

結果は -27.0349456030742+3.85115333481178i です。実部は cosh(4)·cos(3)、虚部は sinh(4)·sin(3) を計算した値。Microsoft の Excel 版ヘルプに載っている例と同じ値になります。

複素数はダブルクォーテーションで囲んで渡してください。虚数単位は小文字の i(電気系の表記なら小文字の j)を使います。大文字の I や全角の i はエラーになるので、後述の早見表で確認しておきましょう。

セル参照・COMPLEX関数で指定する

実務では、A列に複素数を並べて B列で計算する形が多いですよね。B2 に =IMCOSH(A2) と入れて下にコピーすると、次のようになります。

行A列(入力)B列 =IMCOSH(A2) の結果
201
31+1i0.833730025131149+0.988897705762865i
41+2i-0.642148124715491+1.06860742138278i
54+3i-27.0349456030742+3.85115333481178i

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

=IMCOSH(A2)
=IMCOSH(COMPLEX(1, 2))
=IMCOSH(COMPLEX(C2, D2))

2行目の =IMCOSH(COMPLEX(1, 2)) は、表の4行目(1+2i)と同じ結果です。3行目のように、実部を C列・虚部を D列に置いた表でもそのまま使えます。

実数だけ・純虚数だけを渡したとき

虚部のない実数を渡すと、実数の COSH関数と同じ値が返ります。実数 3.5 の例と、純虚数の例で見てみましょう。

=IMCOSH(3.5)    → 16.5728246710573
=IMCOSH("1i")   → 0.54030230586814

=IMCOSH(1) なら cosh(1) で約 1.5431 です。ただし IM 系の戻り値は文字列が原則。結果を数値として後の計算に使うなら、IMREAL関数で実部を取り出しておくと確実です。

2行目のように実部が 0 の純虚数 bi を渡すと、結果は cos(b) になります。cosh(0)=1、sinh(0)=0 なので、虚部が消えて cos(1) の値だけが残るわけです。

虚部 b はラジアンとして扱われる点にも注意しましょう。角度を度で持っている場合は、RADIANS関数で変換してから COMPLEX に渡します。

ARRAYFORMULAで複数行をまとめて計算する

行ごとに式をコピーする代わりに、ARRAYFORMULA関数(数式を範囲全体に広げる関数)で包む方法もあります。

=ARRAYFORMULA(IMCOSH(A2:A5))

B2 に1つ入れるだけで、A2:A5 の4行分の結果が下へ並ぶはずです。展開先のセルに値が残っていると #REF! になるので、B3 以降は空けておいてください。

うまく展開されないときは、B2 の =IMCOSH(A2) を下へコピーする方法に戻しましょう。

IMCOSHの結果の文字列の読み方と後処理

結果の -27.0349456030742+3.85115333481178i は、実部と虚部をつないだ1つの文字列です。前半の -27.0349456030742 が実部で、i の手前の 3.85115333481178 が虚部。

計算やグラフに使うには、この文字列を数値に分けるひと手間が必要になります。

そのまま+や*で計算すると#VALUE!になる理由

+ や * は数値どうしの演算子です。複素数の文字列は数値に読み替えられないため、そのまま計算すると #VALUE! になります。

=IMCOSH("4+3i")+1             → #VALUE!
=IMSUM(IMCOSH("4+3i"), 1)     → -26.0349456030742+3.85115333481178i

複素数どうしは、IMSUM(和)・IMSUB(差)・IMPRODUCT(積)・IMDIV(商)で計算します。

紛らわしいのが、結果の虚部が 0 になるケース。1 のような数字だけの文字列は数値に読み替えられるため、+ でも計算できてしまうことがあります。入力しだいで動いたり止まったりする式にならないよう、IM 系の関数か IMREAL を挟む習慣をつけておきましょう。

IMREAL・IMAGINARY・IMABSで分解する

結果を数値として使いたいときは、次の3つの関数で分解します。

B2: =IMCOSH(A2)
C2: =IMREAL(B2)       ← 実部
D2: =IMAGINARY(B2)    ← 虚部
E2: =IMABS(B2)        ← 絶対値(大きさ)

A2 が 4+3i なら、C2 は -27.0349456030742、D2 は 3.85115333481178 です。E2 の絶対値は約 27.3079 になります。

C〜E列は普通の数値なので、SUM・ROUND・グラフにそのまま使えます。なお、ABS("3+4i") のように数値用の ABS関数へ複素数を渡すと #VALUE! です。大きさを求めるなら IMABS を使いましょう。

それぞれの詳しい使い方は、IMREAL関数・IMAGINARY関数・IMABS関数の記事で解説しています。

COMPLEXとROUNDで桁を丸める

ROUND関数は数値を丸める関数なので、a+bi の文字列をそのまま渡す使い方はできません。複素数の形を保ったまま桁を丸めたいときは、いったん分解して丸め、COMPLEX で組み直します。

=COMPLEX(ROUND(IMREAL(B2), 4), ROUND(IMAGINARY(B2), 4))

B2 が 4+3i の結果なら、-27.0349+3.8512i になります。戻り値は複素数の文字列のままなので、ほかの IM 系関数にそのまま渡せるのが利点です。

表示を見やすくしたいだけなら、C列・D列に分解した数値を ROUND するほうが手軽でしょう。

cos(b)との一致で検算する

式が正しく組めているか不安なときは、答えが分かっている値で試すのが早道です。純虚数 bi では cosh(bi)=cos(b) が成り立つので、COS関数と比べられます。

=IMCOSH(COMPLEX(0, PI()))   ← cos(π) なので -1 になるはず
=IMCOSH(COMPLEX(0, 1))      ← =COS(1) と同じ値になるはず

1行目が -1(またはごく近い値)になれば、計算は正しく動いています。

ただし COMPLEX(0, PI()/2) のように、理論上 0 になる値には注意が必要です。PI() は近似値なので、厳密な 0 ではなく約 6×10⁻¹⁷ のごく小さな値が残ることがあります。

そのため、一致の判定には誤差の幅を持たせましょう。上の2行目の結果を B2 に入れたなら、=ABS(IMREAL(B2)-COS(1))<1E-12 が TRUE で一致です。

IMSINH関数を使えば、恒等式 cosh²z−sinh²z=1 で確かめることもできます。

=IMSUB(IMPOWER(IMCOSH(A2),2), IMPOWER(IMSINH(A2),2))

実部が 1(またはごく近い値)になればOK。浮動小数の誤差で、虚部にごく小さな値が出ることもあります。

IMCOSH関数のエラーと「エラーにならない」落とし穴

IMCOSH のエラーは、ほとんどが「複素数として読めない入力」で起こります。逆に、エラーになりそうでならない入力もあるのが落とし穴。

入力と結果の早見表(スプレッドシート実機)

スプレッドシートでの入力と結果の対応は次のとおりです。IMCOSH だけでなく、IM 系の関数に共通する規則になっています。

入力の例結果原因
=IMCOSH(" 4 + 3i ")(半角の空白)"4+3i" と同じ値半角の空白は無視される
=IMCOSH("3 + 4i")(全角の空白)#NUM!全角の空白は読めない
=IMCOSH("3+4I")(大文字)#NUM!虚数単位は小文字だけ(大文字 J も同じ)
=IMCOSH("3+4i")・=IMCOSH("3+4i")#NUM!全角の文字が混じっている
=IMCOSH("3+4k")・=IMCOSH("hello")#NUM!i・j 以外の文字、複素数でない文字列
=IMCOSH(TRUE)#NUM!論理値は受け付けない
=IMCOSH(A2)(A2 が #N/A)#N/A元のエラーがそのまま返る
=IMCOSH("4+3i")+1#VALUE!結果の文字列を + で計算した

半角の空白はエラーにならないので、見た目が崩れた入力でも気づかずに計算が進みます。逆に #NUM! が出たら、まず全角の文字と大文字を疑ってみてください。

手入力のデータなら、入力モードを半角英数に切り替えて打ち直すのが確実です。#N/A が出たときは IMCOSH ではなく、参照先のセル側に原因があります。

Excelのヘルプと違う点(論理値は#NUM!)

Microsoft の Excel 版ヘルプでは、論理値を渡したときのエラーは #VALUE! と説明されています。一方、スプレッドシートでは =IMCOSH(TRUE) は #NUM! です。

Excel の説明を読んでからスプレッドシートで試すと、エラーの種類が食い違って戸惑うかもしれません。スプレッドシートで作業するなら、上の早見表を基準にしてください。

IFERRORでまとめて吸収する

入力の形式がそろっていないデータを一括処理するなら、IFERROR関数で包んでおくと表が見やすくなります。

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

ただし、参照先の #N/A まで同じメッセージに置き換わる点には注意が必要です。原因の切り分けが済むまでは包まずに、早見表でエラーの種類を確かめておきましょう。

Excel版との違いと関連関数

書式はスプレッドシートも Excel も =IMCOSH(複素数) で共通です。=IMCOSH("4+3i") の結果も、Excel 版ヘルプの例と同じ値になります。

ただし「完全に同じ」ではありません。前の章で見たとおり、論理値を渡したときのエラーの種類は、Excel 版ヘルプの説明と異なります。Excel 側の使い方や対応環境は、ExcelのIMCOSH関数の記事で確認してください。

双曲線系・三角系の関数ファミリー対応表

cosh 以外を求めたいとき、または検算に別の関数を使いたいときは、次の表から探してみてください。

関数計算するものこんなときに
IMCOSHcosh(z)双曲線余弦を求める(この記事)
IMSINHsinh(z)対になる sinh を求める・cosh²−sinh²=1 で検算する
IMTANHtanh(z)sinh÷cosh を1つの関数で求める
IMSECHsech(z)cosh の逆数(1/cosh)を求める
IMCSCHcsch(z)sinh の逆数(1/sinh)を求める
IMCOTHcoth(z)cosh÷sinh を求める
IMCOScos(z)三角系の余弦を求める(cosh(iz)=cos(z) の関係)
IMSINsin(z)三角系の正弦を求める
IMEXPe^zcosh z=(e^z+e^−z)/2 で検算する

IMSECH・IMCSCH・IMCOTH は「cosh・sinh の逆数や比」と覚えておくと、迷いにくくなります。結果の後処理は、どの関数でも IMREAL・IMAGINARY・IMABS で共通です。

まとめ

GoogleスプレッドシートのIMCOSH関数は、複素数の cosh(双曲線余弦)を返す関数です。逆関数の acosh ではありません。

  • 書式は =IMCOSH(複素数)。文字列・セル参照・COMPLEX の結果・実数を渡せる
  • 結果は a+bi 形式の文字列。=IMCOSH("4+3i") は -27.0349456030742+3.85115333481178i
  • 実数 a なら cosh(a)、純虚数 bi なら cos(b) と同じ値になる
  • 結果を + で計算すると #VALUE!。複素数どうしは IMSUM などの IM 系で計算する
  • 数値として使うなら IMREAL・IMAGINARY・IMABS で分解する
  • 丸めは COMPLEX(ROUND(IMREAL(x),4),ROUND(IMAGINARY(x),4)) の形で
  • 全角の文字・全角の空白・大文字の I/J・論理値は #NUM!、半角の空白は無視される
  • 参照先のエラーは #N/A などがそのまま返る
  • 論理値のエラーの種類は、Excel 版ヘルプの説明(#VALUE!)と異なる

まずは =IMCOSH("4+3i") を入れて、IMREAL と IMAGINARY で分解するところまで試してみてください。結果が文字列だと分かっていれば、その先の計算でつまずくことはぐっと減るはずです。

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