スプレッドシートで第1種変形ベッセル関数 I_n(x) を求めたいけれど、どの関数を使えばいいかわからない。そんな場面はありませんか。
熱伝導や電磁波の解析、信号処理のカイザー窓関数の計算では、ベッセル関数の値が必要になります。手計算や紙の数表で求めるのは現実的ではないですよね。
GoogleスプレッドシートのBESSELI関数を使えば、セルに数式を入力するだけで第1種変形ベッセル関数の値を一発で計算できますよ。この記事では、BESSELI関数の構文から実務での使いどころ、エラー対処法まで丁寧に解説します。
スプレッドシートのBESSELI関数とは?第1種変形ベッセル関数を計算する関数
BESSELI関数は、第1種変形ベッセル関数 I_n(x) の値を返すスプレッドシートの関数です。読み方は「ベッセル・アイ」です。
ベッセル関数は、円筒座標系の微分方程式を解くときに登場する特殊関数です。工学や物理学の分野で広く使われています。
GoogleスプレッドシートではExcelと同じ仕様で動作します。Excel 2007以降と互換性があるため、Excel経験者にも違和感なく使えますよ。
BESSELI関数の数学的な意味
BESSELI関数が扱う「第1種変形ベッセル関数」は、通常のベッセル関数 J_n(x) に純虚数 ix を代入して得られる関数です。次の関係式が成り立ちます。
I_n(x) = i^(-n) × J_n(ix)
少し難しく見えますね。ただ、スプレッドシートでは関数に値を入れるだけで自動計算してくれます。数学的な背景を覚えなくても、計算するだけなら問題ありません。
I_n(x) の特徴は、x が大きくなると値が指数関数的に増加することです。通常のベッセル関数のような振動はしません。
どんなときに使う?
BESSELI関数は、主に次のような場面で活躍します。
- 円筒座標系の熱伝導方程式を解くとき
- 電磁場解析で円筒導波管や同軸ケーブルの計算をするとき
- 信号処理でカイザー窓関数(Kaiser window)の係数を求めるとき
- 拡散現象の境界値問題を扱うとき
理工系の研究やエンジニアリング業務で使うことが多い関数ですね。
BESSELI関数の構文と引数
基本構文
=BESSELI(x, n)
引数は2つで、どちらも必須です。省略するとエラーになります。
引数の説明
| 引数 | 必須/省略可 | 説明 |
|---|---|---|
| x | 必須 | 関数を評価する値(実数) |
| n | 必須 | ベッセル関数の次数(0以上の整数) |
引数 x には、関数に代入したい数値を指定します。正の値・負の値・0のいずれも指定できますよ。セル参照で渡すのが一般的です。
引数 n には、ベッセル関数の次数(じすう)を指定します。0以上の整数を入力してください。小数を渡すと小数点以下が自動的に切り捨てられます。たとえば n に 2.7 を指定すると、2として計算されますよ。
BESSELI関数の基本的な使い方
実際にスプレッドシートでBESSELI関数を使ってみましょう。代表的なパターンを3つ紹介します。
数値を直接指定する
セルに次のように入力します。
=BESSELI(1.5, 1)
この数式は、x=1.5、次数 n=1 のときの第1種変形ベッセル関数 I_1(1.5) の値を返します。結果は約 0.9817 になります。
数式バーに直接数値を打ち込むだけなので、ちょっと値を確認したいときに便利ですよ。
セル参照を使う
A1セルに x の値、B1セルに次数 n を入力しておけば、次のように書けます。
=BESSELI(A1, B1)
A1 に 1.5、B1 に 1 を入力すると、先ほどと同じ約 0.9817 という結果になります。パラメータを変えて繰り返し計算するときは、セル参照のほうが圧倒的にラクです。
次数ごとの値を一覧で確認する
x の値を固定して、次数 n を 0 から順に変えていくと、関数の振る舞いがわかりやすくなります。
| x の値 | 次数 n | 数式 | 結果(概算) |
|---|---|---|---|
| 1.5 | 0 | =BESSELI(1.5, 0) | 1.6467 |
| 1.5 | 1 | =BESSELI(1.5, 1) | 0.9817 |
| 1.5 | 2 | =BESSELI(1.5, 2) | 0.3378 |
| 1.5 | 3 | =BESSELI(1.5, 3) | 0.0807 |
次数が大きくなるほど値が小さくなる特徴がよくわかりますね。この一覧をスプレッドシートで作っておくと、パラメータの傾向をつかみやすいですよ。
BESSELI関数の実務活用パターン
ここからはスプレッドシートならではの便利な使い方を紹介します。表形式での一括計算と、x 値の振る舞い確認の2パターンです。
ARRAYFORMULAで複数次数を一気に計算する
スプレッドシートの強みである ARRAYFORMULA関数(範囲全体に数式を一気に展開する関数)と組み合わせると、複数の入力値に対して BESSELI を一発で計算できます。
A2:A6 に x の値(1, 2, 3, 4, 5)を、B2:B6 に次数(すべて 0)を入れておきます。C2 に次の数式を入れると、C2:C6 まで一気に展開されますよ。
=ARRAYFORMULA(BESSELI(A2:A6, B2:B6))
| x | n | I_n(x)(結果) |
|---|---|---|
| 1 | 0 | 1.2661 |
| 2 | 0 | 2.2796 |
| 3 | 0 | 4.8808 |
| 4 | 0 | 11.3019 |
| 5 | 0 | 27.2399 |
x が大きくなると I_0(x) が指数関数的に増加することが、表からも一目でわかります。手で1セルずつ数式を書くより、ARRAYFORMULA でまとめて流すほうが圧倒的に速いですよ。
x の変化に対する振る舞いを表で確認する
カイザー窓関数の係数を確認したいときなど、x をきざみ幅で変えて I_0(x) の変化を見たい場面があります。次のように作ると、変化が直感的にわかります。
A列に x の値(0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0)を入れて、B列に =BESSELI(A2, 0) を入力 → 下方向にコピーします。
| x | I_0(x) |
|---|---|
| 0.0 | 1.0000 |
| 0.5 | 1.0635 |
| 1.0 | 1.2661 |
| 1.5 | 1.6467 |
| 2.0 | 2.2796 |
| 2.5 | 3.2898 |
| 3.0 | 4.8808 |
スプレッドシートのグラフ機能(挿入 → グラフ)と組み合わせれば、I_0(x) の単調増加カーブを視覚化できます。論文や報告書に貼り付ける図を作るときにも便利です。
BESSELI/BESSELJ/BESSELK/BESSELY の使い分け
スプレッドシートにはBESSELIのほかに、3つのベッセル関数が用意されています。それぞれの違いを整理しておきましょう。
4関数の違いを比較表で整理
| 関数名 | 正式名称 | 数学記号 | 特性 | 主な用途 |
|---|---|---|---|---|
| BESSELJ | 第1種ベッセル関数 | J_n(x) | 振動的・減衰しながら振動 | 振動・波動の正則解 |
| BESSELY | 第2種ベッセル関数 | Y_n(x) | x→0 で発散・振動的 | 振動・波動の特異解 |
| BESSELI | 第1種変形ベッセル関数 | I_n(x) | 単調増加(指数発散) | 熱伝導・拡散の正則解 |
| BESSELK | 第2種変形ベッセル関数 | K_n(x) | 単調減少(指数減衰) | 熱伝導・拡散の特異解 |
大きく分けると2グループあります。
- BESSELJ / BESSELY: 通常のベッセル関数。振動や波動を扱う問題で使う
- BESSELI / BESSELK: 変形ベッセル関数。熱伝導や拡散など指数的な振る舞いの問題で使う
BESSELI と BESSELK はペアで使うことが多いので、セットで覚えておくと便利ですよ。
場面別の選び方
実務で「どれを使えばいい?」と迷ったときは、解きたい現象の性質で判断しましょう。
- 振動・波動現象(弦の振動、円形膜の振動、波動方程式)→ BESSELJ / BESSELY
- 熱伝導・拡散現象(円柱の温度分布、拡散方程式)→ BESSELI / BESSELK
- 指数的に増える解が欲しい(例: カイザー窓、円筒導波管)→ BESSELI
- 指数的に減衰する解が欲しい(例: 遠方場での減衰)→ BESSELK
どの関数を使うかは、最終的には解いている微分方程式の形で決まります。迷ったら関連現象から逆引きしてみてくださいね。
Excel版の各関数についても詳しく知りたいときは、BESSELJ関数・BESSELK関数・BESSELY関数 の各記事も参考になりますよ。
BESSELI関数のよくあるエラーと対処法
BESSELI関数で発生しやすいエラーと、その対処法をまとめました。
#VALUE! エラー(文字列を渡したとき)
x または n に数値以外の値を指定すると、#VALUE! エラーが表示されます。
=BESSELI("abc", 1) → #VALUE! エラー
対処法: 引数に文字列が入っていないか確認してください。セル参照の場合、参照先のセルが空白や文字列になっていることがありますよ。
#NUM! エラー(次数が負のとき)
n に負の整数を指定すると #NUM! エラーになります。
=BESSELI(1.5, -1) → #NUM! エラー
対処法: 次数 n は 0 以上の整数を指定してください。変形ベッセル関数では I_n(x) = I_(-n)(x) という対称性があります。負の次数を扱いたい場合は ABS関数(絶対値を返す関数)で正に変換してから渡しましょう。
=BESSELI(1.5, ABS(-2)) → BESSELI(1.5, 2) と同じ結果
なお、x が極端に大きい場合(およそ 700 を超える)も #NUM! が出ることがあります。I_n(x) は指数関数的に増加するため、扱える数値の上限を超えるからです。
#NAME? エラー(スペルミス)
関数名のスペルミスで発生します。「BESSEL」と「I」の間にスペースを入れたり、綴りを間違えたりすると起こります。
対処法: 関数名が BESSELI (スペースなし)になっているか、もう一度確認してみてください。スプレッドシートの数式入力時に表示される候補から選ぶと、スペルミスを防げますよ。
まとめ
この記事では、スプレッドシートのBESSELI関数について解説しました。ポイントを振り返っておきましょう。
- BESSELI関数は第1種変形ベッセル関数 I_n(x) の値を返すエンジニアリング関数
- 構文は
=BESSELI(x, n)で、引数は2つとも必須 - 次数 n は 0 以上の整数を指定する(小数は切り捨て)
- ARRAYFORMULA と組み合わせると複数の値を一気に計算できる
- ベッセル関数は4種類あり、振動系(J/Y)と熱伝導系(I/K)で使い分ける
- x に文字列で
#VALUE!、n が負で#NUM!、スペルミスで#NAME?エラー
ベッセル関数は理工系のニッチな関数ですが、必要になる場面では他の方法では代替できません。手元のスプレッドシートで即座に計算できると、検算や試行錯誤の効率がぐっと上がりますよ。
