スプレッドシートのIMSIN関数|複素数のサインを求めて数値で使う

スポンサーリンク

「スプレッドシートで複素数の sin を計算したら、長い文字列が返ってきて足し算もできない…」。交流回路の計算や課題の答え合わせで、こんな場面に出会ったことはありませんか。

IMSIN関数の結果は「a+bi」形式の文字列です。そのまま + でつなぐと #VALUE! になり、答えが合っているのかも見えにくいですよね。全角の空白が1つ混じっただけで #NUM! になるなど、つまずく所が意外と多い関数です。

この記事では、Googleスプレッドシートの IMSIN 関数を解説します。書き方から結果を数値として取り出す方法まで、順に見ていきましょう。分解公式で答え合わせする表と、実機で確かめたエラーの規則もまとめました。

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

IMSIN関数は、複素数の正弦 sin(x+yi) を求めるGoogleスプレッドシートの関数です。読み方は「イマジナリー・サイン」。imaginary(虚数)と sine(正弦)を組み合わせた名前で、エンジニアリング関数の仲間に入ります。

中身は、次の分解公式と同じ計算をしています。

sin(x+yi) = sin x・cosh y + i・cos x・sinh y

実部が sin x・cosh y、虚部が cos x・sinh y という形ですね。この式は後半の検算でそのまま使うので、頭の片隅に置いておいてください。

構文と引数(=IMSIN(複素数)・i/j・ラジアン)

=IMSIN(複素数)

引数は1つだけです。

引数必須/任意指定できるもの
複素数必須"3+2i" のような文字列、複素数が入ったセル、COMPLEX関数の結果、実数

書くときのポイントは次の3つ。

  • 虚数単位は小文字の i か j。j で入れると、結果も j で返る
  • 角度の単位はラジアン。度数のまま渡すと別の値になる
  • 半角の空白は無視されるが、全角の空白や大文字の I は #NUM!

戻り値は「a+bi」形式の文字列

IMSINが返すのは数値ではなく文字列です。「0.53092108624852-3.59056458998578i」のように、a+bi の形で文字が並びます。

実数を渡しても同じです。=IMSIN(3.5) の「-0.35078322768962」も、ISTEXT で調べると TRUE でした。

表示の形にも少しクセがあります。実機で確かめた結果を並べてみましょう。

式結果(文字列)
=IMSIN("3+2i")0.53092108624852-3.59056458998578i
=IMSIN(COMPLEX(4,1))-1.16780727488952-0.768162763456573i
=IMSIN("1+1i")1.29845758141598+0.634963914784736i
=IMSIN("-1-1i")-1.29845758141598-0.634963914784736i
=IMSIN("0+1i")1.1752011936438i
=IMSIN(3.5)-0.35078322768962
=IMSIN(0)0

結果の実部が 0 のときは「1.1752011936438i」のように、虚部だけが表示されます。虚部が 0 なら「-0.35078322768962」と実数だけ。「0+」や「+0i」は付かないので、見た目で戸惑わないようにしましょう。

IMSIN関数の基本の使い方

ここからは、引数の渡し方を5通り紹介します。どれも1行で書ける形なので、手元のシートで試しながら読んでみてください。

複素数を文字列で直接指定する

いちばん手軽なのは、複素数をダブルクォーテーションで囲んで直接書く方法です。

=IMSIN("3+2i")

結果は「0.53092108624852-3.59056458998578i」です。"1 + 1i" のように半角の空白を入れても、"1+1i" と同じ値になりますよ。

電気系の教科書に合わせて j を使うこともできます。=IMSIN("3+2j") の結果は「0.53092108624852-3.59056458998578j」。入力と同じく j のまま返ってくるので、表記をそろえたいときも安心です。

セル参照で指定する

A2セルに「1+1i」が入っているなら、=IMSIN(A2) と書くだけです。結果は「1.29845758141598+0.634963914784736i」になります。

注意したいのは、参照先が空白セルのときの動きです。エラーにはならず、文字列の「0」が返ってきます。入力漏れに気づきにくいので、データの欠けがないか先に確認しておきましょう。

なお、引数に空の文字列 "" を直接渡すと #NUM! になります。空白セルと空文字で結果が違う点は、覚えておくと役立ちますよ。

COMPLEX関数と組み合わせる

実部と虚部が別々の列に入っているなら、COMPLEX関数で複素数の文字列を組み立ててから渡します。

=IMSIN(COMPLEX(4,1))

結果は「-1.16780727488952-0.768162763456573i」です。A列に x、B列に y がある表なら、=IMSIN(COMPLEX(A2,B2)) と書けます。文字列を手で打つ手間がなくなりますね。

この形は、あとで紹介する検算表でもそのまま使います。実部と虚部を数値で持っておくと、入力ミスも見つけやすいですね。

実数を渡す(度数ならRADIANSで変換)

IMSINには実数も渡せます。普通の sin と同じ計算になり、結果が文字列で返る点だけが違います。

=IMSIN(RADIANS(30))

結果は「0.5」です。角度を度数で持っているときは、RADIANS関数でラジアンに直してから渡しましょう。

ひとつ面白いのが =IMSIN(PI()) の結果です。0 ではなく「1.22464679914735E-16」になります。PI() 自体が近似値で、ごく小さな誤差が残るためです。

実数の sin だけが欲しいなら、数値で返る SIN 関数のほうが扱いやすいでしょう。

ARRAYFORMULAで複数行を一括で計算する

複数の複素数をまとめて計算したいときは、ARRAYFORMULA関数で包みます。

=ARRAYFORMULA(IMSIN({"1+1i";"0+1i"}))

実機では2行に展開されました。1行目は「1.29845758141598+0.634963914784736i」、2行目は「1.1752011936438i」。

範囲で指定するなら =ARRAYFORMULA(IMSIN(A2:A10)) の形になります。空白セルからは「0」が返るので、空の行を空欄のままにしたいときは IF で除外しておくと見やすくなります。

計算結果を数値として使うには

IMSINの結果をグラフにしたり、しきい値と比べたりしたい場面もありますよね。この章では、文字列の結果を数値として使うための手順をまとめます。

そのまま足すと#VALUE!になる理由

IMSINの戻り値は文字列なので、虚部を含む結果は普通の四則演算に使えません。たとえば次の式は #VALUE! になります。

=IMSIN("1+1i")+1

原因は、+ が数値どうしを計算する演算子だからです。「1.29845758141598+0.634963914784736i」のような文字列は数値に直せず、エラーになります。複素数のまま計算を続けるなら、足し算は IMSUM、掛け算は IMPRODUCT を使いましょう。

IMREAL・IMAGINARY・IMABSで取り出す

数値として扱いたいなら、必要な部分を取り出す関数を通します。B2に =IMSIN("3+2i") が入っているとすると、次のようになります。

取り出すもの式結果(数値)
実部=IMREAL(B2)0.53092108624852
虚部=IMAGINARY(B2)-3.59056458998578
絶対値=IMABS(B2)3.629604837…

3つとも戻り値は数値なので、SUM・グラフ・条件付き書式にそのまま使えます。実部はIMREAL関数、虚部はIMAGINARY関数の記事で詳しく説明しています。

大きさで判定したいときは、IMABS関数の出番ですね。=IMABS(B2)>=3 のように、比較の式にそのまま組み込めます。

表示桁をROUNDで整える

IMSINの結果は15桁前後まで表示されるので、表に並べると読みにくいですよね。実部と虚部を丸めてから、COMPLEXで組み直すと見た目がすっきりします。

=COMPLEX(ROUND(IMREAL(B2),4),ROUND(IMAGINARY(B2),4))

小数4桁にそろった複素数の文字列が返ってきます。ただし、丸めた値で計算を続けると誤差が積み重なります。計算用には元のB列を使い、丸めた列は表示専用にしておきましょう。

数値のまま桁をそろえたいなら、=ROUND(IMREAL(B2),4) のように取り出した値を丸めるだけで十分です。

計算が合っているか確かめる(検算と関連関数)

課題の答え合わせや、計算シートの確認に使える検算の方法を紹介します。あわせて、IMSINと関係の深い関数も整理しておきます。

sin x・cosh y と cos x・sinh y で検算する表

冒頭の分解公式を使えば、IMSINの結果を SIN・COS・SINH・COSH だけで検算できます。A列に x、B列に y を入れて、2行目に次の式を並べます。

C2: =IMSIN(COMPLEX(A2,B2))        ← IMSINの結果
D2: =SIN(A2)*COSH(B2)             ← 実部の理論値
E2: =COS(A2)*SINH(B2)             ← 虚部の理論値
F2: =IMREAL(C2)-D2                ← 実部の差
G2: =IMAGINARY(C2)-E2             ← 虚部の差
H2: =AND(ABS(F2)<1E-10,ABS(G2)<1E-10)  ← 判定

実機で差を測った結果がこちら。

xyIMSINの結果実部の差虚部の差
111.29845758141598+0.634963914784736i2.66453525910038E-15-1.11022302462516E-16
320.53092108624852-3.59056458998578i2.22044604925031E-16-4.44089209850063E-16

差はぴったり 0 にはならず、1E-15 前後の小さな値が残ります。これは浮動小数点の丸め誤差で、計算の間違いではありません。

そのため、=F2=0 のような比べ方をすると FALSE になってしまいます。判定は H列のように「差の絶対値が 1E-10 未満か」で見るか、ROUND で丸めてから比べるのが確実です。

誤差は理論上 0 になるはずの部分にも出ます。たとえば =IMSIN(COMPLEX(PI()/2,0.5)) の結果は「1.12762596520638-1.81939453489018E-15i」でした。

cos(π/2) は本来 0 なので、虚部の「E-15」は誤差だと読み取れますね。

純虚数を渡すと i・sinh になる(IMSINHとの関係)

分解公式で x=0 とすると、sin 0=0・cos 0=1 なので sin(yi)=i・sinh y になります。純虚数の正弦は、双曲線正弦に i を掛けた形になるわけですね。

実際に =IMSIN("0+1i") を計算すると「1.1752011936438i」が返ります。この虚部の値は sinh 1 の値(1.1752…)と同じです。=IMSIN("i") と書いても同じ結果になります。

双曲線正弦そのものを求めたいときは、専用のIMSINH関数を使うほうが式の意図が伝わります。IMSINとIMSINHは「純虚数で入れ替わる関係」と覚えておくと、検算にも使えて便利ですよ。

IMCOS・IMTANなどの関連関数とExcel版

IMSINと一緒に使うことが多い関数をまとめました。

関数求めるものIMSINとの関係
IMCOS複素数の余弦 cos zsin と対になる関数
IMTAN複素数の正接 tan ztan z = sin z ÷ cos z
IMSINH複素数の双曲線正弦 sinh z純虚数で sin と入れ替わる
IMEXP複素数の指数関数 e^zsin z を e^(iz) で表せる

sin z は指数関数を使って (e^(iz)−e^(−iz))÷2i とも書けます。IMEXPで組み立てた値と比べれば、別ルートの検算にもなりますね。

Excelにも同じ名前のIMSIN関数があり、構文は =IMSIN(複素数) で共通です。対応バージョンやExcel側の動きは、ExcelのIMSIN関数の記事で解説しています。

IMSIN関数のエラーと対処法

IMSINのエラーは、ほとんどが「複素数として読めない文字列」が原因です。Googleスプレッドシートの実機で確かめた結果を表にまとめました。

入力例結果
半角の空白=IMSIN("1 + 1i")空白なしと同じ値
全角の空白=IMSIN("3 + 4i")#NUM!
大文字の I=IMSIN("3+4I")#NUM!
全角の文字=IMSIN("3+4i")#NUM!
i・j 以外の文字=IMSIN("3+4k")#NUM!
ただの文字列A1の「hello」を参照#NUM!
空の文字列=IMSIN("")#NUM!
論理値=IMSIN(TRUE)#NUM!
虚部が大きすぎる=IMSIN("1+710i")#NUM!
エラー値=IMSIN(NA())#N/A(そのまま返る)
引数なし=IMSIN()#N/A
戻り値に + で計算=IMSIN("1+1i")+1#VALUE!

#NUM!になる入力(全角空白・大文字I・全角文字・論理値など)

#NUM! の多くは、全角や大文字が紛れ込んだ文字列です。日本語入力のまま打ったり、ほかの資料からコピーしたりすると起こりやすいですね。

半角の空白は通るのに、全角の空白は通らない点がわかりにくいところです。見た目では区別しにくいので、#NUM! が出たらまず入力モードを確認してみてください。

元データを直せないときは、関数側で整えてから渡す方法もあります。

=IMSIN(LOWER(SUBSTITUTE(A2," ","")))

SUBSTITUTEで全角の空白を消し、LOWERで大文字の I を小文字にしています。全角の数字には効かないので、その場合は半角で入力し直しましょう。

TRUE・FALSE のような論理値や、「hello」のような文字列も #NUM! です。チェックボックスの列を誤って参照していないか、範囲指定も見直してみてください。

虚部が大きすぎると#NUM!になる

分解公式のとおり、虚部 y が大きくなると cosh y・sinh y が急激に増えます。実機では =IMSIN("1+709i") を計算できました。結果は「3.45777571011361E+307+2.22021225102104E+307i」です。

ところが =IMSIN("1+710i") は #NUM! です。虚部が 711 のときも同じで、境界は 709 と 710 の間にあります(それより細かい境界は測っていません)。

一方、実部はかなり大きくしても計算できます。=IMSIN("710") は「0.0000602887066915853」でした。=IMSIN(1E+10) も「-0.487506025087511」と答えが返ります。

#NUM! の原因が桁の大きさなら、まず虚部の値を疑うのが近道です。

エラー値はそのまま返る・引数の数の誤りは#N/A

参照先がエラーのときは、そのエラーがそのまま返ってきます。=IMSIN(NA()) の結果は #N/A で、#VALUE! に変わることはありません。この場合はIMSINではなく、参照元のセルを直すのが正解です。

=IMSIN() のように引数を書き忘れたときも #N/A になります。VLOOKUPなどの「見つからない」とは別の原因なので、式の括弧の中を確認しましょう。

IFERRORで包めばエラー表示は消せます。ただ、入力ミスまで隠れてしまうので、検算が終わってから使うのがおすすめです。

まとめ

GoogleスプレッドシートのIMSIN関数は、複素数の正弦 sin(x+yi) を求める関数です。最後にポイントを振り返っておきましょう。

  • 構文は =IMSIN(複素数)。虚数単位は小文字の i か j で、j で入れると結果も j
  • 角度はラジアン。度数は RADIANS で変換する
  • 戻り値は「a+bi」形式の文字列で、実数を渡しても文字列になる
  • a+bi の結果をそのまま + で計算すると #VALUE!。数値が必要なら IMREAL・IMAGINARY・IMABS で取り出す
  • sin x・cosh y と cos x・sinh y で検算でき、差は 1E-15 前後の誤差になる
  • 差は =0 ではなく ABS(差)<1E-10 か ROUND で判定する
  • 純虚数では sin(yi)=i・sinh y となり、IMSINH とつながる
  • 全角の空白・大文字の I・全角文字・論理値・空文字は #NUM!
  • 虚部が 710 になると #NUM!(709 までは計算できた)
  • エラー値はそのまま返り、引数の数の誤りは #N/A

まずは =IMSIN(COMPLEX(A2,B2)) と検算の列を並べた表を作ってみてください。答えが合っているか一目でわかると、複素数の計算もぐっと気楽になりますよ。

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