科学と家事とプログラミング (python を中心に)

python 温度計測 湿度計測 DS18B20 USB9097

天文宇宙プログラミング覚書

図形を使った解法は、見ためも安心なのです(改)

コンピューターグラフィックスのアイデアが、ピタッとと当てはまる問題というのがあります。 教科書に出てきそうな Bang-Bang 制御の切り替え線の判定も、そんな問題の一つです。 図形の論理演算(and/or)を使って、制御の ON/OFF を判定する例を紹介します。…

多変数最適化の Nelder-Mead は、なかなか使い勝手が良いのです

多変数最適化のアルゴリズムの一種である Nelder-Mead は、なかなか使い勝手の良いアルゴリズムですね。 汎用的に使える(対象が最小二乗に限定されない)ことに加えて、 微分情報を使わないところも魅力です。 評価関数の性格が多少悪くても、上手に最適をみ…

剛体回転に関するオイラーの定理は、絵的に理解したいのです

「剛体回転におけるオイラーの定理」について、 天球図を使った直感的な説明を紹介します。 代数的な説明だけだと、なんとなく分かった気がしない...という人におすすめです。 オイラーの定理 オイラーの名の付く定理や公式は、いくつもあって紛らわしいので…

補間と言えば akima-spline は知らなきゃもぐりだろう、と言ってみたいのです

スプライン補間でもっともメジャーなのは cubic-spline でしょうか。 ある種の理解しやすさや微分も一緒に求まるという使い良さもあるのですが、 データにギャップがある場合に、補間結果が振動するという やっかいな特性を持っています。 下の図の赤線は、…

高級な補間公式が、万能とは限らないのです。

補間公式には、ラグランジュ、エルミート、スプライン...と、各種ありますが、 私がよく使うのは、線形補間(直線補間)とAkima-Spline の 2 種類くらいです(JPL の惑星歴のチェビシェフは除く)。 線形補間(直線補間)とは、随分と原始的なものを使うのですね..…

緯度経度で分割された星カタログの選択は、なかなかやっかいなのです

カメラ視野を模擬したい カメラの視野を模擬するとき、 手元の星カタログを全部スキャンすると星の数が多すぎて性能が出ない時があります。 こういう時は、星カタログをいくつかの部分に分けて対応します。 分けたものをサブカタログと呼んだりします。 経度…

tanθに従う現象をべき級数で近似するのは、なんだか残念なのです

tan のべき級数展開には気をつけよう べき級数で近似するのは手軽な方法ですが、対象とする現象が tan に従う場合には、 次数を上げたところで精度の向上は期待できません。 かりに次数を上げることで必要精度を達成できた場合でも、 それは単に tan を再現…

座標変換ルーチンの爆発的な増殖は、なんとしても避けたいのです

問題設定 天文宇宙に関連したアプリケーションでは、多くの座標系が登場します。 黄道座標系、地球赤道座標系、地球固定座標系、月固定座標系、などなど。 さらに、赤道座標系や黄道座標系には、分点の違いによって、 基準エポック、平均分点(MOD)、真分点(T…

角度を扱うプログラムは、要注意なのです

天文計算や宇宙機の姿勢軌道制御では、角度の計算が欠かせませんが、 角度を扱う時は、色々と気が抜けません。 代表的には以下の3点。 単位 極性 定義域 (周回の不確定性の扱いを含む) 単位 初等教育や日常生活では、deg を使う場面が多いけれど、プログラミ…

桁落ち誤差は、時に牙をむくのです

数値計算には誤差がつきものですが、扱いをあやまると酷い目に会うことになります。 特に桁落ち誤差には注意が必要です。 天文計算の分野で有名な例は、universal kepler 方程式を解く時に出てくる stumpff 関数の計算式でしょうか。例えば、こんな感じ。 見…

ケプラー方程式をニュートン法で解くときの開始点の選び方は、悩みが尽きないのです

ケプラー方程式 を解くとき、よくニュートン法が使われます。 離心率が大きい長楕円軌道の場合、開始点の選択を誤ると繰り返し計算がバタついて、 収束しないことがあります。 ケプラー方程式は、下に凸な関数なので、 大きい側から近づくと動作が安定します…

時刻を秒の少数まで表示するのは、ちょっと難しいんです

時刻表示の落とし穴 天文や宇宙関連のプログラムを作っていると、時刻表示で落とし穴にはまることがありますね。 例えば、秒の少数1桁まで表示したいのだけど、四捨五入されて秒が 60.0 になってしまったり... >>> "%02d:%02d:%04.1f" % (23, 59, 59.95) '2…