科学と家事とプログラミング (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…

超構造化(10) 構造化の先へ

パラダイム・シフト 構造化は空間化を連想させる。時間/空間という文脈で切り分けるなら、手順は時間的であり、宣言は空間的である。比喩的な表現を許してもらえば、宣言的なプログラムにおいては、(それを人が読み書きしているかぎりにおいては)時間が流れ…

超構造化(09) プログラムは手順の集まりか?

手続き vs 宣言 「プログラムは手順の集まりである」という表現は、賞味期限つきの標語の良い例だ。 初めてプログラムを書くときに、この助言が役立つ場面は確かにあると思う。 しかしその一方で、さまざまなプログラミング言語が目指すものは 「人間から見…

超構造化(08) 「制御の流れ」って何?

コントロールという単語の使われ方 時々、制御の流れという言葉を見たり使ったりするけれど、どうにもすわりが悪い。 control flow の直訳に違いないが、制御って流れるものなのか? 処理の流れの方がましかと思ったりもする。 あらためてコントロールという…

超構造化(07) 状態機械の実装モデル

状態機械の実装モデル コーディングの話からは大きく逸脱するが、ここで、最も原初的な(シンプルな)状態機械 の設計について述べておきたい。まず「状態」を以下の3つの操作/動作で定義(モデル 化)する。 enter() ある状態への入場時の初期化 leave() その…

超構造化(06) フローチャート/データフロー図/状態遷移図

動的側面を表す3つのチャート (FC / DFD / SMD) プログラムの動的側面を表現するチャートの代表として、 FC(フローチャート),DFD(データフロー図), SMD(状態機械図/状態遷移図) の三つを取り上げる。 いずれもノードとアークから構成された有向グラフとして…

超構造化(05) 条件分岐 vs 場合分け(まとめ)

場合分けとしての if/else 同型を保った if/else がコードにもたらす(かもしれない)特徴をあらためて整理する。 if/else を通過すると必ず x が更新される(if/else 内で書き換えられる) [完全性]。 値が確定したら変化しない [直交性/無時間] 直行性は、ある…

超構造化(04) 条件分岐 vs 場合分け

条件分岐と場合分け 条件分岐という言葉には、分かれ道にさしかかって、さてどちらに進もうか?と思案 するイメージがつきまとう。その場になるまで、分岐があることにさえ気づかないし、分 岐した後もどうなるか先が見えない。「やってみるまで分からない」…

超構造化(03) 処理の抽象化

処理の抽象化 if/else や for のブロック(入れ子)を指して、処理の抽象化という言葉が使われることがある。 荒っぽい理解としては、それらのブロックにより「部分/全体関係」が明確になるという理解で良いだろう。 部分/全体関係が構築されるだけで、どうし…

python 3.6 (32bit on Windows) に numpy / matplotlib をインストール

numpy の *.whl を入手 scipy 使うなら mkl 版の numpy が吉(ダウンロードにちょっと時間がかかった)。 *.whl を、https://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy から入手した。 (pypi の numpy は mkl ではない)。 インストール 念の為、管理者モード…

python 3.6 on windows 仮想環境~pypi 登録まで

仮想環境は venv 構築 python -m venv myenv 開始 Scripts\activate 終了 deactivate 標準 lib の venv で構築できるのでそれを使う。 (virtualenv は、python 2.x と 3.x を同居したいときに使う) 配布物の生成 構築 python setup.py sdist python setup.py…

床暖房で空気が乾燥する? 測定結果のご紹介

「暖房すると湿度が下がる」は本当か? 実際に測ってみたら...

加湿器の性能確認

加湿器(ダイニチ)を使ったときの湿度変化(実測)。 USB湿度計 one-wire USB9097 DS18B20 DS2438Z

超構造化(02) 構造化定理、構造化の恩恵、構造化チャート

構造化定理 三種の制御構造 入口も出口も一つだけ! 構造化の恩恵 構造化チャート NSチャートと PAD チャートの出番は減った? 構造化定理 全てのアルゴリズムは順次/選択/反復の組み合わせで表現できる。これを構造化定理と呼 ぶ。処理の流れを、if/else や f…

超構造化(01) プログラミング雑感

プログラムは「計算手順の集まり」という捉え方は間違いではないけれど、それ はCPU側から見た捉え方なのだと思う。人がプログラムを読み書きする場面で は、まったく別の捉え方が許される。手順的なプログラムは、少しの工夫で宣言的なプログラムに変換…

ローレンツ変換の形式は光速度一定とは無関係

概要 Lorentz変換は(その形式だけなら)、光速度一定やMaxwell方程式とは無関係に、次の4つの一般的な要請だけで決まる。 時空の一様性 空間の等方性 運動の相対性 変換が群をなす 大まかな議論の流れは以下の通り 時空の一様性から変換は一次変換に限定され…

網戸のすべりが悪い時はシリコンスプレーがお勧め

シリコンスプレーは効果抜群 網戸のすべりが悪くなっていたので、シリコンスプレーを使ったら、想像以上に良い結果が得られました。何気ないことですが、毎日使うものがサクサク動くのは気持ち良いものですね。もっと早く手当すればよかった。 油と違ってベ…

カルマンフィルタのデモ (LKF, EKF, UKF)

カルマンフィルタは、パラメータを適切に設定しないと、まともな結果が得られない。直感的な理解を目的として、プロセスノイズや初期共分散をGUIで変更できるデモを公開した。デモで遊べばパラメータの意味(効果)を理解しやすいと思う。 minidemoKalmanFi…

日本の人口予測 (少子化をざっくり把握するグラフの紹介)

65歳以上の人口は既にピークに達していると言っても良い(2018年現在)。 絶対的な数で見れば、これから 40~50年間あまり大きな変化はない。 それに対して、いわゆる労働人口(15才~64才)は2000年頃をピークとして今後 40~50年間で半減する。 下の図は、65才…