エアガンの集弾限界

理想的なエアガンとBB弾、それに風などが無い理想的な環境があったとします。

この場合、

 30m先 | 直径3cm
 50m先 | 直径10cm

以下のばらつきに抑えることは構造的に不可能です(60cmのバレルで0.9Jで射出する場合)。

バレルとBB弾に直径差があることによって生じるこのばらつきを軽減するには、
 ・バレルの直径を小さくする
 ・バレルを長くする
 ・バレル内部の素材とBB弾の反発が起こりにくいものにする
にすることで軽減されます。


ここでの理想的とは、

・球の直径のばらつきは無い
・いつも同じ初速で撃ち出せる
・無風

とします。この場合でも同じ点に集弾することはありません。
なぜなら、バレルの直径とBB弾の直径が異なる為です。この差によってどの位集弾性が悪くなるのか、見積もりましょう。

これは構造的な問題であり、ばらつきの原因の中で取り除く事ができない1つの原因です。

ばらつく原因として、以下の三つが考えられますが、まず本稿では理想状態のばらつきを考えます。

ばらつきの種類 理想状態のばらつき(本稿) 製品誤差によるばらつき セッティングによるばらつき
BB弾重さ あり なし
BB弾の大きさ なし あり なし
回転のばらつき なし なし あり
手振れ なし なし あり

ばらつきが生じる原因


何故ばらつきが生じるかを考えましょう。
全くの理想であれば、銃口から同じ初速、角度、回転量で射出されたBB弾にばらつきが生じることはありません。
しかし、現実にはバレルの大きさとBB弾の大きさに差があります。これによって銃口から射出する時に進行方向と垂直な平面に速度を持つことになります。
銃口から出てきたBB弾の速度\(\mathbf{v}\)を以下のように表現します。

ここで、\(v_{z}, \mathbf{e}_{z}\)はバレルの方向に沿う速度、単位ベクトルで、
\(v_{x,y}, \mathbf{e}_{x,y}\)はバレルの方向に垂直な面への速度、単位ベクトルです。
すなわち、壁面に垂直な方向に対する速度ベクトルの大きさ\(v_\perp\)は、\(v_\perp=\sqrt{v_x^2+v_y^2}\)と表されます。

ばらつきが無くまっすぐ飛ぶのであれば\(v_{\perp}=0\)であり、そうでなければ\(v_{\perp}\ne 0\)です。

BB弾のばらつきが生じる原因は、射出方向に垂直な方向(横方向)に有限の速度が生じている、と仮定します。
この横方向の速度が生じる原因の一つは、ピストンでBB弾を空気で押す際に圧力が一定ではないとか、回転を掛けるためのゴムで生じる、などいろいろ考えられます。
ここでは、パッキンを通過して、もうこれ以上横揺れを増やすような原因が生じないのだ、と仮定します。壁の反射によって変化はあるものの、速度は減衰する一方であるとします。

それでは、定式化をしていきましょう。

定式化


横方向の速度はそれほど大きくないだろう、と予想するので空気抵抗は考えません。この条件のもと考えていきます。

バレルの直径\(d_s\)とBB弾の直径\(d_B\)の差があることによって、バレルに垂直な方向にBB弾が自由に進める距離\(l\)は

と書けます。\(n\)回目の衝突から\(n+1\)回目の衝突までにかかる時間\(t_n\)は、その間のBB弾の垂直方向の速度\(v_n\)に依存して、

と書けます。よって、\(N\)回衝突するのにかかる時間\(t\)はそれぞれの衝突までに掛かる時間を足し合わせればよいので、

です。バレルの内壁との衝突が起こることによってBB弾の速度の変化するとします。するとBB弾とバレルとの反発係数\(r\)を用いれば、

と表現されます。初速度を\(v_0\)と書いてこれを代入すれば、

と書くことが出来ます。ただし、\(r\ne 1\)です。\(r=1\)の場合は\(\displaystyle
t=\frac{l}{v_0}(N+1)
\)

です。\(r\ne 1\)の場合に\(N\)について変形すれば、

と書くことが出来ます。
初速\(v_0\)、反発係数\(r\), 銃口に到達するまでに掛かる時間\(t\)が分かれば、銃口から出た時のバレルに垂直な方向の速度\(v_\perp\)は式(5b)より、

と書けます。具体的に妥当な値を入れて射出時の、進行方向に垂直な方向の速度を計算してみましょう。

具体的な衝突回数の見積もり


60cmのバレル長を持ち、0.20gで0.9J程度の球が射出される場合、セットされた位置から射出までにかかる時間は約\(t=0.015\mathrm{[s]}\)と分かっていますのでこれを利用します(バレル内部の計算より)。
バレルBB弾の直径差は

とします。\(r\)はどうにかして求めることにして、\(v_0\)はとりあえず変数としましょう。

反発係数の見積もり


\(r\)を見積もります。
反発係数の見積もりは、実験して大雑把な値を見積もります。
\(r\)を見積もるために、家にある固い材質のものとBB弾とを衝突させて、高さを計測しました。以下の実測結果を得ました。

  • BB弾-フローリング 30cmから落として15cm上がる
  • BB弾-アクリル板 30cmから落として10cm上がる
  • BB弾-アルミ 10cmから落として6cmまで上がる

高さ\(h_0\)から静かに落として、反発した後に極大値をとるときの高さ\(h_1\)が分かっているとき、反発係数\(r\)は

と求められることが分かっているので、反発係数は

  • BB弾-フローリング  \(r\approx 0.71\)
  • BB弾-アクリル板  \(r\approx 0.57\)
  • BB弾-アルミ  \(r\approx 0.77\)

となります。バレル内部はどちらかといえば金属に近いと思いますので、\(r\approx 0.75\)と仮定して計算を進めていきます。

横軸に進行方向に垂直な方向の初速度…つまり、ホップを掛けるためのゴムなどで、進行方向ではない方向の速度のことを意味します…、縦軸に射出時の垂直な方向の速度をプロットしました。横方向の速度が仮に50m/sになっていても、10m/sになっていようともあまり変わらないことが分かります。なので、10m/sと仮定しましょう。
ばらつきの上限を与えるにはよい指標です(※1)。

仮に\(r=0.75, v_0=10\mathrm{[m/s]}\)とすると、\(N\approx 20.6\)と計算されます。つまり、20.6回バレルに衝突してから飛び出していくわけです。実際には衝突回数は整数しかありえないので、小数点以下を切り捨てて20回衝突が起こって飛び出していきます。
ただし計算を行う上では衝突回数を切り捨てると不連続性が発生しますので、小数点の衝突回数を認めることにします。

この場合、銃口から飛び出す際の、進行方向に垂直な方向の速度\(v_\perp\)は

を得ます。この垂直方向の速度は上下左右に振れる可能性がありますが、最も触れる場合は横方向でしょう。

30, 50m先の広がり具合を考えます。
着弾までの時間\(t_{30m}, t_{50m}\)はそれぞれ\(0.5, 2 [s]\)分かっているので(弾道計算(BB弾)の結果)、着弾時の直径\(d_{30m}, d_{50m}\)は

と求められます。ここで垂直方向の速度が非常に遅いので、空気抵抗は無視して考えています。BB弾の重さは関係ありません。軽いものほど空気抵抗を受けて減衰するので、ぶれは小さくなります。

空気抵抗を考慮すると、これよりは小さくなるということです。

実測定との比較


さて、30mチャレンジというものがあります30mチャレンジ公式ランキング 2016年度
この記録によると、30m先で直径15cm程度の範囲に収まるようです。
すなわち、バレル-BB弾の直径差による集弾性の悪化よりも大きな影響を及ぼす要因がある、ということです。

恐らくは回転量が一定ではないとか、BB弾の重さにばらつきがあったり、銃身の振動があったりという要因のほうが大きいということでしょう。

逆に言えば、スタンダードな大きさのバレルとBB弾を用いる限り、30m先で3cm以内に収めることは不可能、ということです。

注釈

※1
\(v_0\to \infty\)で射出時の速度\(v_\perp\)は発散しますが対数の発散です。非常にゆっくり発散するため、\(v_0=10\)であろうが\(v_0=50\)であろうがほとんど変化しません。どこかでカットオフ(これ以上はとらない上限)となるような値を取れればよいかもしれません。
豆知識ですが、対数の発散をほとんど無視する目的としてカットオフを設けるやり方は、量子力学の繰り込み論が有名ですね。だからと言って、エアガンの計算で量子力学が現れる!などは言わないでください。全く関係ありません

波動関数の規格化とは?

非相対論的シュレーディンガー方程式の解を規格化するお話

Q氏とR博士の会話1


Q「波動関数の規格化は、なぜ行われるのでしょうか?」

R「異なる量子数に属する状態間を、分かりやすく比較したいからだ。」

Q「なぜ規格化をすると比較ができるのでしょうか?」

R「例えば、有限区間内で定義される2つの状態があるとき、片方の状態の波動関数の値が1、もう片方が0.01という、どちらも単なる定数であることが分かったとしよう。」
R「その場合、規格化を行わないと、”値1を持つ状態のほうが多いから、もう片方は無視できる”、と直感的にしてしまうかもしれない。」
R「その点、規格化をすればどちらも同じ値にできるから、優劣がなく比較をすることが直感的にできて、都合がよい。」

Q「なるほど。わかりやすさ、ですか。」
Q「しかし規格化するといっても、何かを等しくして比較するって意味ですよね。何を等しくして比較するのですか?」

R「個数で規格化するのだ。」
R「1つの電子について解いているとき、波動関数が示す電子数を”1”であるようにするのだ。」

Q「個数で規格化するのですか。では、2個の電子を表す1つの波動関数があったらどうです?規格化は”1”ですか、”2”ですか?」

R「どちらも正解だ。1でもいいし、2でもいい。」
R「2個の電子が相関して離れない現象ならば、それは”1つのペア”を”1”にするのが良いだろう。だから、その意味ならば1が良い。」
R「しかし、電子”1つ”が重要ならば、電子1つの波動関数を”1”にするべきだろう。それが2つあるので合計数は2だ。」
R「定義が書いてあれば、それでよい。」

Q「見たい現象によって分けるのですか。規格化と言いながら、いかなる問題に対する規格は無いのですね。」

Q氏とR博士の会話2


Q「波動関数の規格化は個数で行われるんですよね。」

R「そうだ。」

Q「波動関数の”個数”は全存在確率密度を1にするようにすることで実現できます。」

R「そうだ。」

Q「つまり、波動関数の絶対値の二乗の、全空間に渡る積分が収束しなければならない。」

R「その通り。」

Q「ならば、自由粒子のような連続状態の規格化は不可能なのですか?」
Q「無限遠まで振動していますし、絶対値の2乗は定数です。」
Q「全位置空間に渡る積分は無限になり、規格化定数が零になります。」

R「可能だ。だが、君の疑問はもっともであり、計算自体は正しい。」
R「しかし、全存在確率密度による規格化には隠れた前提がある。」
R「それは”束縛状態であるならば、全存在確率密度で規格化すると都合がよい”ということだ。」
R「連続状態はその前提に入らない。なので全存在確率密度による規格化が計算不能でも、何も問題はない。」

Q「では連続状態の規格化とは、なんなのでしょう?」

R「計算が楽だとか、都合がよいものがあれば、何で規格化しても良い。」
R「束縛状態において、全存在確率密度はたまたま採用されたのだ。」
R「本来、規格化は数学的な手順であり、”分かりやすい表現”の定数倍という表現をしたいがために生まれた。」
R「何で規格化するのか?が変わったところで、定数倍の違いしかないから、物理は変わらない。」
R「自由粒子のような連続状態の規格化は、通常デルタ関数で行われる。」
R「しかし、例えば”指数関数の係数を1にするように決めた”と主張して、物理を作り上げても何も問題はない。」
R「この例は任意性があるので、褒められない規格化だがね。」

Q「規格化が連続状態と束縛状態で違ってもよい、ということですか。」
Q「しかし、それでは連続状態と束縛状態で規格化した関数が、その境界で不連続になってしまうかもしれませんが、問題ないのですか。」

R「問題ない。連続状態と束縛状態を別々に規格化すると約束するならば、不連続でも問題ない。」
R「一方で、束縛状態でも連続状態でも統一的な規格化の方法を採用すれば、不連続性は起こらず、すっきりする。」
R「そのような規格化方法として、例えば波動関数を単なる2乗で規格化する方法がある。」
R「この場合は波動関数を複素平面に解析接続しなければならなくなるが。」

負×負=正はなぜ?

負は、正の世界と負の世界を入れ替える因子である。

Q氏とR博士の会話1


Q「なぜ負に負を掛けると正になるのですか?」

R「まず、正の世界に正の数を掛けたら正になる。」

Q「納得します。」

R「では、正の世界に負の数を掛けたらどうなるかな?」

Q「負でしょう。」

R「そうだ。正の世界から見たら、負の数を掛けることで世界が反転するのだ。」
R「では負の世界から、世界を反転させる負の数を掛けたらどうなるかな?」

Q「負の反転は正ですから、正です。」

R「その通り。なので負に負を掛けると正なのだ。」

Q氏とR博士の会話2


Q「正の数に、正を掛けたら正になるのですよね。」

R「そうだ。」

Q「負の数に、負を掛けたら正になるのですよね。」

R「そうだ。」

Q「自分の世界の数同士をかけたらどちらも正はおかしくないですか?」
Q「正×正=正に、負×負=負になるのが、道理でしょう?」

R「その通りだ。君の疑問は全く正しい。だが、人類の都合で決められてしまったのだ。」
R「正の数しか無かった頃、人類は”正×正=正”を基準にした。その後に”数”を負に拡張したのだ。」
R「負の数に広げても”正×正=正”を保ちつつ、”正×負=負”または”負×正=負”になるように拡張したいと考えた。」
R「そう制約したから、”負×負=正”となってしまったのだ。負は正の世界と負の世界を入れ替える因子である、と。」

Q「なるほど。もし仮に”負×負=負”を基準に選んでいたら、正の数が正の世界と負の世界を入れ替える因子となるわけですか。」
Q「”負×負=負”を基準とするならば、”正×負=正”または”負×正=正”であって、”正×正=負”になるように。こういった世界を作ることも可能だったんですね。」

R「その通りだ。どちらの考え方も正しく、優劣はないよ。」

Q「ならば、無理やり”正×正=正”と”負×負=負”を満たすように強引に数学を組み立てたら、”正×負”はどうなるのでしょう?」

R「未定だ。定義できない。正×負の単位を数えるための、新たな数の拡張が必要になるだろうね。」

秋間補間

秋間補間と呼ばれる補間方法があります。

こんな補間結果となります(akimaとmodified akimaの線が秋間補間の結果です)。

秋間補間の特徴は、

  • 与えられた点を必ず通る
  • オーバーシュートが発生しにくい
  • 補間したい点から遠い補間点の影響を受けない
  • 導関数の連続性は保証されない
  • 元のデータ点を大きく逸脱するような補間は苦手(線形的な補間に近い)
  • 極値におけるデータ点など、元の関数の特徴的な値が分かっているときに良い補間結果を与える

ということです。オーバーシュートとは、元のデータが急峻に変化した場合、その前後の補間結果が振動してしまい大きく外れてしまうことを意味します([5]にオーバーシュートの様子を見ることができます)。
ただし、3次スプライン補間のような微分の連続性が保証されません。

それでは計算方法を追っていきます。

導出


秋間補間は1970年に秋間浩によって提案された補間方法です[1]。地図の等高線を表示するために生成されたようです。その後修正された秋間補間が紹介されました[2]。

具体的な計算方法を見ていきます。
補間は補間したい点を中心に前後のデータ点を用いるので、両端では特別な扱いが必要です。それを区別するために領域を3つに分けて考えます。具体的には下の図のような感じです。

領域IIにおける補間


まずは領域IIを考えます。簡単に考えるために、以下の図のように補間に用いるための6点\((x_i, y_i), i=0,5\)があった時、中間の領域である\(x_2\le x\le x_3\)の中の値を補間して求めたいと考えます。

補間は3次関数で行います。すなわち\(x_2\le x\le x_3\)において

の形で補間を行います。係数\(a_0, a_1, a_2, a_3\)は補間に用いる6点のデータ点から計算できて、

の通り求められます。ここで、\(q_1, q_2, m_1,\cdots, m_5\)は


の通り求められます。\(w_1, w_2\)は使用する秋間補間の種類によって変わります。通常の秋間補間では、

の通り計算し[1,3,4]、修正秋間補間においては

で計算します[2,3,4]。

領域I, IIIにおける補間


領域I, IIIについては以下の関係を満たすように、本来は存在しない補間用のデータ点を予測します。
領域I:最も左端のデータ点を\(x_3\)、その右隣のデータ点を\(x_4, x_5\)と置きます。すると、\(x_3\)より左のデータ点\(x_2, x_1\)を関係式(7)より予測します。
領域III:最も右端のデータ点を\(x_3\)、その左隣のデータ点を\(x_2, x_1\)と置きます。すると、\(x_3\)より右のデータ点\(x_4, x_5\)を関係式(7)より予測します。

ここで、\(m_{ij}\)は

を意味します。すると、秋間補間で用いる(本来は存在しない)端のデータ点は、

領域I)

領域III)

と求められます。

プログラム例


上の式をプログラムすれば、このようになるかと思います。
注意してプログラムを作らないとゼロ割が発生します。\(x_i\ne x_j\)を仮定していれば、式(5),(6)の\(w_1, w_2\)を計算する際にこれが発生します。なので、この回避を取り入れてプログラムを作成しています。

計算例


参考文献[4]に秋間補間と修正秋間補間の振る舞いの例があります。それを本稿のプログラムを用いて計算すると同じ振る舞いを示すことが分かります。

それでは、3次スプライン補間と秋間補間、修正された秋間補間を比べて、秋間補間にどのような特徴があるかみましょう。

オーバーシュートの抑圧


本当の答えを定義することは難しいですが、変化する点(\(x=2.8\sim 3.2\))近傍で直線とすれば傾きは5になります。一階導関数はどの補間方法も連続(右から極限と左から極限が一致の意味で)ですが、秋間補間は二階導関数は連続ではありません。3次スプラインは二階導関数まで連続であるという仮定の下での補間なので、一応連続的な変化をしています。

秋間補間では3次スプライン補間よりはオーバーシュートが抑えられているものの、近傍 \((x=2.5, 3.5)\)において外れた値となっています。
修正された秋間補間では、その点が改善されオーバーシュートが発生していないことが分かります。

振動関数の補間

振動関数を補間する例として、元の関数が\(y=\sin(x)\)だったとします。

sin関数

この場合は元の関数が十分滑らかであり、高階微分も連続であることが分かっています。与えられたデータ点も誤差がないので、3次スプラインが有効でしょう。
秋間補間では本来極値をとるはずの\(x=n\pi/2,~(nは整数)\)あたりで値があまり大きくならないことから、かなり局所的な補間である特徴が分かります。すなわち、大きくオーバーシュートしない反面、予測は得意ではないということです。これを回避するためには、元の関数の極値の値など特徴的なデータが必要であることが分かります。

二次元平面の補間は本稿には載せていませんが、[4,6]にどのような違いが表れるか図があるので、興味がある方は参照してみてください。
確かに、本来の目的である地図の等高線作成には大きな効果が期待できそうなことが分かります。おそらく、取得するデータ点も標高など、地形の特徴的な点におけるデータを集めることが主となるので、秋間補間との相性が良いのでしょう。

参考文献


[1]Akima H. A New Method of Interpolation and Smooth Curve Fitting Based on Local
Procedures. Journal of the ACM, 17(4), 589 ― 602. (1970).
doi:10.1145/321607.321609

[2]Akima H. A method of univariate interpolation that has the accuracy of a third-degree
polynomial. ACM Transactions on Mathematical Software, 17(3), 341 ― 366. (1991),
doi:10.1145/114697.116810

[3]
makima 修正Akima区分的3次エルミート内挿 -MathWorks
interp1 1次データ内挿(テーブルルックアップ) -MathWorks

[4]Cleve Moler, Makima Piecewise Cubic Interpolation

[5]スプラインによる補間

[6]格子点に内挿して等値線をひく

emacsのメニューバー、ツールバーを消去する

emacsの操作に慣れてくると、emacs画面の上部にあるパネルやツールバーを使わなくなります。
大事な画面のリソースが減ってしまうので、これを消すことを考えます。

emacsの設定ファイル(~/.emacs)にメニューバーとツールバーの消去する設定

(menu-bar-mode -1)
(tool-bar-mode 0)

を記述することで消せます。書いてemacsを再度開くと、以下の通りとなります。

環境:Linux-mint 20
Emacs: GNU Emacs 26.3 (build 2, x86_64-pc-linux-gnu, GTK+ Version 3.24.14) of 2020-03-26, modified by Debian

メニューバーとツールバー有り

メニューバーとツールバー無し

参考

メニューバーの削除
Remove the Emacs menu bar

ツールバーの削除
in GNU Emacs OSX, how to hide title bar? stack overflow