スプレッドシートのIMCOTH関数の使い方|coth(z)とIMCOTの違い

スポンサーリンク

関数の一覧をながめていて「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 つ。

A 列に入力、B 列に IMCOTH の結果を置き、C 列と D 列で分解した例がこちらです。

A列(入力)B列 =IMCOTH(A2)C列 =IMREAL(B2)D列 =IMAGINARY(B2)
1+1i0.868014142895925-0.217621561854403i0.868014142895925-0.217621561854403
3+2i0.996757796569358+0.00373971037633696i0.9967577965693580.00373971037633696
3.51.001825428506441.001825428506440

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
IMCOTHcoth(z) = cosh(z)/sinh(z)この記事の関数COT+H(双曲線の余接)なし
IMTANHtanh(z) = sinh(z)/cosh(z)逆数(coth = 1/tanh)TAN+H(双曲線の正接)なし
IMCOSHcosh(z) = (e^z + e^-z)/2商の分子COS+H(双曲線の余弦)あり(2013 以降)
IMSINHsinh(z) = (e^z − e^-z)/2商の分母(0 になる点が極)SIN+H(双曲線の正弦)あり(2013 以降)
IMCSCHcsch(z) = 1/sinh(z)同じく sinh を分母に持つCSC+H(双曲線の余割)あり(2013 以降)
IMCOTcot(z) = cos(z)/sin(z)coth(iy) = -i·cot(y)H なし=三角関数の余接あり(2013 以降)

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

IMCOT と IMCOTH の見分け方(H の有無)

いちばん取り違えやすいのが、IMCOT と IMCOTH です。違いは末尾の H だけですが、中身はまったく別の関数になります。

比較項目IMCOTIMCOTH
種類三角関数(余接)双曲線関数(双曲線余接)
定義cos(z)/sin(z)cosh(z)/sinh(z)
周期π(実軸方向)πi(虚軸方向)
実数 x での値の範囲すべての実数1 より大きい、または -1 より小さい
引数に 1 を渡した結果0.6420926159343311.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 系の関数の関係がすっきり整理できます。

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