「スプレッドシートで複素数のコタンジェントを計算したいけど、cos/sinに分けて自分で割り算するのは面倒…」
スプレッドシートで複素数の三角関数を扱っていると、コタンジェント(余接)が必要になる場面がありますよね。cos(z)とsin(z)を別々に計算して、IMDIVで割って…という手順を毎回踏むのはちょっと大変です。
そんなときに頼りになるのがGoogleスプレッドシートのIMCOT関数です。複素数を渡すだけでコタンジェントの値を一発で返してくれるので、交流回路のインピーダンス計算や制御工学の伝達関数の数式が一気にすっきりしますよ。
ExcelのIMCOT関数と完全互換なので、Excelファイルとやり取りする現場でも安心ですね。COMPLEX関数で作った複素数や、IMSUM・IMPRODUCTの演算結果からも、そのままコタンジェントを計算できます。
この記事では、スプレッドシートのIMCOT関数の基本構文と実務での活用例を解説します。cos/sin比に基づく内部計算の仕組みや、よくあるエラーと対処法もしっかり紹介していきますよ。
スプレッドシートのIMCOT関数とは?
GoogleスプレッドシートのIMCOT関数(イマジナリー・コタンジェント関数)は、複素数のコタンジェント(余接)を返す関数です。エンジニアリング関数(電気・物理・工学系の計算で使う関数群)のひとつに分類されますよ。
読み方は「アイエムコット」または「アイエム・コタンジェント」です。関数名は「IM(Imaginary:虚数)+ COT(Cotangent:余接)」に由来します。複素数「a+bi」に対して、複素数版のコタンジェント値を返してくれるのが役割ですね。
そもそも複素数のコタンジェントとは、実数の三角関数を複素数全体に拡張したものです。定義式は次のようにシンプルですよ。
cot(z) = cos(z) / sin(z) = 1 / tan(z)
つまりIMCOT(z)はIMCOS(z)をIMSIN(z)で割った結果と等価ですね。IMTAN(z)の逆数とも言い換えられます。
| 複素数(z) | IMCOT(z)の結果(概算) | 内部計算 |
|---|---|---|
| π/2+0i | 0 | cos(π/2)/sin(π/2) = 0/1 |
| 0+1i | -1.3130352855i | -i × coth(1) |
| 1+1i | 0.2176215618-0.8680141843i | cos(1+i)/sin(1+i) |
| 1+0i | 0.6420926159 | cos(1)/sin(1) |
| 0+0i | #NUM!(特異点) | sin(0) = 0 で発散 |
IMCOT関数を使えば、この表の右側にある「複素数のコタンジェント」をサクッと取り出せます。ExcelのIMCOT関数とも仕様が一致していて、Excel 2013以降のすべてのバージョンに対応していますよ。
複素数のコタンジェントは、交流回路のリアクタンス比、制御工学の伝達関数、フーリエ級数の係数計算、量子力学の散乱問題など、複素数三角関数が必要な場面で活躍する基礎パーツですね。
IMCOT関数の書き方(構文と引数)
基本構文
=IMCOT(複素数)
引数は1つだけのシンプルな関数です。
引数の詳細
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 複素数(inumber) | 必須 | コタンジェントを求めたい複素数。文字列またはセル参照で指定する |
引数には「”1+2i”」や「”1+2j”」のような複素数文字列を直接渡せます。COMPLEX関数(実数と虚数から複素数を作成する関数)の結果や、複素数が入ったセルの参照も指定できますよ。
虚数単位は小文字の「i」または「j」のどちらでも受け付けます。数学では「i」、電気工学では「j」が使われる慣習ですね。IMCOT関数はどちらでも同じように動作してくれます。
TIP
戻り値は元の入力と同じ虚数単位で返されます。「1+1i」を渡せば「i」付きで、「1+1j」を渡せば「j」付きで返るので、表記の統一性も保たれますよ。
引数の実部・虚部はラジアン(弧度法)で扱われる点に注意してください。度数法(°)で角度を渡したい場合は、RADIANS関数(度をラジアンに変換する関数)で事前に変換する必要がありますね。
IMCOT関数の基本的な使い方
文字列で複素数を直接指定する
複素数文字列をそのまま引数に渡してみましょう。
=IMCOT("1+1i")
結果は「0.217621561854403-0.868014142895925i」になります。実部・虚部それぞれが小数で返ってきますね。
実部だけの複素数(虚部0)を渡すと、通常のコタンジェントと同じ結果になります。
=IMCOT("1")
=IMCOT("1+0i")
どちらも結果は「0.642092615934331」です。cos(1)/sin(1)の値が返ってきますね。
虚部だけの純虚数(実部0)を渡すと、結果は双曲線余接(ハイパボリックコタンジェント)に虚数単位を掛けた値になります。
=IMCOT("1i")
結果は「-1.31303528549933i」になります。これは「-i × coth(1)」の値ですね。cot(0+1i) = -i × coth(1) という恒等式が裏で成り立っています。
セル参照で複素数を指定する
実務ではセルに入った複素数を扱う場面が多いですよね。A2に「1+2i」が入っている場合は次のように書きます。
=IMCOT(A2)
結果は「0.0327977555337687-0.984329226458191i」になります。セル参照を渡すだけで、入っている複素数のコタンジェントを取り出せますよ。
COMPLEX関数と組み合わせる
COMPLEX関数で作った複素数のコタンジェントを、その場で計算することもできます。
=IMCOT(COMPLEX(1, 1))
結果は「0.217621561854403-0.868014142895925i」、つまり「IMCOT(“1+1i”)」と同じですね。COMPLEX(1, 1)が内部で「1+1i」を作り、IMCOT関数がそのコタンジェントを返してくれます。
数値で実部と虚部を別々に管理しているシートで便利な書き方ですよ。
度数法で角度を渡す(RADIANS関数と組み合わせる)
実部を「30度」のような度数法で渡したい場合は、RADIANS関数で変換します。
=IMCOT(COMPLEX(RADIANS(30), 0))
結果は「1.73205080756888」、つまりcot(30°) = √3 ≈ 1.732 ですね。実数のコタンジェントと同じ値が返ってきます。
虚部にも度数法を使いたい場合は両方をRADIANSで包みます。
=IMCOT(COMPLEX(RADIANS(30), RADIANS(45)))
度数法で角度を扱う実務シートでは、RADIANSとセットで使うのが定番ですよ。
ARRAYFORMULAで複数行を一括処理する
複素数のリストから一気にコタンジェントの列を作りたい場面もありますよね。そんなときはARRAYFORMULA関数(数式を範囲全体に展開する関数)と組み合わせます。
=ARRAYFORMULA(IMCOT(A2:A10))
A列に並んだ複素数から、対応するコタンジェント値をB列に一発で展開できますよ。フーリエ級数の各次数を一括処理するときに重宝しますね。
IMCOT関数の実務活用例
活用例1: 実部と虚部に分解して可視化する
IMCOT関数の戻り値は複素数なので、グラフにしたいときは実部と虚部に分けて取り出します。IMREAL関数とIMAGINARY関数を組み合わせる流れですよ。
A列に複素数が並んでいるとしましょう。
B2: =IMCOT(A2) ← 複素数のコタンジェント
C2: =IMREAL(B2) ← 実部
D2: =IMAGINARY(B2) ← 虚部
C列を実部、D列を虚部としてプロットすれば、複素平面上での挙動が一目で分かりますね。複素関数の特異点(sin(z)=0の点)付近で発散する様子も確認できる教材として使えるパターンです。
活用例2: IMTAN関数の逆数との一致を検算する
cot(z) = 1/tan(z) という関係が成り立つので、IMCOT関数とIMDIVの組み合わせで検算できます。
セルA2に複素数「1+1i」が入っているとします。
=IMCOT(A2)
=IMDIV("1", IMTAN(A2))
両者は同じ結果「0.217621561854403-0.868014142895925i」になりますよ。複素関数論の基本恒等式を、スプレッドシート上で確認できる仕組みですね。教育用の教材や、実装の妥当性チェックに使える場面です。
活用例3: 交流回路のリアクタンス比を計算する
交流回路でインピーダンスの比を扱う場面では、複素数のコタンジェントが顔を出しますよ。たとえばLC回路の共振周波数近傍では、リアクタンス比が「cot(ωL/R + iα)」のような形で表現される場合があります。
実部1.0(基本振動成分)、虚部0.2(減衰成分)の場合を考えましょう。
A2: 1.0 ← 実部(振動成分)
B2: 0.2 ← 虚部(減衰成分)
C2: =IMCOT(COMPLEX(A2, B2)) ← 複素数のコタンジェント
D2: =IMREAL(C2) ← 実部の比
E2: =IMAGINARY(C2) ← 虚部の比
C列の値が、その条件でのリアクタンス比に対応しますね。RLC回路の解析シートや、フィルタ設計の検討シートで活躍するパターンです。
活用例4: IMCOSとIMSINの比との一致を確認する
定義どおり cot(z) = cos(z)/sin(z) が成り立つので、IMCOSとIMSINとIMDIVを組み合わせて検算できますよ。
A2: 1+1i
B2: =IMCOT(A2) ← 直接計算
C2: =IMDIV(IMCOS(A2), IMSIN(A2)) ← 定義式から計算
B2とC2は同じ結果「0.217621561854403-0.868014142895925i」になりますね。複素数三角関数の定義をスプレッドシート上で再現することで、数式の理解が深まる仕組みです。
活用例5: フーリエ級数の係数計算
フーリエ級数の係数公式の中には、cot(nπx/L) のような項が現れる場合があります。IMCOT関数を使えば、減衰を含む複素数版の級数も組み立てられますよ。
次数n=1〜5、引数α=0.5+0.1iの場合を考えましょう。
A2:A6 に n = 1, 2, 3, 4, 5 を入れる
B2: =IMCOT(IMPRODUCT(A2, COMPLEX(0.5, 0.1)))
B3〜B6 にコピー
各次数のコタンジェント項が一気に並びますね。フーリエ展開の数値検証や、信号処理の教材で使える書き方ですよ。
IMCOT関数とCOMPLEX関数群の関係
複素数を扱う関数群の中で、IMCOT関数の位置づけを整理しておきましょう。
| 関数 | 入力 | 出力 | 役割 |
|---|---|---|---|
| COMPLEX | 実数 a, b | 複素数 a+bi | 複素数を作る |
| IMREAL | 複素数 a+bi | 実数 a | 実部を取り出す |
| IMAGINARY | 複素数 a+bi | 実数 b | 虚部を取り出す |
| IMABS | 複素数 a+bi | 実数 √(a²+b²) | 大きさを取り出す |
| IMARGUMENT | 複素数 a+bi | 実数 atan2(b,a) | 偏角を取り出す |
| IMCONJUGATE | 複素数 a+bi | 複素数 a-bi | 共役を作る |
| IMCOS | 複素数 z | 複素数 cos(z) | コサインを計算する |
| IMSIN | 複素数 z | 複素数 sin(z) | サインを計算する |
| IMTAN | 複素数 z | 複素数 tan(z) | タンジェントを計算する |
| IMCOT | 複素数 z | 複素数 cot(z) | コタンジェントを計算する |
IMREALやIMABSが「複素数から実数を取り出す」のに対して、IMCOT関数は「複素数から複素数を計算する」役割です。出力もそのまま複素数なので、IMSUMやIMPRODUCTにそのまま渡してさらに計算を続けられますよ。
たとえば定義式どおりにcot(a+bi)を手動で組み立てると次のようになります。
=IMDIV(IMCOS(A2), IMSIN(A2))
これはIMCOTと同じ結果になりますが、IMCOSとIMSINとIMDIVの3つを組み合わせる必要がありますよね。IMCOTを使えば1関数で済むので、数式が読みやすくなります。
IMCOT関数のよくあるエラーと対処法
#NUM! エラー(複素数の形式エラー)
複素数として認識できない文字列を渡したときに発生します。虚数単位が大文字になっていたり、i・j以外の文字を使っている場合が典型例ですよ。
=IMCOT("1+1I") → #NUM!(大文字のIは不可)
=IMCOT("1+1k") → #NUM!(i・j以外は不可)
=IMCOT("1+1i") → #NUM!(全角文字は不可)
対処法は、複素数文字列を必ず半角の「a+bi」または「a+bj」の形式にすることです。虚数単位は小文字限定なので、CapsLockがオンになっていないか確認してくださいね。
スペースが入っている場合(例: "1 + 1i")も認識できないことがあるので、余計な空白を除いておくと安心です。
#NUM! エラー(特異点による発散)
sin(z)が0になる点では、cot(z)は発散して定義できません。z = 0, π, 2π… のように実部がπの整数倍で虚部が0の場合に起こりますよ。
=IMCOT("0") → #NUM!(sin(0) = 0 で発散)
=IMCOT("0+0i") → #NUM!(同上)
対処法は、入力値が特異点に近づかないようチェックすることです。物理的な意味のある範囲に制限する、特異点近傍ではIFERRORで代替値を返すなどの工夫が必要ですね。
#VALUE! エラー(引数の型エラー)
引数に論理値やエラー値を渡したときに発生します。
=IMCOT(TRUE) → #VALUE!(論理値は不可)
=IMCOT(#N/A) → #VALUE!(エラー値は不可)
対処法は、正しい複素数文字列または数値・セル参照を渡すことです。入力元のセルがエラーになっている場合は、そのエラーを先に解消する必要がありますよ。
虚部が大きすぎてオーバーフロー
虚部が極端に大きい複素数を渡すと、内部のcosh/sinh計算が指数関数的に大きくなって、計算結果がオーバーフローすることがあります。
=IMCOT("0+1000i") → #NUM!(cosh(1000)が大きすぎる)
対処法は、虚部の値を物理的に意味のある範囲に制限することです。減衰計算なら時定数の数倍程度に抑える、といった調整が必要ですね。
ただし虚部が大きい純虚数の場合、cot(bi) = -i × coth(b) で b が大きいと coth(b) は1に近づくため、=IMCOT("0+50i") 程度なら「-1i」に近い安定した値が返りますよ。
IFERRORでまとめてエラーを吸収する
入力データの信頼性が低い場合は、IFERROR関数(エラー時に代替値を返す関数)で包んでおくとシート全体の集計が止まりません。
=IFERROR(IMCOT(A2), "形式エラーまたは特異点")
エラー時にメッセージを返すようにしておけば、安心して大量データに適用できますよ。特異点近傍を扱うシートでは特に重要ですね。
IMCOT関数とExcelの互換性
GoogleスプレッドシートのIMCOT関数は、ExcelのIMCOT関数と仕様が完全に一致しています。構文・引数・戻り値の形式・エラー条件まで同じですよ。
ExcelファイルをGoogleスプレッドシートで開いてもIMCOT関数はそのまま動作します。逆にスプレッドシートで作った数式をExcelで開いても問題ありませんね。
ExcelのIMCOT関数は、Excel 2013以降のバージョンで追加されました。Microsoft 365、Excel for Mac、Excel Online でも同じように使えますよ。Excel 2010以前のバージョンでは利用できないので、古い環境とファイルを共有する場合は注意してくださいね。
Excel 2010以前で同じ計算をしたい場合は、=IMDIV(IMCOS(A2), IMSIN(A2)) のように IMCOS と IMSIN と IMDIV を組み合わせて代替できますよ。
複素数関連の関数一覧
IMCOT関数と一緒に使うことが多い、複素数関連の関数をまとめました。
| 関数名 | 機能 |
|---|---|
| COMPLEX | 実数と虚数から複素数を作成する |
| IMREAL | 複素数の実数係数を返す |
| IMAGINARY | 複素数の虚数係数を返す |
| IMABS | 複素数の絶対値(大きさ)を返す |
| IMARGUMENT | 複素数の偏角(角度)をラジアンで返す |
| IMCONJUGATE | 共役複素数を返す |
| IMCOS | 複素数のコサインを返す |
| IMSIN | 複素数のサインを返す |
| IMTAN | 複素数のタンジェントを返す |
| IMCOT | 複素数のコタンジェントを返す |
| IMSUM | 複素数の合計(足し算)を返す |
| IMSUB | 複素数の差(引き算)を返す |
| IMPRODUCT | 複素数の積(掛け算)を返す |
| IMDIV | 複素数の商(割り算)を返す |
| IMEXP | 複素数の指数関数を返す |
| IMLN | 複素数の自然対数を返す |
| IMSQRT | 複素数の平方根を返す |
IMCOT関数は、これら複素数関数群の中で「コタンジェントを計算する」役割を担います。COMPLEXで作り、IMCOTでコタンジェントを取り、IMREAL・IMAGINARYで実部と虚部に分けて可視化するのが基本パターンですね。
まとめ
GoogleスプレッドシートのIMCOT関数は、複素数のコタンジェント(余接)を返す関数です。交流回路のリアクタンス比、制御工学の伝達関数、フーリエ級数の係数計算、量子力学の散乱問題など、複素数三角関数が必要な場面で欠かせない関数ですよ。
- 構文は
=IMCOT(複素数)で引数は1つだけのシンプルな関数 - 「a+bi」を渡すと「cos(a+bi) / sin(a+bi)」が返る
- 「a+bj」のような工学系表記もそのまま受け付ける
- 引数の角度はラジアンで扱う(度数法ならRADIANS関数で変換)
- 虚部0の実数を渡すと、実数のコタンジェントと同じ値になる
- 実部0の純虚数を渡すと、「-i × coth(b)」の値が返る
- COMPLEX関数の結果やセル参照、複素数演算の結果からコタンジェントを計算できる
- IMTAN関数の逆数、IMCOS÷IMSINの比と等価
- ARRAYFORMULAで複数の複素数を一括処理できる
- z = 0, π, 2π… のような特異点では #NUM! エラー(sin(z)=0で発散)
- 大文字の「I」「J」や全角文字、i・j以外の単位は #NUM! エラー
- 論理値やエラー値を渡すと #VALUE! エラー
- 虚部が極端に大きいとオーバーフローで #NUM! エラー
- ExcelのIMCOT関数と完全互換(Excel 2013以降)
複素数のコタンジェントが必要になったら、IMCOT関数の出番ですよ。COMPLEX関数で複素数を作り、IMCOTでコタンジェントを取り、IMREAL・IMAGINARYで成分を分解する流れで、エンジニアリング系のシートを軽快に組み立ててみてくださいね。
