スプレッドシートにBESSELY関数はない|#NAME?になる理由と代替方法

スポンサーリンク

「GoogleスプレッドシートでBESSELY関数を入力したら #NAME? エラーになった」。それ、数式のミスではありません。

先に結論をお伝えします。GoogleスプレッドシートにBESSELY関数はありません。BESSELYは Excel 専用のエンジニアリング関数で、スプレッドシートには実装されていないんです。

この記事では、実際に検証した結果と、スプレッドシートユーザーが第2種ベッセル関数 Y_n(x) を計算するための代替方法を紹介します。

スプレッドシートでBESSELYは使えない(実機検証)

実際にGoogleスプレッドシートのセルに入力してみると、次のようになります。

=BESSELY(1, 0)   → #NAME? エラー

#NAME? は「そんな名前の関数は知らない」というエラーです。スペルミスでも設定の問題でもなく、Googleスプレッドシートの関数リストにBESSELYが存在しないことが原因です。BESSELJ・BESSELI・BESSELKも同様に未実装で、すべて #NAME? になります。

ExcelにはBESSELJ・BESSELY・BESSELI・BESSELKの4関数が標準搭載されていますが、Googleスプレッドシートはエンジニアリング関数の一部しか実装しておらず、ベッセル関数系は対象外です。Web上には「スプレッドシートでBESSELYが使える」と書かれた解説も見かけますが、Excelの仕様と混同したものなので注意してください。

代替方法1: Excelで計算する(いちばん手軽)

BESSELYが必要なら、Excelを使うのが最も確実です。デスクトップ版だけでなく、無料のExcel On the web(Web版Excel)でもBESSELYは使えます。

=BESSELY(1, 0)   → 0.0883(Excelでの結果)

構文は =BESSELY(x, n) で、xに評価する値(正の数)、nに次数(0以上の整数)を指定します。引数の意味やエラー対処の詳細は、ExcelのBESSELY関数の使い方で解説しています。

Excelで計算した場合の参考値を載せておきます。検算にお使いください。

数式結果(概算)
=BESSELY(1, 0)0.0883
=BESSELY(1, 1)-0.7812
=BESSELY(2, 0)0.5104
=BESSELY(2, 1)-0.1070

Excelで使うときのエラー対処

Excel側で発生しやすいエラーもまとめておきます。

  • #NUM! エラー: x に 0 以下を指定した場合に発生します。Y_n(x) は x→0 で負の無限大に発散するため、x は正の数で指定してください。次数 n に負の値を指定した場合も同様です
  • #VALUE! エラー: 引数に文字列を渡した場合に発生します。セル参照の場合は参照先が数値か確認してください
  • 次数 n に小数を指定すると、小数点以下が切り捨てられて整数として計算されます

代替方法2: 外部ツールで計算する

単発で値が知りたいだけなら、外部ツールを使うのが手軽です。

  • Wolfram Alpha: 検索欄に「BesselY(0, 1)」と入力するだけで値が得られます
  • Python(SciPy): scipy.special.yv(n, x) で高精度に計算できます

計算結果をスプレッドシートに貼り付ければ十分、というケースは意外と多いですよ。

代替方法3: GASカスタム関数(ただしY_nは自作向きではない)

Google Apps Script(GAS)でカスタム関数を自作する方法もあります。ただし、第2種ベッセル関数 Y_n(x) は級数展開に対数項やディガンマ関数が含まれており、単純な級数では書けません。精度を保った自作はかなり大変なので、Y_n(x) に関しては方法1か方法2をおすすめします。

級数が単純な第1種ベッセル関数 J_n(x) と第1種変形ベッセル関数 I_n(x) は自作しやすく、コピペで使えるGASコードをBESSELJの記事BESSELIの記事に載せています。

そもそもBESSELY(第2種ベッセル関数)とは

第2種ベッセル関数 Y_n(x)(ノイマン関数とも呼ばれます)は、円筒座標系の微分方程式を解くときに登場する特殊関数です。主に次のような場面で必要になります。

  • 円筒導波管や同軸構造の電磁場解析(外側領域の解)
  • 円環膜の振動解析
  • 音響・波動問題の境界条件処理

第1種ベッセル関数 J_n(x) と同じく振動しながら減衰しますが、x→0 で負の無限大に発散するのが決定的な違いです。原点を含む領域では J_n(x) を、原点を含まない領域(円筒の外側など)では Y_n(x) を組み合わせて使います。

Excelの4つのベッセル関数の使い分け

Excelに搭載されている4関数の違いも整理しておきます(いずれもスプレッドシートでは未実装です)。

関数名正式名称数学記号特性主な用途
BESSELJ第1種ベッセル関数J_n(x)振動的・原点で有限振動・波動の正則解
BESSELY第2種ベッセル関数Y_n(x)x→0 で発散・振動的振動・波動の特異解
BESSELI第1種変形ベッセル関数I_n(x)単調増加(指数発散)熱伝導・拡散の正則解
BESSELK第2種変形ベッセル関数K_n(x)単調減少(指数減衰)熱伝導・拡散の特異解

振動・波動現象ならJ/Y、熱伝導・拡散現象ならI/K、原点で有限の解が欲しければJ/I、という使い分けです。

まとめ

ポイントを振り返っておきましょう。

  • GoogleスプレッドシートにBESSELY関数はない。入力すると #NAME? エラーになる(BESSELJ/I/Kも同様)
  • いちばん手軽な代替はExcel(Web版でも使える)。=BESSELY(x, n) で計算できる
  • 単発の計算ならWolfram AlphaやPython(SciPy)が便利
  • Y_n(x) はGASカスタム関数の自作には向かない(級数が複雑)。J_n(x)・I_n(x)なら自作コードあり

「スプレッドシートに関数がない」とわかるだけでも、原因調査の時間をかなり節約できます。Excelでの詳しい使い方はExcelのBESSELY関数の使い方をどうぞ。

関連記事

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