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

スポンサーリンク

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

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

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

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

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

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

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

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

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

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

=BESSELK(1, 0)   → 0.4210(Excelでの結果)

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

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

数式結果(概算)
=BESSELK(1, 0)0.4210
=BESSELK(1, 1)0.6019
=BESSELK(2, 0)0.1139
=BESSELK(2, 1)0.1399

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

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

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

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

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

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

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

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

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

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

そもそもBESSELK(第2種変形ベッセル関数)とは

第2種変形ベッセル関数 K_n(x) は、円筒座標系の熱伝導・拡散の微分方程式を解くときに登場する特殊関数です。主に次のような場面で必要になります。

  • 円柱外側の温度分布の計算(熱伝導)
  • 電磁場の減衰解析(シールド・表皮効果)
  • 光ファイバーのクラッド領域のモード解析
  • 拡散現象の遠方場の解析

第1種変形ベッセル関数 I_n(x) が指数関数的に増大するのに対し、K_n(x) は単調に減少(指数関数的に減衰)するのが特徴です。また、x→0 で無限大に発散するため、原点を含まない領域(円柱の外側など)の解として使われます。

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

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

関連記事

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