関数電卓コラム

07/10/11 Natural Display機で数値積分

07/11/13補筆

先日のこと,レーザーの専門家なら誰もが知っていなければならないある数値を忘れてしまい,思い出せなくなった.それは「ガウスビームを半径wのアパーチャーで切ったらどの程度のパワーが透過するか」という数値だ.

ガウスビームとは最も基本的なレーザービームで,断面強度分布はスポットサイズwをパラメータとして半径rの関数で以下のように表される.

$\displaystyle I(r)$ $\textstyle =$ $\displaystyle I_0 e^{-2 r^2/w^2}$

グラフに描くと図1の様になる.このビームを,半径wの円形の開口にくぐらせたらどの程度のパワーが通過するか,というのが問題だ.


図1: Gauss beamの強度分布

計算は解析的に出来るのだが,かなり面倒くさい.ところが,たまたま手元にCASIO fx-912ESがあった.マニュアルも読まずにコイツを数値計算で解いてみることにした.

積分は以下の通り.半径rより内側に存在するパワーをとすると,

$\displaystyle P(r)$ $\textstyle =$ $\displaystyle 2 \pi I_0 \int_0^r r' e^{-2 r'^2/w^2} dr'$

である.rを充分大きく取ると全パワーが得られる.Natural Displayなら見た目の通り,以下のように入力できる.ここで,とwは1に規格化している.

無限に思えるほどに長い時間が経過し,解答が!!

おおっ,解析解が出たよ!いま知りたいのは$\displaystyle F(r) = \frac{P(r)}{P_0}$なので,積分をπ/2で割って,

を計算させればよい.

そうだ,86.5%だったっけ.というわけで,求める解答を数値積分を用いてマニュアルを一切読まずに得ることが出来た.これは,画期的なことだ.

ちなみに,解析的な積分を用いた正当な解き方は以下の通り.ガウスビームの強度分布は

$\displaystyle I(r)$ $\textstyle =$ $\displaystyle I_0 e^{-2 r^2/w^2}$

で,求める積分は

$\displaystyle P(r)$ $\textstyle =$ $\displaystyle 2 \pi I_0 \int_0^r r' e^{-2 r'^2/w^2} dr'$

だ.これを解析的に積分すると

  $\textstyle =$ $\displaystyle 2 \pi I_0 \left[ -\frac{w^2}{4}e^{-2 r'^2/w^2}\right]_0^r$
  $\textstyle =$ $\displaystyle 2 \pi I_0 \left(1 -\frac{w^2}{4}e^{-2 r^2/w^2}\right)$

を得る.積分範囲を0~∞にするとパワーが得られる.

$\displaystyle P_0 = P(\infty)$ $\textstyle =$ $\displaystyle 2 \pi I_0$

従って

$\displaystyle F(r) = \frac{P(r)}{P_0}$ $\textstyle =$ $\displaystyle \left(1 -\frac{w^2}{4}e^{-2 r^2/w^2}\right)$

が解析解.r/w=1の答を有効数字10桁で計算すると0.8646647168となる.fx-912ESの数値積分は10桁の精度で正しい.

私の関数電卓におけるポリシーの一つに「数値積分機能は不要」というのがある.これは,電卓という貧弱なユーザーインターフェースで,マニュアルを読まなくともできるような数値積分の入力方法は存在しないことと,電卓で入力出来るような問題なら解析解があるし,数値計算でなくては解けないような問題は電卓の手に余る(パソコンを使いなさい),という経験則から来ている.今回の問題も,fx-921ESが手元に無ければMathematicaを起動していたことだろう.しかし,結果として関数電卓を用いて非常に簡単に求める答を得ることが出来た.

どうやら,Natural Display機についてはポリシーを変更する必要がありそうだ.


こうなると,関数電卓による数値計算全般に興味がわいてきた.正直言って今まで全く使ったことはない.機種毎に入力方法が異なるし,なにより,マニュアルを読まないと使えないからだ.

手元にある電卓で,数値積分が可能なモデルは上述のCASIO fx-912ESの他にCASIO fx-991MSSHARP EL-520ECanon F-788dxHP 35sの計5機種.ちなみに,Canonから2007年9月にリリースされた最新機種の2モデル(F-715SとF-766S)だが,上位機種のF-766Sにも積分機能がない.潔く「関数電卓には数値積分機能は不要」と判断したのかもしれない.これはこれで画期的なことではないか.

種目はを計算させ,

  1. 操作のわかり易さ
  2. 解の正確さ
  3. 計算時間

を競うものとする.答えは10桁を超える精度で1になる(正確には1-1.38E-87).

CASIO fx-912ES (Natural Display model)

入力方法は「見たまま」なので特筆することはない.一応キー操作を書き下すと

[4] [∫dx] [ALPHA][X] [SHIFT][e^x] [(-)] [2] [ALPHA][X] [x^2] [→] [→] [0] [→] [1] [0] [=]

(18手)

答えは正確に1となった.計算時間は27秒.下の前モデルと比べ,計算時間が半減している.たいしたものだ.これでも,キー入力を取りこぼすのは何でだろうねえ.

CASIO fx-991MS (SVPAM model)

CASIOのSVPAM機の数値積分は,[∫dx]キーの後に被積分関数を入力,カンマに続けて積分範囲,と言う方法.積分も一種の関数として計算式の中に取り込める.一度分かってしまえばかなり直感的な方法なのだが,マニュアルを読まずに使うのは不可能.キー操作は以下の通り.

[4] [∫dx] [ALPHA][X] [SHIFT][e^x] [(] [(-)] [2] [ALPHA][X] [x^2] [)] [,] [0] [,] [1] [0] [)]

(19手)

数式表記では略される「×」記号が省略可能であることに注意しよう.

答えは正確に1となった.計算時間は54秒.CASIOの数値積分は非常に正確.

Canon F-788dx

Canon F-788dxのソフトウェアはCASIOのSVPAM機と共通点が非常に多い.積分操作の仕様も同様.キー操作はfx-991MSと全く同じで

[4] [∫dx] [ALPHA][X] [SHIFT][e^x] [(] [(-)] [2] [ALPHA][X] [x^2] [)] [,] [0] [,] [1] [0] [)]

(19手)

しかし,計算時間と答えはCASIOと全く違う.計算時間は13秒と爆速なのだが答えが正確ではない.積分計算ではCASIOと違うことをやっているようだ.

SHARP EL-520E

SHARPの関数電卓はまず被積分関数を入力して(やはり数式表記では略される「×」記号は省略可能),

その後[∫dx]キーを押す.すると,表示が切り替わって積分範囲を入力するプロンプトが出る.かなり,「積分が独立した機能」と言う設計思想だ.モード切替えこそないが,普通の計算とは全く違うことをやっているという感覚.もちろん,マニュアルを読まないと使えない機能だ.

続いて,b(積分区間終了),n(分割数)のプロンプトが出る.分割数はCASIOの場合自動的に最適値を探索してくれるようだがSHARPは手動で入力する必要がある.ここはデフォルトの100でやってみる.

計算中...の表示の後,

という答えが得られる.精度は悪い.計算時間は18秒.

操作は以下の通り.

[4] [ALPHA][X] [SHIFT][e^x] [(] [(-)] [2] [ALPHA][X] [x^2] [)] [∫dx] [0] [=] [1] [0] [=] [=]

(19手)意外に健闘.

HP 35s

正直,コイツの数値積分を理解するのが一番骨が折れた.そもそも,RPN電卓は「考えたとおりに打つ」のが良いのであって,予め数式を入力してそれを積分させる,というのは本来の使い方にもとるのかもしれない.プログラムが組める高機能機ゆえ,単純な積分となると操作方法はかえって面倒.マニュアル首っ引きで解読したのが以下の手順.

まず,数式メモリをクリアする必要がある.HP電卓は表記の都合上青シフトキー機能は青赤シフトキー機能は赤,その他のキーは黒で表記した.

[SHIFT][CLEAR] [3] [←] [ENTER]

続いて,「数式モード」で被積分関数を入力.ここで,HPらしからず,「×」記号は省略できない.日本の関数電卓は全て省略可能なのに,ここで更に水を開けられてしまった.

[EQN] [4] [×] [RCL][X] [×] [SHIFT][e^x] [+/-] [2] [×] [x^2] [RCL][X] [ENTER] [C]

[C] で数式モードから抜け,スタックX,Yに積分範囲を入力,もう一度「数式モード」に入ってから積分キーを押す.

[0] [ENTER] [1] [EQN] [SHIFT] [∫]

すると更にプロンプトが.「どの変数について積分するか」を指定する必要があるのだ.多機能は結構だが,ちょっと答を知りたいときは不便極まりない.

[X(1のキー)]

(28手)

ようやく答が得られる.積分結果は正確に1となった.計算時間は最遅の85秒.


まとめ

手持ちの関数電卓の数値積分機能を総合評価する.

表1: 関数電卓の数値積分機能総合評価

機種 操作方法 操作の
わかり易さ
解の正確さ 計算時間
[s]
総合評価
CASIO fx-912ES 見たまま
27 A
CASIO fx-991MS [∫dx] 数式,下限,上限, [=] 54 B
Canon
F-788dx
[∫dx] 数式,下限,上限, [=] × 13 B-
SHARP EL-520E 数式,[∫dx]
下限入力
上限入力
分割回数入力
× 18 C
HP 35s 数式クリア
[EQN]モードで数式定義
一般モードでスタックに上限,下限を積む
[EQN]モードで積分させたい数式選択
[∫]
独立変数を指定
× 85 D

こうしてまとめると,fx-912ESの数値積分はそのわかりやすさが際だっている.事実上「マニュアル無し」で使えるのはコイツだけだろう.これはひとえにNatural Display方式の恩恵.たった1行の数式表示エリアで数値積分を直感的に入力するのは所詮無理なのだ.Natural Displayの真価は,実はこう言うところにあるのかもしれない.

計算時間について比較すると,CASIOはfx-991MSからfx-912ESへのモデルチェンジで半減している.電卓は,目に見えないところも進化しているのだ.Canon,SHARPは「精度よりスピード」なので何とも言えない.HPの異常に遅い計算時間は,日本メーカーに比べて大メシぐらい(CR2032×2)であることを考え合わせるとかなり古い世代のLSI技術を使っている証左だ.

精度については,CASIOとHPを高く評価したい.分割数を自動的に判断し,かなり無茶な数値積分でも解析解と10桁の精度で一致する解を吐き出している.

いつもは優等生のHP 35sは今回は惨敗.「使いやすさ」を評価軸にした今回の比較では仕方のないところ.HP電卓のファンから文句が出そうだなあ.