0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PyMieScatt > LowFrequencyMieQ() > Equation of Qext | 新人応援 > 1次情報と実装の乖離

Last updated at Posted at 2018-03-20
動作環境
GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 16.04 LTS desktop amd64
TensorFlow v1.2.1
cuDNN v5.1 for Linux
CUDA v8.0
Python 3.5.2
IPython 6.0.0 -- An enhanced Interactive Python.
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
scipy v0.19.1
geopandas v0.3.0
MATLAB R2017b (Home Edition)
ADDA v.1.3b6
gnustep-gui-runtime v0.24.0-3.1

関連

Reference

Equation of Qext

http://pymiescatt.readthedocs.io/en/latest/forward.html#LowFrequencyMieQ
https://github.com/bsumlin/PyMieScatt/blob/master/PyMieScatt/Mie.py#L175

LowFrequencyMieQ()のQextの実装を式に起こすと以下となる。

Q_{ext} = \frac{2}{x^2} \sum{(2n+1)\{Re(a_n) + Re(b_n)}\}

ここでRe()は複素数の実部を取ることを表す。

この式はどこから来たのか?

Bohrehn and Huffman (1983)
4.4 CROSS SECTIONS AND MATRIX ELEMENTS
p112

C_{ext} = \frac{4\pi}{k^2}Re\{S(0^o)\} ... (4.76)

この式から変形しているようだ。

Qextの導出

以下で導出できた。

size parameter Xは以下として定義される (Bohren and Huffman(1983) p100 (Eq. 4.51の下の式)。式1とする。

x = ka = \frac{2\pi Na}{\lambda} ... (1)

N_1 and N are the refractive indices of particle and medium

QextはExtinction efficienciesであるが、Cross section Cextとの関係は以下となる。式2とする。

C_{ext} = \pi a^2 Q_{ext} ... (2)

式変形して

Q_{ext} = \frac{1}{\pi a^2}C_{ext} --- (2')

C_{ext}は以下として定義される (Bohren and Huffman(1983) p112.

C_{ext} = \frac{4\pi}{k^2}Re\{S(0^o)\}...(4.76)

Eq.(4.76)とEq.(2')より

Q_{ext} = \frac{1}{\pi a^2}\frac{4\pi}{k^2}Re\{S(0^o)\} ... (3)

式変形して

Q_{ext} = \frac{4}{a^2k^2}Re\{S(0^o)\} ... (3')

Eq.(1)から$ak=x$なので

Q_{ext} = \frac{4}{x^2}Re\{S(0^o)\} ... (4)

$S(0^o)$はBohren and Huffman (1983)のp112のEq.(4.76)の上の式から

S_2(0^o) = S_1(0^o) = S(0^o) = \frac{1}{2}\sum_n(2n+1)(a_n + b_n)...(5)

Eq.(4)とEq.(5)より

Q_{ext} = \frac{2}{x^2}Re\{\sum_n(2n+1)(a_n + b_n)\} ... (6)

導出完了。

新人応援 > 1次情報と実装の乖離

上記のような式変形は頭のいい人の場合、「after some of algebra(ちょっと式変形して)」と言って実装してしまう。

PyMieScattのコードでは他の部分でも1次情報(Bohren and Huffman)から乖離した実装が見られる。
注意が必要だ。

1次情報から乖離した実装には、以下の問題がある。

  • 式変形を常にできるとは限らない
    • 例として、級数展開の特異摂動法をある時に理解できたとして、それをいつまでも使えるかわからない
    • 手法を理解し続けるためには復習を続けないといけない
    • @ プログラマが知るべき97のこと by Kevlin Henney
      • 超人の神話 by Ryan Brush
      • 超人はいないと思うようになれば、皆の行動は必ず良い方向に変わります。たとえば、共に仕事をしている人が自分よりはるかに賢いと分かっていても、「何も言わなくてもわかってくれる」とは考えなくなります。手間をかけてでも現状についての情報を十分に集め、その人に伝えるはずです。

  • 1次情報からの式変形に関する情報を別管理しないといけない
    • どこにその情報を管理するか?
      • git? or サーバー(on premise or cloud?)
      • ソースコメント?
      • 別ドキュメント? (e.g. pdf?, .txt, .doc?)
    • 実装とソースの二重管理が必要になり、管理の負担も増える
  • 実装の間違いに気づきにくい
    • 式変形後の実装のため、式をチェックする「目(人)」の数が激減する
    • 結果として、式に間違いがあったとしても気づきにくい

対処としてどうすればいいか?

1次情報に基づき実装し、途中の式1つ1つを丁寧に実装する。
個々の式を分離して分かりやすく実装することで、バグ発見、修正、機能追加などのメンテナンスをしやすくなる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?