スプレッドシートで複素数の 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) の結果 |
|---|---|---|
| 2 | 0 | 1 |
| 3 | 1+1i | 0.833730025131149+0.988897705762865i |
| 4 | 1+2i | -0.642148124715491+1.06860742138278i |
| 5 | 4+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 以外を求めたいとき、または検算に別の関数を使いたいときは、次の表から探してみてください。
| 関数 | 計算するもの | こんなときに |
|---|---|---|
| IMCOSH | cosh(z) | 双曲線余弦を求める(この記事) |
| IMSINH | sinh(z) | 対になる sinh を求める・cosh²−sinh²=1 で検算する |
| IMTANH | tanh(z) | sinh÷cosh を1つの関数で求める |
| IMSECH | sech(z) | cosh の逆数(1/cosh)を求める |
| IMCSCH | csch(z) | sinh の逆数(1/sinh)を求める |
| IMCOTH | coth(z) | cosh÷sinh を求める |
| IMCOS | cos(z) | 三角系の余弦を求める(cosh(iz)=cos(z) の関係) |
| IMSIN | sin(z) | 三角系の正弦を求める |
| IMEXP | e^z | cosh 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 で分解するところまで試してみてください。結果が文字列だと分かっていれば、その先の計算でつまずくことはぐっと減るはずです。
