スプレッドシートのIMCSCH関数の使い方|複素数の双曲線余割と#NUM!の原因

スポンサーリンク

「回路の課題で csch(1+i) が必要になったけど、スプレッドシートではどう書くの?」。双曲線関数の逆数を複素数で扱う場面は、伝送線路や信号処理の計算でときどき出てきますよね。

1/sinh(z) を自分で組もうとすると、実部と虚部を分けた長い式になりがち。しかも結果に 1 を足しただけで #VALUE! が出るなど、つまずきどころもあります。

そこで使うのが、Google スプレッドシートの IMCSCH 関数です。この記事では、構文と入力例から順に解説します。

続けて、結果を次の計算に使うときの注意と、エラーになる入力の早見表を紹介。Excel 版との違いや、名前の似た関数との見分け方もまとめました。

スプレッドシートのIMCSCH関数とは?

IMCSCH(アイエム・コセカント・ハイパボリック)関数は、複素数 z の双曲線余割 csch(z) を返す関数です。csch は双曲線正弦 sinh の逆数で、定義は次の 1 行だけ。

csch(z) = 1 / sinh(z)

名前は「IM(imaginary=虚数)」と「CSCH(cosecant hyperbolic)」の組み合わせです。工学系の計算で使うエンジニアリング関数の一つで、分母の sinh はスプレッドシートのIMSINH関数で求められます。

z = a+bi のときの実部と虚部は、次の式で表せます。

Re[csch(a+bi)] =  2・sinh(a)・cos(b) / (cosh(2a) - cos(2b))
Im[csch(a+bi)] = -2・cosh(a)・sin(b) / (cosh(2a) - cos(2b))

分母が 0 になるのは、a = 0 かつ b が π の整数倍のとき。つまり z = 0、±πi、±2πi … の点で、csch は値を持ちません(極)。

実部の絶対値が大きくなるほど、結果は 0 に近づきます。一方、純虚数の方向(a = 0)では sin の周期で値が上下し続けるため、0 には近づきません。

構文と引数(COMPLEX の結果・”x+yi”/”x+yj”・実数)

=IMCSCH(数値)
引数内容
数値(必須)双曲線余割を求めたい複素数。COMPLEX 関数の結果、"x+yi" や "x+yj" の形の文字列、実数のいずれかを渡す

引数は 1 つだけです。実数を渡すと、虚部が 0 の複素数として計算されます。虚数単位は小文字の i と j のどちらでも OK。

Google の公式ヘルプには、次の 3 つの例が載っています。どれも定義の 1/sinh(z) から計算した値と合います。

式結果(小数第6位までに丸めた値)
=IMCSCH(COMPLEX(4,1))0.019780-0.030826i
=IMCSCH(3.5)0.060450
=IMCSCH("3+2i")-0.041201-0.090473i

IMCSC との違いは H の1文字

IMCSCH とスプレッドシートのIMCSC関数は、末尾の H があるかないかの違いです。H 付きは双曲線関数の csch(z) = 1/sinh(z)、H なしは三角関数の csc(z) = 1/sin(z) を返します。

実数 1 を渡しても、IMCSCH(1) は約 0.8509、IMCSC(1) は約 1.1884 とまったく別の値。名前がよく似ているので、入力するときは H の有無を確認しておきましょう。

IMCSCH関数の基本的な使い方

入力例と結果の一覧(実数・a+bi・純虚数・j 形式・セル参照)

よく使う入力の形を 1 つの表にまとめました。結果は小数第6位までに丸めています。

入力結果(約)補足
=IMCSCH(0.5)1.9190351/sinh(0.5)
=IMCSCH(1)0.8509181/sinh(1)
=IMCSCH(2)0.2757211/sinh(2)
=IMCSCH(-1)-0.850918符号だけが反転する
=IMCSCH("1+1i")0.303931-0.621518i実部と虚部の両方が出る
=IMCSCH("1+1j")0.303931-0.621518jj の形も受け付け、結果の虚数単位も j
=IMCSCH("1i")-1.188395i純虚数。実部は 0 で表示されない
=IMCSCH("4+3i")-0.036276-0.005174iMicrosoft のヘルプの例
=IMCSCH(A2)A2 の値で計算セル参照

実数を渡すと、虚部のない実数だけが表示されます。0.5 → 1 → 2 と大きくするほど、結果は急速に 0 へ近づいていくのが分かるはず。

-1 の結果が 1 の符号違いになるのは、csch が奇関数(csch(-z) = -csch(z))だからです。

純虚数の "1i" には、csch(iy) = -i・csc(y) という関係が効いています。虚部の -1.188395 は、IMCSC(1) の約 1.188395 の符号を反転した値です。

セル参照で渡す場合は、A2 に 1+1i のような複素数を文字列で入れておきます。式を下の行にコピーすれば、行ごとに別の値で計算できますよ。

COMPLEX関数と組み合わせて実部・虚部をセルで指定する

実部と虚部を別の列で管理しているなら、COMPLEX 関数で複素数を組み立ててから渡すのが手軽です。

=IMCSCH(COMPLEX(A2, B2))

A 列に実部、B 列に虚部を入れて、C2 の式を C5 までコピーした例です。

行A(実部)B(虚部)C(IMCSCH の結果・約)
2110.303931-0.621518i
343-0.036276-0.005174i
432-0.041201-0.090473i
5410.019780-0.030826i

A 列や B 列の数字を書き換えれば、C 列はすぐに計算し直されます。パラメータを少しずつ変えて結果を比べたいときに便利な形ですね。

COMPLEX 関数の第 3 引数で "j" を指定する方法などは、スプレッドシートのCOMPLEX関数の使い方で解説しています。

IMCSCH関数の結果を計算に使うときの注意

戻り値は文字列(+1 すると #VALUE! になる)

IM 系の関数は、計算結果を 0.303931…-0.621518…i のような文字列で返します。例外は、数値を返す IMABS だけ。IMCSCH もこの仲間なので、見た目は数値でもそのまま足し算には使えません。

=ISTEXT(IMCSCH("1+1i"))   → TRUE
=IMCSCH("1+1i")+1         → #VALUE!

虚部が 0 になる結果は、少し事情が違います。IMCSCH(1) のように数字だけの文字列になると、戻り値は文字列のまま(ISTEXT は TRUE)でも、スプレッドシートが数値に読み替えるため =IMCSCH(1)+1 は 1.850918… と計算できてしまうんです。

入力しだいで計算が通ったり通らなかったりするのは困りますよね。後の計算に使うなら、次の方法で数値を取り出しておくのが安全です。

IMREAL・IMAGINARY で数値として取り出す

実部はスプレッドシートのIMREAL関数、虚部はスプレッドシートのIMAGINARY関数で取り出せます。どちらも戻り値は数値なので、ふつうの四則演算につなげられます。

セル式結果(約)
A2=IMCSCH("1+1i")0.303931-0.621518i
B2=IMREAL(A2)0.303931
C2=IMAGINARY(A2)-0.621518
D2=B2*20.607862

複素数のまま計算を続けたいときは、+ ではなく IMSUM・IMPRODUCT などの IM 系関数に渡しましょう。

=IMSUM(IMCSCH("1+1i"), 1)   → 1.303931-0.621518i(約)

IMDIV(1, IMSINH(z)) で検算する

csch(z) = 1/sinh(z) なので、1 を sinh(z) で割った値と比べれば検算になります。割り算にはスプレッドシートのIMDIV関数を使います。

=IMCSCH("1+1i")
=IMDIV(1, IMSINH("1+1i"))

sinh(1+i) は約 0.634964+1.298458i。その逆数をとると、どちらの式も 0.303931-0.621518i 前後の値になります。

浮動小数点の計算なので、下の方の桁はわずかに違って表示されます。実機では 15 桁目が 0.303931001628425(IMDIV)と 0.303931001628426(IMCSCH)で 1 ずれ、= で比べると FALSE でした。気になるときは、IMREAL と IMAGINARY で取り出した値どうしの差を見ると判断しやすいでしょう。

πi の近くでは極端に大きな値になる

z = πi は数学的には極で、csch の値はありません。ところが PI() は π をきっちり表した値ではなく、ごくわずかな誤差を含む近似値です。

=IMCSCH(COMPLEX(0, PI()))

そのため、この式はエラーにならず、実機では約 -3.09E+14 の虚数(-309493162808962i)という非常に大きな値が返ります。エラーが出ないからといって、正しい値とは限らない点に注意してください。

極の近くを扱うシートでは、結果の大きさも合わせて確認しておくと安心です。IMABS は数値を返すので、たとえば次のように目印を付けられます。

=IF(IMABS(IMCSCH(A2))>1E+6, "極の近く", IMCSCH(A2))

IMCSCH関数でエラーになる入力と対処法

入力 → 結果の早見表

IM 系の関数は、どれも同じ規則で入力を判定します。複素数の書き方で起きる結果を、IMCSCH の式でまとめました。

入力結果
=IMCSCH("1 + 1i")(途中に半角空白)エラーにならず、"1+1i" と同じ値
=IMCSCH(" 1+1i ")(前後に半角空白)エラーにならず、"1+1i" と同じ値
=IMCSCH("1 + 1i")(全角空白)#NUM!
=IMCSCH("1+1I")(大文字の I)#NUM!
=IMCSCH("1+1i")・=IMCSCH("1+1i")(全角文字)#NUM!
=IMCSCH("1+1k")(i・j 以外の文字)#NUM!
=IMCSCH("hello")(ただの文字列)#NUM!
=IMCSCH(TRUE)(論理値)#NUM!
=IMCSCH(NA())(エラー値)#N/A がそのまま返る

半角の空白は、入っていてもエラーになりません。#NUM! になったら、全角の空白や全角の文字、大文字の I が混じっていないかを疑いましょう。

参照先のセルがエラーのときは、そのエラーがそのまま返ってきます。#VALUE! に変わるわけではないので、元のセルを直すのが近道です。

IMCSCH ならではの注意が、0 を渡したとき。csch(0) は 1/sinh(0)、つまり 1/0 にあたるので値がありません。スプレッドシートでも計算できず、=IMCSCH(0) は #DIV/0! になります。ここまでの #NUM! とは種類が違うので、エラーの種類で原因を切り分けるときは覚えておきましょう。

もう一つ、引数は必ず 1 つ。=IMCSCH() や =IMCSCH("1+1i", "2") のように数を間違えると、#N/A になります。

IFERROR で表示を整える

0 が混じる可能性のある列では、IFERROR で包んでおくと表が崩れません。

=IFERROR(IMCSCH(A2), "計算できません")

ただし IFERROR は、入力ミスによる #NUM! まで同じ表示にしてしまいます。式を作った直後は IFERROR なしで結果を確かめ、問題がないと分かってから包むのがおすすめです。

Excel版・関連関数との違い

Excel でも IMCSCH は使える(Excel 2013 以降)

IMCSCH はスプレッドシートだけの関数ではなく、Excel にも同じ名前の関数があります。構文は IMCSCH(inumber) で、"x+yi" や "x+yj" の形の複素数を 1 つ渡す点も同じです。

対応バージョン: Excel の IMCSCH は、Excel 2013 で追加された関数です(Microsoft の新関数一覧による)。IMCSCH のヘルプページに書かれた適用対象は、Excel 2016 以降と Microsoft 365。Google スプレッドシートには版による違いはありません。

Microsoft のヘルプの例 =IMCSCH("4+3i") は約 -0.036276-0.005174i。上の一覧表に載せたスプレッドシートの値と同じです。

違いが出やすいのは、論理値を渡したときの扱い。Microsoft のヘルプには「x+yi の形でなければ #NUM!、論理値なら #VALUE!」と書かれています。スプレッドシートでは論理値も #NUM! なので、エラーの種類で判定している式を移すときは見直しましょう。

Excel で使う場合の手順は、ExcelのIMCSCH関数の使い方にまとめています。IMDIV と IMSINH を組み合わせて代用する必要はありません。

双曲線関数ファミリー早見表(sinh/cosh/tanh と csch/sech/coth)

複素数の双曲線関数は、基本形 3 つとその逆数形 3 つの組で覚えると迷いません。

系統基本形逆数形
正弦系IMSINH(sinh)IMCSCH(csch = 1/sinh)
余弦系IMCOSH(cosh)IMSECH(sech = 1/cosh)
正接系IMTANH(tanh)IMCOTH(coth = 1/tanh)

取り違えやすいのが、IMCSCH と IMCOTH の組み合わせ。coth(z) は cosh(z)/sinh(z) なので、どちらも分母に sinh が来ます。違いは分子で、csch は 1、coth は cosh(z) です。z = 1 なら IMCSCH(1) は約 0.8509、IMCOTH(1) は約 1.3130 と値も離れています。

H を外した三角関数の側にも、同じ並びがあります。IMSIN の逆数が IMCSC、IMCOS の逆数が IMSEC、IMTAN の逆数が IMCOT です。

まとめ

スプレッドシートの IMCSCH 関数のポイントを振り返ります。

  • IMCSCH は複素数の双曲線余割 csch(z) = 1/sinh(z) を返す。構文は =IMCSCH(数値)
  • 引数には COMPLEX の結果、"x+yi" や "x+yj" の文字列、実数を渡せる
  • 戻り値は文字列。計算に使うなら IMREAL・IMAGINARY で数値を取り出す
  • 検算は =IMDIV(1, IMSINH(z)) と比べればよい
  • 全角の空白・全角の文字・大文字の I・論理値は #NUM!。半角の空白はエラーにならない
  • z = 0 や πi の整数倍は極。PI() を使った式はエラーにならず巨大な値が返ることもある
  • Excel にも IMCSCH がある(Excel 2013 で追加)。論理値のエラーの種類はヘルプの記載が異なる

H の 1 文字で三角関数の IMCSC と入れ替わってしまう点だけは、最後にもう一度意識しておきたいところ。双曲線関数ファミリーの表と合わせて、必要なときに引ける形にしておきましょう。

まずは手元のシートで =IMCSCH(COMPLEX(1,1)) を入力し、0.303931-0.621518i 前後の値が出るか試してみてください。

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