「麒麟がくる」の最終回を観た。本能寺の変までは凄く良かったが、COVID-19の影響があったのは致し方ないとしても、この終わり方はちょっと…
Webでは絶賛している人も多いようなので、「俺の感覚って変?」と思ってしまうのだが、そこは人それぞれということで。

勉強の記録、愚痴の書きなぐり
「本を読んだものの練習問題ができないという読者は何も学んでいないのだ」(J.J.Sakurai)
「数式を追う気力がなくなったら退役しろ」(鶴田匡夫)
「卑怯もへったくれもない、やられるお前が悪いのだ」(小学生の頃に読んだ漫画の敵役)
「麒麟がくる」の最終回を観た。本能寺の変までは凄く良かったが、COVID-19の影響があったのは致し方ないとしても、この終わり方はちょっと…
Webでは絶賛している人も多いようなので、「俺の感覚って変?」と思ってしまうのだが、そこは人それぞれということで。
仕事用のPythonスクリプトに手を加えたら、Read Onlyで開いたはずのファイルが書き込まれる事態が発生した。ギョッとして原因を探したら、メインの処理で使ったファイル名を示す変数がグローバル変数として扱われた結果のように思えた。
もしそうなのであれば、C言語のように、メイン処理をmain関数として定義すれば良いように思えたので、ググってみたら、自分の推測通りだった。
自分が読んだ記事を書いた人も同じような経験をしたことがあるそうだが、スクリプトを書き慣れている人は、そうする人が多数派らしい。痛い目に遭って初めて学んだことではあるが、自力でそういうところに辿り着いたので、良しとしておこう。
また、(そういう使い方はしないだろうけど)importされた際の誤動作対策のおまじないも知ることができた。これからはこのスタイルで行こう。
上記の問題を解決したら一気に進んで、当初の目的を達成できたので、気分が良い。
WOWOWが独占中継することを知った。どういう経緯でDAZNが放映権を手放したのかは知らないが、WOWOWで見ることができることが重要である。時間に余裕があるわけではないけど、これは嬉しい。
速度に比例する抵抗を受けながらの落下について、Pythonを使って、Euler法、odeint、Runge-Kutta法の3種類の計算をやってみた。グラフは比較用の解析解を加えた4つをプロットしているけど、一目で分かる違いなんてない。ちなみにグラフは上が変位、下が速度である。まぁ、終端速度がありますね、というくらいの話である。
しばらくプログラミングは何もしていなかったので、タイピングがどこかぎこちなくて、打ち間違いが滅茶苦茶多かったが、ようやくマシになってきた。

仕事で使うためにのPythonコードを書いていて、大きな勘違いをしていることに気がついた。csvファイルを読み込んで、各行ごとに文字列中の全角かなから半角英数に切り替わる箇所を検出しようとしていたが、対象となるファイルを確認したら、その場所にはタブが入っていたのである。これならタブをセパレータとしてsplitを使えば良いだけの話である。すげー間抜けだ…
なかなか恥ずかしい勘違い(見落としというべきか)だが、これが分かれば後にやる作業ははっきりしている。メインの業務ではないので、割ける時間は多くないが、早ければ今週中、遅くとも来週中には結果を出せるだろう。
随分前に購入した、「計算物理I」(夏目雄平・小川建吾、朝倉書店)を参考に、4次のRunge-Kutta公式の導出を行った。卒論で一度導出はしているはずだけど、もはや記憶にない(苦笑)
上記書籍をメインに計算を追い掛けて、1階の常微分方程式の簡単な問題について、解析解との比較までは上手く行ったが、理解の程度はまだまだなので、それ以上は繰り返し読み込むしかないだろう。Simpson公式と一致するところまでは、しっかり理解したいところである。
その後は、2階の微分方程式への適用である。「数値計算による量子力学」(桜井捷海、裳華房)を参考に、もう少し考える必要がある。ブランク空きすぎだ(苦笑)
偉い人が、自社の技術者のレベルが下がっていることを嘆いていた。一つは過去の経験に固執して新たな挑戦をしないこと、もう一つは、数学力がないことである。
数学力についての話を聞いていると、本質は、数学に限らず自分の頭で考えていないことのように感じられた。過去の経験に基づいて仕事をすることも、楽をしたいという気持ちの現れだと思う。
帰宅後、速度に比例する抵抗を受けながらの落下について、紙と鉛筆で計算をした。符号の向きで考え込んだりと、初歩的なところで躓いたりしたが、一通り計算して、matplotlibで解析解をプロットするところまではできた。明日以降は複数の方法で数値計算を行って、それぞれの方法を比較しようと思う。
Pythonでプログラミングをしていると、取り敢えず本に書いてあるコードをEmacsで打ち込んでも意味はなく、真面目に理論を追い掛けたり、odeintなどの使い方を理解しないと何も残らないのだと、改めて思う。こんなことは敢えて書くまでもないかも知れないが。
小さなことからコツコツと、である。
荷電粒子の計算は、一応一通りのことをやったのだが、本の内容から更に進んだことをやろうとしたら、荷電粒子間の距離が近すぎて、クーロン力が発散する状況が発生した。数値計算的には何らかの処理方法があるのだろうが、それがどんなものかは分からないし、それを調べるよりは他のことに時間を使いたいので、一先ず後回しにする。
先に進んで、odeinfを使って微分方程式を数値的に解いてみた。1階微分なら「まぁそうなんだろうな」で終わるけど、2階微分だと、最初は何が何だかという感じである。Webで散々調べて何となく分かってきたので、もう少しあれこれやるつもりである。別にodeinfに拘る必要はないんだけど、折角出会ったのだから、一通りのことはしてみたいと思うので。あと、Pythonのスライスも初めて知った。これは使っているうちに慣れるだろう。
こうしてみると、業務での文字列処理を念頭において「独習 Python」を購入したが、趣味の方は、以前購入した「科学技術計算のためのPython入門」の方が適切だったと、今更ながらに思う。ひょっとすると、「Pythonによる数値計算とシミュレーション」とGoogle先生だけで足りるかも知れない。
いずれにしても、Pythonで色々なことができるようになりたいものだ。
ここ数日、平面内の荷電粒子の運動を計算をするためにPythonでコードを書いていたのだが、明かに挙動がおかしい。参考にしている書籍と比較すると、一箇所符号が逆になっているようなのだが、その理由が分からなくて困っていた。
何か符号に関する勘違いをしているのだろうと思い、上記書籍に繰り返して目を通していたら、最初のところに「質点の持っている電荷は−1であるとします」って書いてある…電荷は+1だと勘違いしてた…俺あるあるだ。
その一方で、リストやタプルを使ったfor文の扱いは参考になった。最初は愚直にインデックスをつけたりしていたのだが、そうしなくてもできることなのね。自分で考えて書いたコードよりも格段にすっきりしている。
まぁ、こうした方が知識が身に付くと考えよう。
今日も「Pythonによる数値計算とシミュレーション」のコードを出発点に、計算をしてみた。所定の初期条件の下に、宇宙船が軟着陸のために逆噴射した後の振る舞いを計算するというものである。要は、運動方程式の加速度に、あるタイミングで重力加速度よりも大きく逆向きの加速度が加わった場合にどうなるかという計算である。
上記書籍では、逆噴射のタイミングを指定しているのだが、そのタイミングが丁度良いのだろうとは思うものの、そのタイミングを求める計算もしたいと思い、その辺りも計算できるコードを付け加えてみた。逆噴射のタイミングを変化させながら、座標の時間依存性(2次関数)を計算して、その最小値が負となるものの中で最大となるような逆噴射のタイミングが、軟着陸には最適で(最も衝撃が少ない)、上記書籍では予めそのタイミングを指定している、という予想である。それなりに手こずったが、予想通りの結果となって満足である。
次は荷電粒子の運動だが、その前に電磁気学の復習が必要だ。