関数の一覧をながめていて「IMCOTH」という名前を見かけ、何の関数か気になった人もいるのでは? レポートで複素数の coth(z) が出てきて、Google スプレッドシートで手早く計算したい人もいるはずです。
ただ、この関数には少しクセがあります。名前は IMCOT とたった 1 文字違い。結果は文字列で返るので、虚部のある結果をそのまま足し算すると #VALUE! になってしまいます。
この記事では、スプレッドシートの IMCOTH 関数の書式と戻り値の扱い、実数・複素数・純虚数での使い方を解説します。IMCOT・IMTANH との違いやエラーの早見表もあるので、必要なところから読んでみてください。
対応バージョン: Google スプレッドシート。Excel には IMCOTH 関数がありません(同じ計算をする代わりの式は、最初の章で 1 行だけ紹介します)。
スプレッドシートのIMCOTH関数とは?
IMCOTH 関数は、複素数 z の双曲線余接 coth(z) を求める Google スプレッドシートの関数です。読み方は「イマジナリー・ハイパボリック・コタンジェント」。
名前の IM は虚数(imaginary)、COT は余接(cotangent)の略。末尾の H は双曲線(hyperbolic)を表しています。
使い方はシンプルで、複素数を 1 つ渡すだけ。coth(z) の値が "x+yi" 形式の文字列で返ってきます。実部と虚部に分けて手で計算しなくても、1 つのセルで答えが出せるのが便利なところです。
coth(z) = cosh(z)/sinh(z) の意味
coth は、双曲線余弦 cosh を双曲線正弦 sinh で割った値です。指数関数を使って書くと、次のようになります。
coth(z) = cosh(z) / sinh(z)
= (e^z + e^-z) / (e^z - e^-z)
= 1 / tanh(z)
つまり coth は tanh の逆数というわけです。分母の sinh(z) が 0 になる点(z = 0 や z = πi など)では値が決まらず、計算できません。この点は後半のエラーの章でもう一度取り上げます。
実数 x で考えると、x が 0 に近いほど値は大きく発散します。逆に x が大きくなるほど、値は 1 に近づいていくのが特徴。負の x では符号が反転するので、値は「1 より大きい」か「-1 より小さい」かのどちらかになります。
Excelで同じ計算をしたいとき
Excel には IMCOTH 関数がありません(IMTANH もありません)。一方、名前の似た IMCOT と IMTAN は Excel 2013 以降にあるので、取り違えないよう注意してください。Excel で coth(z) を求めたいときは、定義どおり cosh を sinh で割る式で代用できます。
=IMDIV(IMCOSH(A2), IMSINH(A2))
IMDIV・IMCOSH・IMSINH の 3 つは、どれも Excel にある関数です。代用式の詳しい使い方は、ExcelでIMCOTHの代わりに使う式の解説にまとめています。
IMCOTH関数の書式と戻り値の扱い
書式は、引数が 1 つだけのシンプルな形。
=IMCOTH(数値)
| 引数 | 内容 | 入力例 |
|---|---|---|
| 数値 | coth を求めたい複素数 | "3+2i" / "1+1j" / 3.5 / COMPLEX(4,1) / A2 |
引数に渡せる値(文字列・実数・COMPLEXの結果)
Google の公式ヘルプによると、引数には次の 3 種類の値を渡せます。
- COMPLEX 関数の結果:
IMCOTH(COMPLEX(4,1))のように、実部と虚部から作った複素数 - 実数:
IMCOTH(3.5)のように渡すと、虚部が 0 の複素数として扱われる - “x+yi” 形式の文字列:
IMCOTH("3+2i")のように、ダブルクォートで囲んで渡す
有効な複素数として読めない値を渡すと、エラーになります。実部と虚部が別々のセルにあるなら、COMPLEX関数で組み立てると書き間違いを減らせますよ。
戻り値は文字列。i と j は入力に合わせて返る
IMCOTH の結果は、数値ではなく文字列として返ります。これは IM 系の関数に共通する仕様です。
虚数単位は、入力で使った文字に合わせて返ってきます。i で渡せば i、j で渡せば j。
=IMCOTH("1+1i") → 0.868014142895925-0.217621561854403i
=IMCOTH("1+1j") → 0.868014142895925-0.217621561854403j
電気系の慣習で j を使っても、計算結果の数値そのものは変わりません。ただし、i の結果と j の結果を IMDIV や IMPRODUCT などでつなぐと #NUM! になります。シートの中では、どちらか一方にそろえておきましょう。
もう 1 つ気をつけたいのが四則演算です。戻り値が文字列なので、虚部のある結果に +1 などをつなぐと #VALUE! になります。数値として使いたいときは、次の IMREAL などで取り出すのが確実です。
実部・虚部・絶対値を取り出す(IMREAL・IMAGINARY・IMABS)
文字列の戻り値から数値を取り出す関数は、次の 3 つ。
- IMREAL関数: 実部を数値で取り出す
- IMAGINARY関数: 虚部を数値で取り出す
- IMABS関数: 絶対値(複素平面での大きさ)を求める
A 列に入力、B 列に IMCOTH の結果を置き、C 列と D 列で分解した例がこちらです。
| A列(入力) | B列 =IMCOTH(A2) | C列 =IMREAL(B2) | D列 =IMAGINARY(B2) |
|---|---|---|---|
1+1i | 0.868014142895925-0.217621561854403i | 0.868014142895925 | -0.217621561854403 |
3+2i | 0.996757796569358+0.00373971037633696i | 0.996757796569358 | 0.00373971037633696 |
3.5 | 1.00182542850644 | 1.00182542850644 | 0 |
C 列と D 列は普通の数値なので、グラフにしたり、ほかの数式に渡したりできます。絶対値が欲しいときは、=IMABS(B2) を E 列に足せば OK。後で計算に使う予定があるなら、最初から実部と虚部の 2 列に分けておくと扱いが楽になります。
IMCOTH関数の使い方(実数・複素数・純虚数)
ここからは、渡す値の種類ごとに使い方を見ていきます。実数・複素数・純虚数で、結果の読み方が少しずつ違うのがポイント。
実数を渡して coth(x) を計算する
虚部のない実数を渡すと、実数の coth(x) が返ります。
=IMCOTH(1) → 1.31303528549933
=IMCOTH(3.5) → 1.00182542850644
x = 1 では約 1.313 ですが、x = 3.5 ではほぼ 1 です。x が大きくなるほど 1 に近づく様子が、数字からも読み取れますね。なお、IMCOTH(-1) は IMCOTH(1) の符号を反転した値になります。
実数だけなら、=COSH(1)/SINH(1) でもほぼ同じ値を計算できます。それでも IMCOTH を使うのは、実数と複素数が混ざった列を 1 つの数式で処理できるから。入力の種類によって数式を書き分ける手間がなくなります。
複素数(i 形式・j 形式)を渡す
複素数を渡すと、実部と虚部を持つ文字列が返ってきます。公式ヘルプの例も含めて並べると、次のとおりです。
=IMCOTH("1+1i") → 0.868014142895925-0.217621561854403i
=IMCOTH("3+2i") → 0.996757796569358+0.00373971037633696i
=IMCOTH(COMPLEX(4,1)) → 0.999720649533931-0.000609900253822228i
j 形式なら "1+1j" と渡すだけで、結果も j で返ります。
結果が正しいか手で確かめたい人向けに、検算の公式も紹介しておきましょう。z = x + iy のとき、coth(z) は次の式で計算できます。
coth(x+iy) = (sinh(2x) − i·sin(2y)) / (cosh(2x) − cos(2y))
z = 1+1i なら x = 1、y = 1 です。スプレッドシートの実数の関数で、実部と虚部を別々に計算してみましょう。
実部: =SINH(2)/(COSH(2)-COS(2)) → 約 0.868
虚部: =-SIN(2)/(COSH(2)-COS(2)) → 約 -0.2176
IMCOTH(“1+1i”) の実部・虚部と一致するはずです。
純虚数 iy を渡すと -i·cot(y) になる
実部が 0 の純虚数 z = iy を渡すと、少しおもしろいことが起こります。双曲線関数の coth が、三角関数の cot に変わるのです。
coth(iy) = cosh(iy) / sinh(iy)
= cos(y) / (i·sin(y))
= -i·cot(y)
cosh(iy) = cos(y)、sinh(iy) = i·sin(y) という関係を使うと、この式が導けます。結果は「実部が 0、虚部が -cot(y)」の純虚数です。
y = 1 で確かめてみましょう。cot(1) は約 0.642 なので、IMCOTH の虚部は約 -0.642 になるはずです。
=IMAGINARY(IMCOTH(COMPLEX(0,1))) → 約 -0.642(-cot(1))
=-IMAGINARY(IMCOTH(COMPLEX(0,1))) → 約 0.642(cot(1))
=IMCOT(1) → 0.642092615934331
2 行目と 3 行目が同じ値になれば、関係式どおりです。実部は理論上 0 ですが、計算の誤差でごく小さな値が残ることもあります。cot 側の関数については、IMCOT関数の使い方を参考にしてください。
IMCOT・IMTANH との違いと検算
IM 系の三角関数・双曲線関数は、名前がよく似ています。関係を表で整理したうえで、取り違えやすい IMCOT との見分け方と、検算の方法を紹介しましょう。
IM系の双曲線関数・三角関数の比較表
IMCOTH とつながりの深い関数を、定義・関係・名前の見分け方でまとめました。Excel にあるかどうかも添えています。
| 関数 | 数式の定義 | IMCOTH との関係 | 名前の見分け方 | Excel |
|---|---|---|---|---|
| IMCOTH | coth(z) = cosh(z)/sinh(z) | この記事の関数 | COT+H(双曲線の余接) | なし |
| IMTANH | tanh(z) = sinh(z)/cosh(z) | 逆数(coth = 1/tanh) | TAN+H(双曲線の正接) | なし |
| IMCOSH | cosh(z) = (e^z + e^-z)/2 | 商の分子 | COS+H(双曲線の余弦) | あり(2013 以降) |
| IMSINH | sinh(z) = (e^z − e^-z)/2 | 商の分母(0 になる点が極) | SIN+H(双曲線の正弦) | あり(2013 以降) |
| IMCSCH | csch(z) = 1/sinh(z) | 同じく sinh を分母に持つ | CSC+H(双曲線の余割) | あり(2013 以降) |
| IMCOT | cot(z) = cos(z)/sin(z) | coth(iy) = -i·cot(y) | H なし=三角関数の余接 | あり(2013 以降) |
それぞれの関数の詳しい使い方は、次の記事で解説しています。
IMCOT と IMCOTH の見分け方(H の有無)
いちばん取り違えやすいのが、IMCOT と IMCOTH です。違いは末尾の H だけですが、中身はまったく別の関数になります。
| 比較項目 | IMCOT | IMCOTH |
|---|---|---|
| 種類 | 三角関数(余接) | 双曲線関数(双曲線余接) |
| 定義 | cos(z)/sin(z) | cosh(z)/sinh(z) |
| 周期 | π(実軸方向) | πi(虚軸方向) |
| 実数 x での値の範囲 | すべての実数 | 1 より大きい、または -1 より小さい |
| 引数に 1 を渡した結果 | 0.642092615934331 | 1.31303528549933 |
覚え方は「H が付いたら双曲線(hyperbolic)」。数式を入力したら、関数名の末尾に H があるかを一度見直す習慣をつけておくと安心です。実数を渡したのに結果が -1〜1 の範囲に収まったら、IMCOT と取り違えているサインかもしれません。
IMTANH の逆数・IMCOSH/IMSINH の商で検算する
coth には「tanh の逆数」「cosh と sinh の商」という 2 つの表し方があります。どちらの式で計算しても、IMCOTH と同じ値になるはず。A2 に複素数を入れて、3 つの式を並べてみてください。
=IMCOTH(A2)
=IMDIV(1, IMTANH(A2))
=IMDIV(IMCOSH(A2), IMSINH(A2))
3 つとも同じ値を返せば、計算の流れに問題はありません。ただし計算の順番が違うので、末尾の桁がわずかにずれることがあります。
目で桁を比べるのが大変なら、2 つの結果の差を IMSUB で取り、その大きさが十分小さいかを確かめましょう。
=IMABS(IMSUB(IMCOTH(A2), IMDIV(1, IMTANH(A2)))) < 1E-10
TRUE が返れば、ほぼ一致とみてよいでしょう。割り算に使った関数は、IMDIV関数の使い方で詳しく紹介しています。
スプレッドシートのIMCOTH関数でよくあるエラーと対処法
IMCOTH のエラーは、ほとんどが「入力の書き方」か「戻り値の扱い」が原因です。症状から原因を引けるように、表にまとめました。
症状から引くエラー早見表
| 入力・操作 | 例 | 結果 | 対処 |
|---|---|---|---|
| 半角の空白が入っている | IMCOTH("1 + 1i") | 空白なしと同じ値(エラーにならない) | そのままでよい |
| 全角の空白が入っている | IMCOTH("1 + 1i") | #NUM! | 全角の空白を消す |
| 虚数単位が大文字 | IMCOTH("1+1I") | #NUM! | 小文字の i か j にする |
| 全角の文字が混じっている | IMCOTH("1+1i")・IMCOTH("1+1i") | #NUM! | 半角に直す |
| i・j 以外の文字や単なる文字列 | IMCOTH("1+1k")・IMCOTH("hello") | #NUM! | 複素数の形に直す |
| 論理値を渡した | IMCOTH(TRUE) | #NUM! | 数値か複素数を渡す |
| 参照先がエラー値 | A2 が #N/A のときの IMCOTH(A2) | #N/A がそのまま返る | 参照先のエラーを先に直す |
戻り値に + をつないだ | =IMCOTH("1+1i")+1 | #VALUE! | IMSUM で足すか、IMREAL で取り出す |
| 戻り値に ABS を使った | =ABS(IMCOTH("1+1i")) | #VALUE! | IMABS を使う |
| i と j の結果を後段で混ぜた | =IMDIV(IMCOTH("1+1i"), "1+1j") | #NUM! | 虚数単位をそろえる |
見落としやすいのが、参照先のエラーがそのまま返るケースです。IMCOTH のセルに #N/A が出たら、参照先のセルを先に確かめてみましょう。
全角の空白が混じりやすいデータなら、渡す前に取り除いておくと安全です。
=IMCOTH(SUBSTITUTE(A2, " ", ""))
j 形式のデータを i 形式にそろえたいときは、SUBSTITUTE(A2, "j", "i") で置き換える方法もあります。
coth(0) や coth(nπi) で計算できない理由(極)
coth(z) は cosh(z) を sinh(z) で割った値でした。そのため、sinh(z) が 0 になる点では割り算ができません。こうした点を「極」と呼びます。
sinh(z) が 0 になるのは、z = 0、±πi、±2πi … のように、z が πi の整数倍のときです。実数の範囲では z = 0 の 1 点だけ。
IMCOTH(0) のようにちょうど極を渡すと、まともな値は返りません。エラーか桁外れに大きな値になると考えておきましょう。
紛らわしいのが、πi に「近い」値を渡したときです。COMPLEX(0, PI()) や "0+3.14159265i" の π は近似値なので、sinh(z) はぴったり 0 になりません。
その結果、エラーではなく巨大な値が返る可能性があります。誤差に大きく左右される数値なので、信用しないほうがよいでしょう。
極の近くの値が紛れ込むデータなら、先に sinh(z) の大きさを確かめると安心です。
=IF(IMABS(IMSINH(A2)) < 1E-9, "極に近い", IMCOTH(A2))
エラー表示だけを隠したいなら、=IFERROR(IMCOTH(A2), "計算できません") と包む方法もあります。ただ、極の近くで返る巨大な値は IFERROR では拾えません。上の IF の式と使い分けてください。
まとめ
スプレッドシートの IMCOTH 関数について、ポイントを振り返ります。
- IMCOTH は複素数の双曲線余接 coth(z) = cosh(z)/sinh(z) を求める関数で、書式は
=IMCOTH(数値) - 戻り値は文字列。数値で使うときは IMREAL・IMAGINARY・IMABS で取り出す
- 純虚数 iy を渡すと coth(iy) = -i·cot(y) となり、IMCOT と結びつく
- IMCOT とは末尾の H の有無だけの違い。
IMDIV(1, IMTANH(z))やIMDIV(IMCOSH(z), IMSINH(z))で検算できる #NUM!の多くは全角文字・大文字・論理値などの入力ミス。#VALUE!は戻り値に+や ABS を使ったときに出る
Excel には IMCOTH がありません。Excel で同じ計算をするなら、ExcelでIMCOTHの代わりに使う式の解説を参考にしてください。
複素数の作り方から確認したいときは、COMPLEX関数の記事がおすすめ。名前の近い IMTANH関数 や IMCOT関数 もあわせて読むと、IM 系の関数の関係がすっきり整理できます。

