ExcelのIMCOTH関数は無い|複素数の双曲線余接 coth(z) を計算する代用式と完全ガイド

スポンサーリンク

ExcelやGoogleスプレッドシートで複素数の双曲線余接 coth(z) を計算したいときに探されるのが、IMCOTH関数です。電気回路の伝送線路解析や制御工学のレポートで coth(γL) のような式を扱うとき、実数部と虚数部に分けて手計算するのは骨が折れますよね。

ところが結論から言うと、ExcelにはIMCOTH関数がありません。Excelに用意されている複素双曲線関数はIMCOSH(cosh)とIMSINH(sinh)までで、その商である coth に対応する専用関数は搭載されていないのです。「Excel IMCOTH」で検索しても使い方が出てこないのは、関数自体が存在しないからですね。

ただ、心配は要りません。=IMDIV(IMCOSH(z), IMSINH(z)) という代用式を使えば、複素数の双曲線余接はExcelで問題なく計算できます。この記事では、なぜExcelにIMCOTHが無いのかという前提から、代用式の組み立て方、実数・複素数・純虚数の渡し方、IMREAL/IMAGINARYでの数値化、極で計算できなくなる理由、IM系関数の違いまで丸ごと解説します。最後まで読めば、Excelで複素数の coth を扱うときに迷うことはなくなりますよ。

  1. ExcelのIMCOTH関数とは?実は存在しない複素双曲線関数
    1. ExcelにIMCOTHが無い理由とMicrosoftの関数体系
    2. IMCOTHが必要になる場面
    3. Googleスプレッドシートなら専用関数がある
  2. ExcelでIMCOTHを計算する代用式|IMDIV+IMCOSH+IMSINH
    1. 代用式の引数の渡し方
    2. 同じ複素数を2回書かないコツ
  3. 代用式の使い方①|実数を渡して coth(x) を計算する
    1. 検算用テーブルの例
  4. 代用式の使い方②|複素数(i形式・j形式)を渡す
    1. 代表的な複素数の計算例
    2. i形式とj形式の使い分け
    3. COMPLEX関数で j形式を生成する
  5. 代用式の使い方③|純虚数で cot(y) を逆算する
    1. 純虚数を渡した結果
    2. IMAGINARY関数で実数として取り出す
  6. 代用式の応用|検算・IMTANHとの逆数関係・伝送線路計算
    1. 応用①|coth(z)·tanh(z) = 1 の検証(IMTANHも代用式で)
    2. 応用②|cosh²(z) − sinh²(z) = 1 を経由した整合性チェック
    3. 応用③|伝送線路の入力インピーダンス計算
  7. 代用式でよくあるエラーと対処法(#NAME!・#NUM!・i/j混在)
    1. #NAME? エラー: IMCOTHは関数として認識されない
    2. #NUM! エラー: coth(0) と coth(nπi) は計算できない
    3. 複素数の書式違反とi/j混在エラー
    4. 戻り値が文字列になる問題
  8. IMCOTH・IMCOSH・IMSINH・IMCOT・IMTANHの違いを整理
    1. IMCOTとIMCOTHの見分け方
    2. 双曲線関数と三角関数の関係
  9. ExcelのIMCOTH(代用式)よくある質問(FAQ)
    1. Q1. ExcelにIMCOTH関数はありますか?
    2. Q2. =IMCOTH("1+2i") と入力したら #NAME? エラーになりました。なぜ?
    3. Q3. 代用式の戻り値で四則演算するにはどうすればよいですか?
    4. Q4. 虚数単位は「i」と「j」のどちらを使えばよいですか?
    5. Q5. coth(z) の結果が #NUM! になりました。バグですか?
    6. Q6. 代用式の結果が IMCOTH(スプレッドシート)と一致するか確かめたいです
  10. まとめ

ExcelのIMCOTH関数とは?実は存在しない複素双曲線関数

冒頭でお伝えしたとおり、IMCOTH関数はExcelには存在しない関数です。IMCOTH(イマジナリー・ハイパボリック・コタンジェント)は本来、指定した複素数 z の双曲線余接 coth(z) を返すエンジニアリング関数として知られています。実際にこの名前の関数を備えているのはGoogleスプレッドシートのほうで、Excelには搭載されていません。

数学的な定義は、双曲線余弦と双曲線正弦の商です。

coth(z) = cosh(z) / sinh(z) = (e^z + e^-z) / (e^z - e^-z)

z が実数 x のときは (e^x + e^-x) / (e^x - e^-x) という形になり、|x| が大きくなると ±1 に漸近します。z が複素数 x+yi のときは、虚数方向に π の周期を持つ周期関数になるのが特徴です。

ExcelにIMCOTHが無い理由とMicrosoftの関数体系

Excelが2013で追加したエンジニアリング関数には、複素三角関数のIMCOS・IMSIN・IMTAN・IMCOT・IMSEC・IMCSCと、複素双曲線関数のIMCOSH・IMSINH・IMSECH・IMCSCHが含まれます。一方で双曲線正接のIMTANHと双曲線余接のIMCOTHは、このときも、現在のMicrosoft 365でも追加されていません

そのため =IMCOTH("1+2i") とExcelに入力すると、#NAME? エラーになります。関数名として認識されないためです。Excelで複素数の coth が必要なときは、次の章で紹介する代用式を使います。

IMCOTHが必要になる場面

複素数の coth が現れる代表的なシーンは次のとおりです。

  • 伝送線路方程式(分布定数回路の入力インピーダンス Z_in = Z_0 · coth(γL)
  • 制御工学における伝達関数の安定性解析
  • 熱伝導のフィン効率を複素周波数領域で扱う計算
  • 量子統計のボーズ・アインシュタイン分布の温度依存項

「複素関数論は学校で習ったきり」という方でも大丈夫です。計算自体は代用式が引き受けてくれるので、式の意味だけ理解しておけば十分活用できますよ。

Googleスプレッドシートなら専用関数がある

同じ計算をGoogleスプレッドシートで行う場合は、IMCOTH関数がそのまま使えます。=IMCOTH("1+2i") と書くだけで複素数の双曲線余接が返ります。Excelとスプレッドシートを併用しているチームでは、この違いを知っておくと移植時のトラブルを防げます。詳しくはGoogleスプレッドシートのIMCOTH関数で解説しています。

ExcelでIMCOTHを計算する代用式|IMDIV+IMCOSH+IMSINH

ExcelでIMCOTH相当の計算をしたいときは、定義式 coth(z) = cosh(z) / sinh(z) をそのまま関数に置き換えます。使うのはIMDIV関数(複素数の除算)とIMCOSH関数IMSINH関数の3つです。

=IMDIV(IMCOSH(複素数), IMSINH(複素数))

A1に "1+2i" を入れておくと、次のように coth(1+2i) が計算できます。

A1: 1+2i
A2: =IMDIV(IMCOSH(A1), IMSINH(A1))
       → "1.00323862735359+0.00375873379655416i"

IMDIV・IMCOSH・IMSINHはいずれもExcelとGoogleスプレッドシートの両方に存在します。最初からこの代用式で書いておけば、両環境で同じワークブックを共有しても結果が変わりません。

代用式の引数の渡し方

代用式の引数(複素数)の渡し方は、IMCOSH・IMSINHと共通です。次の3通りが使えます。

渡し方補足
文字列リテラル=IMDIV(IMCOSH("1+2i"), IMSINH("1+2i"))"x+yi" または "x+yj" 形式
セル参照=IMDIV(IMCOSH(A1), IMSINH(A1))A1に複素数文字列を入れておく
COMPLEX関数=IMDIV(IMCOSH(COMPLEX(1,2)), IMSINH(COMPLEX(1,2)))実数部・虚数部を別々に管理

戻り値は複素数を表す文字列で、"a+bi" の形式で返ります。実数部しか持たない結果でも文字列扱いになる点に注意してください。例えば =IMDIV(IMCOSH(1), IMSINH(1)) の結果は数値の 1.3130... ではなく文字列の "1.31303528549933" です。

同じ複素数を2回書かないコツ

代用式では同じ複素数を2回書くことになるので、引数はセル参照にしておくのが安全です。直接 "1+2i" を2回タイプすると、片方だけ書き換えてミスする原因になります。

A1: 1+2i                              ← 複素数はセルで一元管理
B1: =IMDIV(IMCOSH(A1), IMSINH(A1))    ← A1を2回参照する

実数部と虚数部を別セルで管理したい場合は、COMPLEX関数と組み合わせると入力ミスを防げます。COMPLEX関数は数値2つから複素数文字列を組み立てる関数です。シミュレーションのパラメータを書き換えるときも安心ですよ。

代用式の使い方①|実数を渡して coth(x) を計算する

まずは一番シンプルな実数の双曲線余接から見ていきましょう。虚数部が 0、つまり実数だけを渡したときは、おなじみの coth(x) = (e^x + e^-x) / (e^x – e^-x) の値が返ります。

=IMDIV(IMCOSH(1), IMSINH(1))      → "1.31303528549933"
=IMDIV(IMCOSH(2), IMSINH(2))      → "1.03731472072755"
=IMDIV(IMCOSH(0.5), IMSINH(0.5))  → "2.16395341373865"
=IMDIV(IMCOSH(-1), IMSINH(-1))    → "-1.31303528549933"

実数 x が大きくなるほど coth(x) は 1 に漸近します。x が 0 に近づくほど発散していきます。負の x では奇関数なので符号が反転します。

ただし戻り値は文字列になるので、そのまま足し算には使えません。実数として後続計算で使いたい場合はIMREAL関数で実数部を取り出す必要があります。

検算用テーブルの例

実数の双曲線余接は手元で検算しやすいので、まずは表で挙動を確認しておきましょう。

x=IMDIV(IMCOSH(x), IMSINH(x))数学的な coth(x)一致
0.52.163953413738652.16395341373865OK
11.313035285499331.31303528549933OK
21.037314720727551.03731472072755OK
31.004969823313691.00496982331369OK(1に漸近)
-1-1.31303528549933-1.31303528549933OK(coth は奇関数)

coth(x) は奇関数なので、x-x で符号だけが反転するのが確認できます。x が 3 を超えるとほぼ 1 に張り付くのもわかりますね。なお x = 0 だけは計算できません。理由は後述の「よくあるエラー」で解説します。

代用式の使い方②|複素数(i形式・j形式)を渡す

本題の複素数を渡すケースを見ていきます。coth(z) = cosh(z) / sinh(z) の関係から、結果は実数部と虚数部を持つ複素数になります。

代表的な複素数の計算例

よく登場する複素数の値で、代用式の結果を一覧にしました。

入力=IMDIV(IMCOSH(入力), IMSINH(入力))概算
"1+i"0.868014142895925-0.217621561854403i0.8680-0.2176i
"1+2i"1.00323862735359+0.00375873379655416i1.0032+0.0038i
"2+3i"1.03574663776499+0.0118209851154123i1.0357+0.0118i
"0.5-i"0.534466577660119+1.12832009325947i0.5345+1.1283i
"-1+i"-0.868014142895925-0.217621561854403i-0.8680-0.2176i(実部が符号反転)

「coth(1+i) ≈ 0.8680-0.2176i」は複素関数論の演習にもよく登場する例題です。同じ z で =IMCOTH(z) をGoogleスプレッドシートで計算しても、まったく同じ値が返ります。代用式とSheets専用関数の結果が一致するのは、どちらも cosh(z)/sinh(z) を計算しているからですね。

i形式とj形式の使い分け

電気工学・電子回路の業界では、電流の記号 i との混同を避けるために虚数単位として j を使う慣習があります。代用式の中身であるIMCOSH・IMSINHは ij の両方を受け付けますが、1つの数式の中で混在させるとエラーになります。

=IMDIV(IMCOSH("1+2i"), IMSINH("1+2i"))    → OK
=IMDIV(IMCOSH("1+2j"), IMSINH("1+2j"))    → OK(jで統一)
=IMDIV(IMCOSH("1+2i"), IMSINH("1+2j"))    → #NUM!(iとjが混在)

社内データソースが j 形式で統一されているなら、Excel上でも j で揃えるのが安全です。後述の「i/j混在エラー」のセクションで詳しく解説します。

COMPLEX関数で j形式を生成する

COMPLEX関数の第3引数で接尾辞を指定すれば、j 形式の複素数を生成できます。

=COMPLEX(1, 2)        → "1+2i"
=COMPLEX(1, 2, "j")   → "1+2j"
=IMDIV(IMCOSH(COMPLEX(1,2,"j")), IMSINH(COMPLEX(1,2,"j")))
       → "1.00323862735359+0.00375873379655416j"

電気回路の計算で j 形式を使いたいときは、COMPLEX関数の第3引数を "j" に固定しておくと、表全体で表記を統一できます。

代用式の使い方③|純虚数で cot(y) を逆算する

実数部が 0 の純虚数 yi を渡すと、coth(yi) = -i·cot(y) という有名な関係式が成立します。これは複素関数論の基礎で出てくる重要な恒等式です。代用式を使うとExcel上で簡単に確認できます。

純虚数を渡した結果

純虚数を渡した結果と、通常の COT 関数(実数のコタンジェント)の結果を並べた表が次のとおりです。

入力(ラジアン)=IMDIV(IMCOSH(入力), IMSINH(入力))-COT(y) との対応
"1i"-0.642092615934331i虚部 = -cot(1) = -0.6421
"0.5i"-1.83048772171245i虚部 = -cot(0.5) = -1.8305
"2i"0.457657554360286i虚部 = -cot(2) = 0.4577

実数部 x=0 の純虚数では、結果が純虚数になります。虚部に -cot(y) が入るのがポイントです。-cot(1) = -cos(1)/sin(1) = -0.5403/0.8415 ≒ -0.6421 とぴったり一致しますね。これが coth(yi) = -i·cot(y) の正体です。

IMAGINARY関数で実数として取り出す

純虚数を渡したときの結果は文字列なので、数値計算に使いたい場合はIMAGINARY関数で虚数部を取り出します。

A1: =IMDIV(IMCOSH("1i"), IMSINH("1i"))   → "-0.642092615934331i"(文字列)
A2: =IMAGINARY(A1)                        → -0.642092615934331(数値)
A3: =IMAGINARY(A1) * -1                   → 0.642092615934331(cot(1) の値)
A4: =A3 - COT(1)                          → 0 に近い値(誤差検証)

cot(y) を直接 COT 関数で求めるほうがもちろん簡単です。ただ、複素関数論の演習や、三角関数と双曲線関数の対応を可視化する教材として純虚数渡しは便利ですよ。

代用式の応用|検算・IMTANHとの逆数関係・伝送線路計算

代用式は単独で使うよりも、関連する複素数関数と組み合わせることで威力を発揮します。代表的な応用パターンを3つ紹介します。

応用①|coth(z)·tanh(z) = 1 の検証(IMTANHも代用式で)

双曲線余接は双曲線正接の逆数なので、掛け合わせると 1 になるはずです。ExcelにはIMTANHもありませんが、こちらも tanh(z) = sinh(z)/cosh(z) の代用式で計算できます。

A1: 1+2i
B1: =IMDIV(IMCOSH(A1), IMSINH(A1))    ← coth(z) の代用式
C1: =IMDIV(IMSINH(A1), IMCOSH(A1))    ← tanh(z) の代用式
D1: =IMPRODUCT(B1, C1)                ← 掛け合わせると…
       → "1"(または微小な誤差を含む "1+1.1E-16i")

IMPRODUCT関数でcothとtanhの代用式を掛け合わせると 1 になります。複素関数のロジックを実装する際のテストケースとしても使えます。

応用②|cosh²(z) − sinh²(z) = 1 を経由した整合性チェック

双曲線関数の基本恒等式 cosh²(z) − sinh²(z) = 1 は、複素数領域でも成り立ちます。IMPOWER関数IMSUB関数を組み合わせて確かめてみましょう。

A1: 1+2i
B1: =IMSUB(IMPOWER(IMCOSH(A1), 2), IMPOWER(IMSINH(A1), 2))
       → "1"(恒等式が成立)

IMCOSHとIMSINHの値が正しく計算されていれば、この式は必ず 1 を返します。coth の代用式 IMDIV(IMCOSH, IMSINH) の分子・分母が正しいことの裏付けになりますよ。

応用③|伝送線路の入力インピーダンス計算

電気工学の応用例として、終端開放の伝送線路の入力インピーダンスを考えます。Z_in = Z_0 · coth(γL) という式で表されます。γ(伝搬定数)と L(線路長)の積が複素数になるので、coth の代用式が活躍します。

A1: 0.05+1.2i      ← γ·L(伝搬定数 × 線路長)
B1: 50+0i          ← Z_0(特性インピーダンス)
C1: =IMDIV(IMCOSH(A1), IMSINH(A1))    ← coth(γL) の代用式
D1: =IMPRODUCT(B1, C1)                ← Z_0 · coth(γL)

このような複合計算でも、coth の部分を代用式で組み立てるだけで複素数演算が完結します。電卓で複素数を1つずつ計算する手間が一気に減りますね。

代用式でよくあるエラーと対処法(#NAME!・#NUM!・i/j混在)

ExcelでIMCOTH相当の計算をするときに発生しやすいエラーと、その原因・対処法をまとめました。

エラー主な原因対処法
#NAME?=IMCOTH(...) を直接入力したExcelにIMCOTHは無い。=IMDIV(IMCOSH(z), IMSINH(z)) に書き換える
#NUM!極(z=0, ±πi, ±2πi…)で sinh(z)=0 になる0 や πi の整数倍を避ける
#NUM!複素数の書式違反、i/j の混在"x+yi" 形式に統一、i/j を揃える
#VALUE!日付・論理値・配列を渡した文字列または数値に変換してから渡す
結果が文字列IMDIVの戻り値は常に文字列IMREAL/IMAGINARYで数値化

#NAME? エラー: IMCOTHは関数として認識されない

一番多いのが、Excelに無いIMCOTHをそのまま入力してしまうケースです。

=IMCOTH("1+2i")    → #NAME?(Excelに存在しない関数)

#NAME? エラーは関数名のスペルミスでも出ますが、IMCOTHの場合はスペルが正しくても出ます。Excelに関数自体が無いからです。=IMDIV(IMCOSH("1+2i"), IMSINH("1+2i")) の代用式に書き換えれば解決します。

#NUM! エラー: coth(0) と coth(nπi) は計算できない

数学的に coth(z) は sinh(z) = 0 となる点で定義されません。これを極(特異点)と呼びます。代用式の場合、分母のIMSINH(z)が 0 を返した時点でIMDIVが #NUM! を返します。

=IMDIV(IMCOSH(0), IMSINH(0))               → #NUM!(z=0)
=IMDIV(IMCOSH("0+3.14159265i"), IMSINH("0+3.14159265i"))
       → #NUM!(z ≒ πi)

これは sinh(0) = sinh(πi) = 0 でゼロ除算になるためです。物理計算で z が極の近くに来る場合は、近似展開(ローラン展開)に切り替えて手計算するのが安全です。

複素数の書式違反とi/j混在エラー

複素数の文字列は「数値 + 符号 + 数値 + i/j」の構造を厳密に守る必要があります。スペースや括弧、大文字の I は受け付けてくれません。

=IMDIV(IMCOSH("1 + 2i"), IMSINH("1 + 2i"))    → #NUM!(スペースは不可)
=IMDIV(IMCOSH("1+2I"), IMSINH("1+2I"))        → #NUM!(大文字 I は不可)
=IMDIV(IMCOSH("1+2i"), IMSINH("1+2j"))        → #NUM!(i と j が混在)

i/j混在の対処法は、データソースの段階で表記を統一することです。SUBSTITUTE関数で機械的に置き換えるのが手っ取り早いです。

=IMDIV(IMCOSH(SUBSTITUTE(A1,"j","i")), IMSINH(SUBSTITUTE(A1,"j","i")))

CSVから取り込んだデータが混在しているときは、列ごと一度 SUBSTITUTE で正規化してから代用式に渡す運用がおすすめです。

戻り値が文字列になる問題

IMDIVの戻り値は常に文字列なので、SUM で合計を取ったり IF で大小比較したりするとうまく動きません。数値として扱いたいときは、IMREAL で実数部、IMAGINARY で虚数部を取り出してから処理しましょう。

A1: =IMDIV(IMCOSH("1+i"), IMSINH("1+i"))    → "0.868014142895925-0.217621561854403i"
B1: =IMREAL(A1)                              → 0.868014142895925(数値)
C1: =IMAGINARY(A1)                           → -0.217621561854403(数値)
D1: =IMABS(A1)                               → 0.894855675945458(絶対値 |coth(1+i)|)

IMABS関数を使えば、IMREAL/IMAGINARY を経由せずに直接絶対値が取れます。用途に応じて使い分けてください。

IMCOTH・IMCOSH・IMSINH・IMCOT・IMTANHの違いを整理

IM系の三角関数・双曲線関数は名前が似ていて混同しがちです。それぞれの定義とExcel対応状況を表で整理します。

関数名数学記法定義Excel搭載
IMCOSHcosh(z)(e^z + e^-z) / 2
IMSINHsinh(z)(e^z − e^-z) / 2
IMCOTHcoth(z)cosh(z) / sinh(z)×(代用式が必要)
IMTANHtanh(z)sinh(z) / cosh(z)×(代用式が必要)
IMSECHsech(z)1 / cosh(z)
IMCSCHcsch(z)1 / sinh(z)
IMCOScos(z)(e^iz + e^-iz) / 2
IMSINsin(z)(e^iz − e^-iz) / (2i)
IMCOTcot(z)cos(z) / sin(z)

Excelの複素双曲線関数はIMCOSH・IMSINH・IMSECH・IMCSCHの4つだけで、coth と tanh は専用関数がありません。一方で三角関数側はIMCOT(複素数の余接)が用意されている点に注意してください。

IMCOTとIMCOTHの見分け方

特に取り違えやすいのが IMCOT と IMCOTH です。たった1文字 H の違いですが、意味は完全に別物です。しかもExcel対応も逆になります。

比較項目IMCOTIMCOTH
種類三角関数(cot)双曲線関数(coth)
定義cos(z) / sin(z)cosh(z) / sinh(z)
Excel搭載○(IMCOT関数あり)×(代用式が必要)
周期π(実軸方向)iπ(虚軸方向)
=IM???(1) 相当の値0.642…1.313…

=IMCOT(1)0.642092615934331、coth(1) は 1.31303528549933 と全く違う値です。「Excel IMCOTH」を探していて見つからない方は、IMCOT(三角関数のほう)と取り違えていないか一度確認してみてください。

双曲線関数と三角関数の関係

複素数領域では、双曲線関数と三角関数が密接に関係しています。代表的な恒等式は次のとおりです。

coth(iy) = -i·cot(y)     ← 純虚数を渡すと余接の虚数倍になる
cot(iy)  = -i·coth(y)    ← 逆も成立
cosh(iy) = cos(y)
sinh(iy) = i·sin(y)

暗記しなくても「双曲線(hyperbolic)= 末尾に H」「商は cosh/sinh」という命名規則を覚えておくと、関数名で迷うことが減りますよ。

Googleスプレッドシートで同じ計算をしたい場合は、GoogleスプレッドシートのIMCOTH関数IMTANH関数 もぜひ参考にしてください。Sheetsならこれらは専用関数として最初から使えます。

ExcelのIMCOTH(代用式)よくある質問(FAQ)

Q1. ExcelにIMCOTH関数はありますか?

ありません。Microsoft 365のExcelでも、IMCOTHは搭載されていません(2026年現在)。IMCOSHやIMSINHはExcelにありますが、その商である IMCOTH と、双曲線正接の IMTANH はExcel専用関数として用意されていません。複素数の coth が必要なときは =IMDIV(IMCOSH(z), IMSINH(z)) の代用式を使ってください。Googleスプレッドシートには IMCOTH 専用関数があります。

Q2. =IMCOTH("1+2i") と入力したら #NAME? エラーになりました。なぜ?

ExcelにIMCOTH関数が存在しないため、関数名として認識されず #NAME? エラーになります。スペルミスではありません。=IMDIV(IMCOSH("1+2i"), IMSINH("1+2i")) のように、cosh と sinh の商で書き換えてください。

Q3. 代用式の戻り値で四則演算するにはどうすればよいですか?

戻り値は文字列なので、そのままでは + - * / で計算できません。複素数同士の演算は IMSUM(加算)・IMSUB(減算)・IMPRODUCT(積算)・IMDIV(除算)の IM系演算関数 を使ってください。実数として扱いたいときは IMREAL または IMAGINARY で数値化してから通常の演算子を使います。

Q4. 虚数単位は「i」と「j」のどちらを使えばよいですか?

数学・物理学の分野では i、電気工学・電子回路の分野では j を使うのが慣習です。代用式の中身であるIMCOSH・IMSINHはどちらも受け付けますが、1つの数式・1つの列の中では必ず統一してください。混在すると #NUM! エラーになります。データソースが混在している場合は、SUBSTITUTE 関数で事前に置換するのがおすすめです。

Q5. coth(z) の結果が #NUM! になりました。バグですか?

バグではなく極(特異点)の挙動です。coth(z) は z = nπi(n は整数)で発散します。z = 0 はもちろん、"0+3.14159265i"(≒πi)や "0+6.28318530i"(≒2πi)でも代用式は #NUM! を返します。これは分母の sinh(z) が 0 になりゼロ除算が起きるためです。物理計算で z が極の近くに来る場合は、近似展開(ローラン展開)を使うのが安全です。

Q6. 代用式の結果が IMCOTH(スプレッドシート)と一致するか確かめたいです

GoogleスプレッドシートでIMCOTHを計算し、Excelの代用式の結果と照合できます。どちらも cosh(z)/sinh(z) を計算しているので、同じ z なら同じ値になります。

(Excel)   =IMDIV(IMCOSH("1+i"), IMSINH("1+i"))   → 0.868014142895925-0.217621561854403i
(Sheets)  =IMCOTH("1+i")                          → 0.868014142895925-0.217621561854403i

両者がぴったり一致すれば、代用式が正しく組めている証拠です。複素関数のライブラリ実装をチェックするときの定番テストにもなります。

まとめ

ExcelのIMCOTH関数について、存在しないという前提から代用式の使い方までを解説しました。要点をおさらいします。

  • ExcelにIMCOTH関数は無い。入力すると #NAME? エラーになる
  • Excelで複素数の双曲線余接を求めるには =IMDIV(IMCOSH(z), IMSINH(z)) の代用式を使う
  • 引数の複素数は "x+yi" または "x+yj" の文字列形式で渡す
  • 実数を渡すと通常の coth(x) と同じ結果が文字列で返る
  • 純虚数 yi を渡すと -i·cot(y) が返る(複素関数論の基本恒等式)
  • 双曲線正接の IMTANH もExcelには無く =IMDIV(IMSINH(z), IMCOSH(z)) で代用する
  • 極(z = 0, ±πi, ±2πi…)では分母が 0 になり #NUM! エラーになる
  • ij の混在は #NUM! エラーになるので統一が必須
  • 戻り値は文字列なので四則演算には IMSUM/IMSUB などのIM系演算関数か IMREAL/IMAGINARY で数値化する
  • IMCOT(三角関数・Excel対応)とIMCOTH(双曲線関数・Excel非対応)は H 1文字違いで全く別物

複素数の双曲線余接は専門的に見えますが、IMCOSHとIMSINHの代用式を使えば数式1行で答えが出ます。電気工学・信号処理・物理シミュレーションをExcelで完結させたい方は、ぜひこの代用式をレパートリーに加えてくださいね。Googleスプレッドシートを併用できる環境なら、専用のIMCOTH関数を使うのも手軽な選択肢です。

Excelの関連関数の一覧は次のページからも探せます。

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