「スプレッドシートで複素数の双曲線セカント(sech)を計算したいけど、cosh(a+bi) を実部と虚部に展開してから逆数を取るのは大変…」
スプレッドシートで複素関数を扱っていると、cosh(z) の逆数である双曲線正割 sech(z) が必要になる場面がありますよね。複素数の双曲線コサインを実部と虚部に分解する作業を毎回やるのは面倒です。最後に逆数を取って再び複素数の形に戻す手順も、手作業ではちょっと大変ですよね。
そんなときに頼りになるのがGoogleスプレッドシートのIMSECH関数です。複素数を渡すだけで sech(1/cosh)を一発で返してくれるので、複素双曲線関数を使った数式が一気にすっきりしますよ。
ExcelのIMSECH関数と完全互換なので、Excelファイルとやり取りする現場でも安心ですね。COMPLEX関数で作った複素数や、IMSUM・IMPRODUCTの演算結果からも、そのまま双曲線セカントを計算できます。
この記事では、スプレッドシートのIMSECH関数の基本構文と実務での活用例を解説します。IMCOSH関数との関係や、純虚数を渡すと通常のセカント sec(b) と同値になる対応関係も整理しますよ。よくあるエラーと対処法もしっかり紹介していきますね。
スプレッドシートのIMSECH関数とは?
GoogleスプレッドシートのIMSECH関数(イマジナリー・セカント・ハイパボリック関数)は、複素数の双曲線正割(ハイパーボリックセカント)を返す関数です。エンジニアリング関数(電気・物理・工学系の計算で使う関数群)のひとつに分類されますよ。
読み方は「イマジナリー・セカント・ハイパボリック」または「アイエム・セック・エイチ」で、英語の「imaginary number(虚数)」の「secant hyperbolic(双曲線正割)」に由来します。複素数「a+bi」に対して、sech(a+bi) = 1/cosh(a+bi) を返してくれるのが役割ですね。
そもそも複素数の双曲線正割とは、実数の sech(sech(x) = 1/cosh(x))を複素数全体に拡張したものです。実部と虚部に分解した定義式は次のようになります。
cosh(a+bi) = cosh(a)cos(b) + i sinh(a)sin(b)
sech(a+bi) = 1 / cosh(a+bi)
cosh(a+bi) を求めてから逆数を取るというシンプルな構造ですね。実部だけの複素数(虚部0)を渡すと、通常の sech(a) と同じ結果になりますよ。
| 複素数(z) | IMSECH(z)の結果(概算) | 備考 |
|---|---|---|
| 0+0i | 1 | sech(0) = 1/cosh(0) = 1 |
| 1+0i | 約 0.6481 | sech(1) ≈ 0.6481 |
| 2+0i | 約 0.2658 | cosh(2) が大きくなる分0に近づく |
| 1+1i | 約 0.4983-0.5910i | cosh(1+i) の逆数 |
| 0+1i | 約 1.8508 | sec(1) と同値 |
IMSECH関数を使えば、この表の右側にある「複素数の双曲線セカント」をサクッと取り出せます。Excelとの互換性も完璧で、Excel 2013以降のすべてのバージョンに対応していますよ。
複素数の双曲線正割は、伝送線路の特性インピーダンス計算・フィルタ伝達関数の評価・複素解析の学習教材・特殊関数の数値表など、複素双曲線関数が必要な場面で活躍する基礎パーツですね。
IMSECH関数の書き方(構文と引数)
基本構文
=IMSECH(複素数)
引数は1つだけで、必須です。
引数の詳細
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 複素数(inumber) | 必須 | 双曲線正割を求めたい複素数。文字列またはセル参照で指定する |
引数には「”1+1i”」や「”1+1j”」のような複素数文字列を直接渡せます。COMPLEX関数(実数と虚数から複素数を作成する関数)の結果や、複素数が入ったセルの参照も指定できますよ。
虚数単位は小文字の「i」または「j」のどちらでも受け付けます。数学では「i」、電気工学では「j」が使われる慣習ですね。IMSECH関数はどちらでも同じように動作してくれます。
TIP
戻り値は元の入力と同じ虚数単位で返されます。「1+1i」を渡せば「i」付きで、「1+1j」を渡せば「j」付きで返るので、表記の統一性も保たれますよ。
虚部の単位はラジアンです。度数(°)で角度を持っている場合は、RADIANS関数で先にラジアンに変換しておきましょう。
スプレッドシートのIMSECH関数の基本的な使い方
文字列で複素数を直接指定する
複素数文字列をそのまま引数に渡してみましょう。
=IMSECH("1+1i")
結果は「0.4983370305…-0.5910838417…i」になります。手計算で確認すると cosh(1+i) = cosh(1)cos(1) + i sinh(1)sin(1) ≈ 0.8337 + 0.9889i で、その逆数を取ると約 0.4983 − 0.5910i なので、計算が合っていますね。
実部だけの複素数(虚部0)を渡すと、通常の双曲線セカントと同じ結果になります。
=IMSECH("1+0i")
結果は約「0.6481」です。sech(1) = 1/cosh(1) ≈ 1/1.5431 ≈ 0.6481 という基本的な値が返ってきますね。
虚部だけの純虚数を渡すと、通常のセカント(sec)と同じ値になります。
=IMSECH("0+1i")
結果は約「1.8508」になります。sech(i) = 1/cosh(i) = 1/cos(1) = sec(1) ≈ 1.8508 なので、双曲線関数と三角関数が「実部と虚部を入れ替える」関係でつながっているのが分かりますね。
セル参照で複素数を指定する
実務ではセルに入った複素数を扱う場面が多いですよね。A2に「2+1i」が入っている場合は次のように書きます。
=IMSECH(A2)
結果は約「0.1512-0.2270i」になります。セル参照を渡すだけで、入っている複素数の双曲線セカントを取り出せますよ。
COMPLEX関数と組み合わせる
COMPLEX関数で作った複素数の双曲線セカントを、その場で計算することもできます。
=IMSECH(COMPLEX(1, 1))
結果は約「0.4983-0.5910i」、つまり「IMSECH(“1+1i”)」と同じですね。COMPLEX(1, 1)が内部で「1+1i」を作り、IMSECH関数がそのsechを返してくれます。
実部と虚部がセルに分かれているデータを扱うときに便利な書き方ですよ。
IMCOSH関数の逆数として書き換える
IMSECH関数は定義上、IMDIV関数(複素数の割り算)とIMCOSH関数(複素数のcosh)を組み合わせても表現できます。
=IMSECH("1+1i")
=IMDIV("1", IMCOSH("1+1i"))
どちらも結果は同じ約「0.4983-0.5910i」になりますね。IMSECH関数は内部で同じ計算をしてくれるので、わざわざIMDIVとIMCOSHを書く必要はありません。読みやすさ・タイプ量・エラーの起きにくさのどれを取ってもIMSECHの方が有利ですよ。
度数からの変換と組み合わせる
虚部が度数(°)で与えられているときは、RADIANS関数でラジアンに直してから渡します。
=IMSECH(COMPLEX(1, RADIANS(30)))
A列の度数を一気にラジアンに変換してから処理したい場合は、ARRAYFORMULA関数(数式を範囲全体に展開する関数)を併用すると便利ですね。
ARRAYFORMULAで複数行を一括処理する
複素数のリストから一気に双曲線セカントの列を作りたい場面もありますよね。そんなときはARRAYFORMULA関数と組み合わせます。
=ARRAYFORMULA(IMSECH(A2:A10))
A列に並んだ複素数から、対応する sech の値をB列に一発で展開できますよ。複素双曲線関数のテーブルを作るときに重宝しますね。
IMSECH関数の実務活用例
活用例1: IMCOSHとの関係を検算する
複素数の双曲線セカントは sech(z) = 1/cosh(z) という定義そのままなので、IMCOSH関数とIMPRODUCT関数を使って検算できます。
A2に「1.5+0.7i」が入っているとします。
B2: =IMSECH(A2) ← sechを直接計算
C2: =IMCOSH(A2) ← coshを計算
D2: =IMPRODUCT(B2, C2) ← B2とC2の積(≈ 1+0i のはず)
E2: =IMSUB(D2, "1") ← D2と1の差(≈ 0+0i のはず)
D2が「ほぼ 1+0i」、E2が「ほぼ 0+0i」になっていれば、IMSECH関数が定義どおり動いている証拠ですね。シート上で自動チェックを仕込んでおくと、入力ミスにも気付きやすくなりますよ。
活用例2: 複素双曲線関数テーブルを作る
複素双曲線関数の挙動を学習するときは、IMSINH・IMCOSH・IMTANH・IMSECH・IMCSCH・IMCOTHを並べた一覧表があると便利ですよね。
A2: 0.5+0.5i
B2: =IMSINH(A2) ← sinh
C2: =IMCOSH(A2) ← cosh
D2: =IMTANH(A2) ← tanh
E2: =IMSECH(A2) ← sech
F2: =IMCSCH(A2) ← cosech
G2: =IMCOTH(A2) ← coth
A列に複素数を並べておけば、複素双曲線関数の値を一気に俯瞰できます。複素解析の学習教材として、教科書の例題を確認するのにぴったりですね。
活用例3: 伝送線路の特性で使う
電気工学の伝送線路解析では、sech(γl) という形(γ: 伝搬定数、l: 線路長)が登場します。γ = α + jβ と複素数で与えられるので、IMSECH関数を使えばシート上で素直に評価できますよ。
A2: =COMPLEX(0.05, 1.2, "j") ← γl = 0.05+1.2j(仮の値)
B2: =IMSECH(A2) ← sech(γl)
C2: =IMABS(B2) ← |sech(γl)|(減衰量の指標)
D2: =IMARGUMENT(B2) ← arg sech(γl)(位相)
電気工学の慣習に合わせて虚数単位を「j」にしたい場合は、COMPLEX関数の第3引数で指定できますね。教科書の例題を再現する用途に向いています。
活用例4: 複素関数の値を可視化するシートを作る
複素関数の挙動を可視化したいときは、x = -3〜3 を細かく刻み、それぞれに IMSECH を適用してから絶対値や実部・虚部を別列に取り出します。
A2: -3
A3: =A2+0.1 ← 0.1刻みで増やす
B2: =IMSECH(COMPLEX(A2, 0.5)) ← 虚部固定でsechを評価
C2: =IMREAL(B2) ← 実部
D2: =IMAGINARY(B2) ← 虚部
E2: =IMABS(B2) ← 絶対値
C列〜E列をグラフ化すれば、IMSECHの実部・虚部・絶対値の振る舞いが一目で分かりますね。複素双曲線関数の学習用シートとして再利用しやすい形です。
活用例5: 数値が大きくなる「極」の検出
cosh(z) = 0 となる点(z = i(π/2 + nπ))の近くでは、sech(z) は無限大に発散します。IMABS関数で絶対値を測れば、数値計算上の不安定領域を検出できますよ。
A2: =COMPLEX(0, 1.5708) ← ≈ i·π/2
B2: =IMSECH(A2) ← sech(iπ/2) は理論上∞
C2: =IMABS(B2) ← 巨大な値が出る
D2: =IF(C2>1E10, "極の近傍", "OK")
D列で警告を出しておくと、伝達関数の評価で「危険な点」をひと目で識別できますね。
IMSECH関数とCOMPLEX関数群の関係
複素数を扱う関数群の中で、IMSECH関数の位置づけを整理しておきましょう。
| 関数 | 入力 | 出力 | 役割 |
|---|---|---|---|
| COMPLEX | 実数 a, b | 複素数 a+bi | 複素数を作る |
| IMREAL | 複素数 a+bi | 実数 a | 実部を取り出す |
| IMAGINARY | 複素数 a+bi | 実数 b | 虚部を取り出す |
| IMABS | 複素数 a+bi | 実数 √(a²+b²) | 大きさを取り出す |
| IMARGUMENT | 複素数 a+bi | 実数 atan2(b,a) | 偏角を取り出す |
| IMCOSH | 複素数 z | 複素数 cosh(z) | 双曲線コサインを計算する |
| IMSINH | 複素数 z | 複素数 sinh(z) | 双曲線サインを計算する |
| IMSECH | 複素数 z | 複素数 1/cosh(z) | 双曲線セカントを計算する |
| IMCSCH | 複素数 z | 複素数 1/sinh(z) | 双曲線コセカントを計算する |
| IMSEC | 複素数 z | 複素数 1/cos(z) | 三角のセカントを計算する |
IMSECHは「複素数から複素数を計算する」役割です。出力もそのまま複素数なので、IMSUMやIMPRODUCTにそのまま渡してさらに計算を続けられますよ。
たとえば sech(z) = 1/cosh(z) を IMDIV と IMCOSH で代用すると、こう書けます。
=IMSECH("1+1i")
=IMDIV("1", IMCOSH("1+1i"))
どちらも結果は約「0.4983-0.5910i」で同じですね。ただしIMSECHの方が読みやすく、タイプ量も少ないので、特別な理由がなければIMSECHを使う方が無難です。
三角版のセカント(1/cos(z))が必要な場合は、専用のIMSEC関数を使うと意図が明確になりますよ。
NOTE
IMSECとIMSECHは「実部と虚部を入れ替える」と互いに値が一致する関係があります。具体的には、純虚数 z=bi を渡したとき IMSECH(0+bi) = sec(b) になり、逆に IMSEC(0+bi) = sech(b) になります。三角と双曲線の対応を覚えておくと、検算が楽になりますよ。
IMSECH関数のよくあるエラーと対処法
#NUM! エラー(複素数の形式エラー)
複素数として認識できない文字列を渡したときに発生します。虚数単位が大文字になっていたり、i・j以外の文字を使っている場合が典型例ですよ。
=IMSECH("1+1I") → #NUM!(大文字のIは不可)
=IMSECH("1+1k") → #NUM!(i・j以外は不可)
=IMSECH("1+1i") → #NUM!(全角文字は不可)
対処法は、複素数文字列を必ず半角の「a+bi」または「a+bj」の形式にすることです。虚数単位は小文字限定なので、CapsLockがオンになっていないか確認してくださいね。
スペースが入っている場合(例: "1 + 1i")も認識できないことがあるので、余計な空白を除いておくと安心です。
#VALUE! エラー(引数の型エラー)
引数に論理値や、複素数として解釈できない値を渡したときに発生します。
=IMSECH(TRUE) → #VALUE!(論理値は不可)
=IMSECH(#N/A) → #N/A(エラー値はそのまま伝播)
対処法は、引数を必ず複素数文字列または数値、もしくは複素数を返す関数の結果として渡すことです。他システムからコピーした値はテキスト扱いになっていることがあるので、=ISTEXT(A2) や =ISNUMBER(A2) でチェックしておくと安心ですよ。
結果が極端な値になる(極の近傍)
cosh(z) = 0 となる点(z = i(π/2 + nπ))の近くでは、sech(z) の絶対値が爆発的に大きくなります。
=IMSECH("0+1.5707963267948i") → 約 1.6×10^16(理論値は∞)
対処法は、入力値が極の近くにないか事前にチェックすることです。=IF(IMABS(IMCOSH(A2))<1E-10, "極の近傍", IMSECH(A2)) のように、cosh の絶対値が小さすぎるときは別処理に分岐させると安全ですね。
結果の符号が想定と違う
複素数の双曲線正割は、実部と虚部の符号が cosh の符号と「逆数の関係」で決まります。「なぜマイナスになるのか」と迷ったら、IMCOSH関数で先に cosh を確認してみましょう。
=IMCOSH("2+3i") ← 元のcoshを確認
=IMSECH("2+3i") ← sech(IMCOSHの逆数)
cosh(z) の実部・虚部の符号と、sech の符号が「逆数の関係」になっているかをチェックすると原因が見えてきますよ。
IFERRORでまとめてエラーを吸収する
入力データの信頼性が低い場合は、IFERROR関数(エラー時に代替値を返す関数)で包んでおくとシート全体の集計が止まりません。
=IFERROR(IMSECH(A2), "形式エラー")
エラー時にメッセージを返すようにしておけば、安心して大量データに適用できますよ。
IMSECH関数とExcelの互換性
GoogleスプレッドシートのIMSECH関数は、ExcelのIMSECH関数と仕様が完全に一致しています。構文・引数・戻り値の形式・エラー条件まで同じですよ。
ExcelファイルをGoogleスプレッドシートで開いてもIMSECH関数はそのまま動作します。逆にスプレッドシートで作った数式をExcelで開いても問題ありませんね。
ExcelのIMSECH関数は、Excel 2013以降のすべてのバージョンで利用できます。Microsoft 365、Excel for Mac、Excel Online でも同じように使えますよ。Excel 2010以前のバージョンとファイルを共有する予定がある場合は、IMDIV・IMCOSHの組み合わせで代替する必要があるので、お使いのバージョンが対応しているか確認しておきましょう。
複素数関連の関数一覧
IMSECH関数と一緒に使うことが多い、複素数関連の関数をまとめました。
| 関数名 | 機能 |
|---|---|
| COMPLEX | 実数と虚数から複素数を作成する |
| IMREAL | 複素数の実数係数を返す |
| IMAGINARY | 複素数の虚数係数を返す |
| IMABS | 複素数の絶対値(大きさ)を返す |
| IMARGUMENT | 複素数の偏角(角度)をラジアンで返す |
| IMCONJUGATE | 共役複素数を返す |
| IMSUM | 複素数の合計(足し算)を返す |
| IMSUB | 複素数の差(引き算)を返す |
| IMPRODUCT | 複素数の積(掛け算)を返す |
| IMDIV | 複素数の商(割り算)を返す |
| IMPOWER | 複素数のべき乗を返す |
| IMSQRT | 複素数の平方根を返す |
| IMEXP | 複素数の指数関数を返す |
| IMLN | 複素数の自然対数を返す |
| IMCOSH | 複素数のcoshを返す |
| IMSINH | 複素数のsinhを返す |
| IMSECH | 複素数の双曲線セカント(sech)を返す |
| IMCSCH | 複素数の双曲線コセカント(cosech)を返す |
| IMSEC | 複素数の三角セカント(sec)を返す |
IMSECH関数は、これら複素数関数群の中で「双曲線セカント(sech)を計算する」役割を担います。COMPLEXで作り、IMSECHで sech を取り、IMABS・IMARGUMENTで絶対値と偏角を確認するのが基本パターンですね。
まとめ
GoogleスプレッドシートのIMSECH関数は、複素数の双曲線正割(1/cosh(z))を返す関数です。伝送線路の特性、フィルタ伝達関数の評価、複素解析の学習教材、特殊関数の数値表など、複素双曲線関数が必要な場面で欠かせない関数ですよ。
- 構文は
=IMSECH(複素数)で引数は1つだけ必須 - 「a+bi」を渡すと sech(a+bi) = 1/cosh(a+bi) が返る
- 「a+bj」のような工学系表記もそのまま受け付ける
- 虚部の単位はラジアン(度数の場合はRADIANS関数で変換)
- 内部的には cosh(a+bi) = cosh(a)cos(b) + i sinh(a)sin(b) の逆数
- COMPLEX関数の結果やセル参照、複素数演算の結果からsechを計算できる
- IMCOSHとIMDIVの組み合わせと結果は同じだが、IMSECHの方が読みやすい
- 純虚数 0+bi の場合は通常のセカント sec(b) と同値
- 実数 a+0i の場合は通常の sech(a) と同値
- 極(cosh(z)=0、つまり純虚数 z=i(π/2+nπ) の近傍)では絶対値が爆発するので注意
- ARRAYFORMULAで複数の複素数を一括処理できる
- 大文字の「I」「J」や全角文字、i・j以外の単位は #NUM! エラー
- 引数に論理値を渡すと #VALUE! エラー
- ExcelのIMSECH関数と完全互換(Excel 2013以降)
複素数の双曲線正割が必要になったら、IMSECH関数の出番ですよ。COMPLEX関数で複素数を作り、IMSECHでsechを取り、IMABS・IMARGUMENT・IMCOSHで結果を検算する流れで、エンジニアリング系のシートを軽快に組み立ててみてくださいね。
