2022-01-29

数学・物理 算数・数学系プログラミング系コンテンツを作ろう/相転移プロダクション

今回のテーマ

式を含むこともよくあるため, 記事本体はアーカイブサイトへのリンク先にまとめています.

メルマガのバックナンバーは次のページにまとめてあります. 興味があればどうぞ.

感想をください

「読んだよ」だけでもいいのでぜひ感想をください. メルマガを書く励みになります. 最近感想を頂く機会が増えてきたので素直に嬉しいです.

メルマガへの返信でも構いませんし, 次のアンケートフォームへの回答でも構いません.

ではまたメールします.

医学知識の高速インストール法

「医学知識を高速インストールしたければ看護師向けのテキストがよい」というのは司法修習で教えてほしい(本当にめちゃくちゃ役に立つ)

今度何かしら読んでみようと思います. 知識自体も気になりますが, それ以上にこれの数学版を何かしら作る上での参考になるかも気になる点です.

ヨーヨー振り回しからの話

質量0で一切伸び縮みせず張力のみをつたえる高校物理的な《糸》を近似ではなく厳密なものとして考えると日常で見かける糸とはまったく異なる振る舞いをみせる。 まず相対論だと光速で運動するmasslessの糸を想像することになる。非相対論で考えても空気分子ひとつにぶつかっただけで弾かれる。 質量のない糸の先端に重りを固定しようにも、糸の先端は光速以外の値をとれない。 そしてさらに「一切伸び縮みしない」という相対論的に"邪悪"な設定が《糸》に付与される。

一般化確率論

一般化確率論(General probabilistic theories) https://arxiv.org/pdf/2011.01286.pdf https://arxiv.org/abs/2103.07469

なんか量子論が部分集合に思える枠組みらしい

量子力学系の人が時々言及する一般化確率論, 何なのかとずっと思っていたのですが, 参考になりそうな文献がTwitterで回ってきたのでメモがてら共有します. 確率論は経路積分(汎関数積分)とも関わるため学生の頃からずっと気になっている対象です. マルチンゲールあたりまでは簡単なノートは作ってあるものの, せめてブラウン運動くらいまではやりたいですし, 確率解析と汎関数積分は本腰を入れてやりたい対象です.

対称多項式

プロ向けですがこういうのがあります: Macdonald, Symmetric Functions and Hall Polynomials あとはランダム行列本の付録にもちょっとした対称多項式の章があります.

何でいきなり対称多項式かというと, 密度行列のブロッホ表示に関連して, ブロッホ表示で表した行列の正値性が対称多項式を使って特徴づけられ, その中で行列式と対称多項式の話が出てきたからです. こんなところでこんな形で出会うことになるとは思いませんでした. 線型代数の射程距離の果てしなさを感じる事案なのでシェアしておきます.

こうなるとやはり木村さんのランダム行列の数理も計算を詳しく埋めるノートを作りつつ, もっと精読したくなってきます. 「この辺の具体例もきちんと調べないと」と思ってちょっと脇道に逸れたら逸れっぱなしでなかなか本筋に戻れません. 線型代数コンテンツ作りの調査も兼ねた量子情報系の基礎をさらうのが当面の目標で, とりあえずざっと目を通したところ, ちょっとやそっとで対応できそうな話でもありません. すぐに取り組むべきテーマというよりTODOとして突っ込んでおくテーマに分類しました.

これも低次で具体的にいじり倒すと楽しそうな対象で, 腰を据えて取り組む日を楽しみにしています.

SymPyと四元数計算, Geometry for Programmers

先日量子系の線型代数とも距離が近いといったリー群・リー環方面も少しずつ進めています. いま基本的な回転の話をいろいろやっていて, 特に二次正方行列に複素数と四元数が埋め込める部分をしつこく計算しています.

四元数の計算で計算ミスを連発したため, 何かないかと思ったらSymPyにも四元数があったのでそれを使いました. 二次の行列でさえ計算ミスしてはまりました. 完全に代数だけでかたがつく, 低次の行列の計算はやはりプログラムをうまく使いたいです. 文字込みの四元数の計算も計算ミスに悩まされにくくなりました.

とは言っても先日紹介した極分解では二重根号が出てきて, 必ずしも二重根号をきちんと処理してくれるわけではないこともわかっています. よい連携のさせ方も探っています. Geometry for Programmersはnumpyやscipyよりもsympyを使う本のようなので, いまの執筆分だけでも早く読みたいですね. まだ寄り道分のノート作りさえ終わっていないのでいつになることやら, といった状況ですが.

ちなみにSICMUtilsにも四元数が追加されたようです. SICMUtils本体の開発に参加できるほどClojureの読み書き・数学プログラミングができるわけではありません. しかしfdg-bookは手助けできることがありそうなので, プルリクも送っています. こちらはついでに幾何の計算もできるので非常に楽しみにしているプロジェクトです.

OpenFOAMなど微分方程式の計算結果

思い出したので念のため共有しておきます.

Python・Julia・Rustで書いたプログラムで作った動画を載せています. 数年前に書いたプログラムなので一部は既に動かなくなっているかもしれませんが, 各動画にGitHubへのプログラムのリンクも張っています. 興味がある方はぜひ眺めてみてください.

OpenFOAMもGitHubに設定ファイルを置いています. OpenFOAMはWSLを使えば一応Windowsでも動くらしいので興味がある方はどうぞ. 偏微分方程式の数値計算は本当に大変です. OpenFOAMにしてもメッシュを切るだけで大変ですし, それを長時間実行しなければいけないのも面倒です. 数値計算の面倒くささを実感できます. 数学・物理系プログラムに関して私が微分方程式ネタを避ける理由がわかってもらえるでしょう. 難しすぎてプログラミングやコンピューターサイエンス系統の問題になってしまうのです.

実用Common Lisp

びっくり。GrammarlyってCommon Lispで書かれてるんだ…!

Running Lisp in Production | Grammarly Engineering Blog

名前が微妙に違いますが, Common Lispのアルゴリズム本の著者でしょう. この人はウクライナ人のようなのでキリル文字のローマ字転写の問題のようで, 本だと著者名がVsevolod Domkinになっています.

まだほとんどわかっていない言語ですが, (Emacsでの)SLIMEとREPL開発が非常に気持ち良いです. このREPL利用開発の気持ち良さがわかったので, PythonなどでもIPythonを使うようにしました. JuliaもVSCodeでREPL使ってパチパチ小さく実行しながら組むのが楽しいです.

いまプログラムを書くというとほぼ競プロで, 実際にCommon Lispはまだ競プロでしか使っていないのですが, 何となく適切なライブラリセットを組んで使うべき言語のようで, 標準ライブラリだけでは競プロでいろいろ面倒な気がします. この点Clojureはインターフェースも統一されていて, 最低限の関数も揃っているので便利です. ただClojureはJVMの関係からかAtCoderとの相性が悪い (現状, 競プロは基本AtCoderでしかやっていない: Project Eulerは割や早い方の問題で「数が少なければblute forceでいいが, 後で出てくる数を増やしたバージョンはblute forceで解くとものすごい時間がかかる」と出てきて, 基本的なアルゴリズムを知らないと解けないと思っていったん放置状態)ため, AtCoderでのClojure利用は諦めています. SICMUtilsのためにもできればClojureを使いたいのですが仕方ありません.

プログラミングコンテンツを作ろう

去年暮れあたりから心を入れかえて取り組みを再開したデータ構造とアルゴリズムや競プロ系, ようやくAtCoder ProblemsはEasyで67問目まで行きました. 今日は数学をやる気が出なかったのでずっとこれをやっていました. いまだにはまると一題解くのに二時間かかることがあります. げんなりしますがいまの私の実力なので仕方ありません.

それはそれとして. 上で書いた微分積分・線型代数系は一応コンテンツを二つ作っています.

これ以外のテーマとして, 自分用のまとめも兼ねて, 素因数分解あたりの算数・数学・計算系のコンテンツを整備しようと思っています. 「プログラミングはできるが数学はちょっと」系ではなく, 「数学はそれなりにできるまたは数学科だがプログラミング入門したい」系の人向けを考えています. 上の微分方程式やお絵描き系もこれはこれで大事で役に立つと思っていますが, ライブラリを使うのがメインだったりして必ずしもよろしくない面があります. ライブラリのバージョンアップに関するメンテの問題さえあります. 言語選択もかなり強く効きます. 内容のミスはともかく, プログラミング言語・ライブラリ事情によるメンテナンスに時間を割きたくありません. 余計なライブラリはなく, 基本的なループなど言語としてもそうそう変更されない要素だけで処理でき, 数学的にそこまで難しいわけでもないが, プログラムをバグなく組もうとすると割と大変, みたいなところでいい感じの塩梅にあるのが素因数分解などのテーマだと思っています.

あと大事なのは小さな例での計算です. プログラムを組む上でも重要ですし, 年末から年始にかけてプロモーションした例と計算でも強調したテーマです. これを習慣づけてもらうためにも一つよいテーマではないかと思っています.

引き続き, コンテンツを作るなら言語はPythonですね. PythonはPythonで実際の仕事利用でのPythonはライブラリ関連で面倒くさいとよく言われてはいます. しかしGoogle Colaboratoryを使えばある程度問題は回避できますし, 何より言語導入ドキュメントを書きたくないですし, そのメンテナンスはなおさら嫌です. あとPythonは最近情報がたくさんあって続く独学が比較的やりやすいのも採用ポイントです. 私が競プロのコードを書くのに愛用しているF#などはさすがに勧められませんし, Haskellも好きですが素人にそう気楽に勧められる言語でもありません. ClojureやCommon Lispも気が引けます.

これも一応書いておきましょう. 一般的な競プロ系に関しては何冊か本が出ていますし, 最近は割と精力的にがんばって広めようとしている人達も出てきています. オンラインの無料のリソースとしてAtCoderのC++コンテンツとアルゴ式を勧めておきます.

アルゴ式は見切れていませんが, AtCoderのC++入門は一度一通りやりました. AtCoderAOJで遊ぶだけなら入門として十分でよいコンテンツです. そしてAOJはAOJでこのページなど, データ構造や基本的なアルゴリズムを組むお勉強用課題・コンテンツがあります. AOJもサンプルコードでC++, Java, Python, Haskellなどがあり, AOJはAOJでとても勉強になります. AOJの問題を使った競プロ本としてプログラミングコンテスト攻略のためのアルゴリズムとデータ構造もあります. 途中までしか読み込みきれておらず, アルゴリズム初心者には難しい問題も入っていますが丁寧ないい本ではあります.

AtCoderだけでも1000題以上あり, 多少なりとも算数・数学と絡めて, プログラムを組んでたくさん計算・勉強したい人には一つお勧めの分野です. データ構造とアルゴリズム自体は計算機科学の大事なテーマでもあって勉強して損をすることは全くなく, 合わなければすぐやめればよいので, 数学系プログラミングで何をしたらいいかわからない人にも具体的な問題がたくさんあるという点からもお勧めです.

ついでに言えば, AtCoderやAOJは他の人が提出したプログラムも読めるので, プログラムの読解練習としてさえお勧めできます. 直接比較となるといろいろな論点はあるものの, 数学の証明が読めない問題と他人が書いたプログラムが読めない問題にはそれなりの共通点があり, もう少し一般には伝わる文章を書く難しさとも関係があります. コンピューターだけではなく人間も読むプログラムを書くことから, 読みやすい文章(プログラム)をどう書くかという視点があり, これを鍛える教育的視点からも競プロに注目しています. 短いが(人間には)わかりにくいプログラムもあれば, 多少冗長だが(人間に)わかりやすいプログラムもあります. 全く同じことをやっているのにちょっとした書き方の塩梅で読みやすさが大きく変わることもあります. こうした点からもプログラム・文章をたくさん読み書きしてほしいとも思います.

今週の問題

今週面白かったのは次の問題です.

参考画像

中心を三次元空間の原点に置いた正六面体(立方体)の中に正四面体を置き, 正四面体を自身にうつす回転がなす群を考える. 特に図の1/3回転は次の16個の四元数 \begin{align} \pm \frac{1}{2} \pm \frac{\boldsymbol{i}}{2} \pm \frac{\boldsymbol{j}}{2} \pm \frac{\boldsymbol{k}}{2} \end{align} で表せる.

三次元空間の回転を四元数で表す方法を知らないと手も足も出ない問題です. CGなどのプログラミングでは回転を四元数で表すのが標準らしいので, この辺もやらないとと思ってがんばって計算しています. 四元数による回転以前に四元数自体に慣れていないため, はじめどう手をつけたらいいかわからなかった問題です.

ついでにいうと, 正多面体まわりは置換群とその表現など群の表現論の入門でもよく出てくる話題で, これまた非常に有名です. いまちょっと手元で見つからなくて記憶でしかありませんが, 有名な平井武『線形代数と群の表現』にも載っていたはずです. 有限群関係でもおそらく基本的な対象でしょう. 上記の平井本は具体例も込めて非常に面白い本でお勧めです. 確か「$\ell^2$-ノルムからしか内積が入らない」といった関数解析方面でも大事な話が書いてあったり, 最後の方に無限次元ユニタリ表現に対するディラック・ウィグナーの貢献, ヴェイユの述懐などの話もあり, こうしたちょっとした横道の話題も楽しいです.

上記の議論は例と計算編の2022-01-29コンパイル分では, 「2.8.11.20 四元数による回転と正四面体の回転2」にあります. 私自身のためにもせっせと計算しているので, 購入された方はぜひ参考にしてください.

例と計算編は次のリンク先から購入できるので, 興味がある方はどうぞ.

語学 アインシュタインの原論文のスペイン語第2-4文/相転移プロダクション

今回の内容

数物系のメルマガが式を含むことも多いため, 記事本体はアーカイブサイトへのリンク先にまとめています.

メルマガのバックナンバーは次のページにまとめてあります. 興味があればどうぞ.

感想をください

「読んだよ」だけでもいいのでぜひ感想をください. メルマガを書く励みになります.

メルマガへの返信でも構いませんし, 次のアンケートフォームへの回答でも構いません.

ではまたメールします.

学習メモ

スペイン語はDeepLに突っ込んで英訳すると対応が一気に見やすくなって構文を解析しやすくなるのがわかりました. これはアラビア語だと使えず, Google翻訳に叩き込んでみてどうなるかが気になります. アラビア語の原論文の訳はいまだに見つかりません.

興味があって読み続けられそうでいろいろな情報が取りやすいとなると, もうクルアーンがいいかと思っています. クルアーンとなると今度は逆に凄まじい量のコンテンツが出てきます. スマホアプリもあるくらいです. 2ヶ月くらい固め打ちしたら何となく読めるようになると思いますし, いったんそのレベルで十分なのでそこまではがんばります.

前も何かしらで書いたのですが, やはり理工系情報を取る上で中国語が大事だろうとも思っていて, これもこれでもっとやりたいと思っています. 語学はゆるく, その代わりに執念深くやっていく予定です.

スペイン語第2-4文の学習ログ

他の言語に関してはアインシュタインの特殊相対性理論の原論文を英語・多言語で読む会のページにいろいろな情報があります.

スペイン語第2文

文構造

単純な文ではあるものの他の言語と比較すると俄然面白くなります. まずpor ejemploは英語for exampleと全く同じ副詞的挿入句で, 特にコメントはありません. 主文の動詞は単純にpensemosで, これはpensarの一人称複数現在形なので主語が省略されています. 英語が命令形, ドイツ語はMan denkeでManが主語, フランス語はAnalysonsで一人称複数の直説法現在または命令形, イタリア語はSi pensi(TODO 何か調べる)でバリエーション豊かで, 英語では恐らくコロケーションでtakeを使っていますし, フランス語も直接的にthinkにあたる単語を使ってはいません. 訳者の癖や趣味もあるとは言え, ここだけでも言語ごとの違いが見え隠れしています.

単語

スペイン語第3文

文構造

el fenómenoで三人称単数の男性名詞でdependeと性数が合うため, まずこれが主語-動詞と見ていいでしょう. ドイツ語のDas beobachtbare Phänomen hängt abとも合います. ドイツ語nurとsolamenteが対応し, ab以下Magnetまではdel movimiento relativo entre el conductor y el imánです. ドイツ語hierはEn este casoに対応すると思えば, ドイツ語の主文との対応が見えます. 残りはwährend (whereas, mientras que)以下です.

次にde acuerdo a la interpretación común se deben distinguir claramente dos casos muy diferentesを考えます. まずどこで切れるかが問題です. deは前置詞なので次に名詞が来るはずで, ここではacuerdoです. さらに前置詞のaがあって定冠詞つきの名詞interpretaciónが来ます. スペイン語は形容詞が後ろからつくためcomúnは形容詞として interpretaciónを後ろから修飾していると見ればいいでしょう. 次はse deben distinguirの固まりで見る方が適切なはずで, ここで切れ目を与えます. ここまではaccording to the common interpretationと訳せます.

後半の動詞を持つ部分を考えましょう. これを詳しく追いかけます. claramenteは副詞なので無視して考えます. seが入っていてdeberの三人称複数系debenが来ているため, se受身文またはse不定人称文の可能性があります. ここではse受身文で判定しましょう. 残りはdos casosに副詞・形容詞のmuy diferentesがついたと見ればよく, 全体としてtwo very different cases should be clearly distinguishedと訳せます.

最後のdependiendoはdependerの現在分詞であり, dependiendo deでdepending on, cuál de los dos cuerpos se muevaで which of the two bodies is movingです. ここでmuevaは接続法現在なので, ドイツ語での接続法bewegte seiと対応します.

単語

詳しくは単語集を参考にしてください.

スペイン語第4文

文構造

二文に分かれているのでそれぞれ調べましょう.

冒頭のSiはラテン語由来のifでフランス語と同じです. 間にカンマがあるため, 素直にここでsiが導く副文が切れると思えばいいでしょう.

Siの文は間にmientras queがあってさらに副文が挟まっています. Mientras queは接続詞(while)で, このあとに完全な文が入るはずです. 動詞は再帰動詞se encuentraでto be located, en reposoは前置詞が導く副詞句でat restの意味です. 動詞encuentraは三人称単数現在形だから主語も三人称単数で, 残りの要素から見てもel conductorです. となるとsiは動詞se mueveで主語がel imánと思えばいいでしょう. (TODO これ主語の倒置と思ってよい?)

次のように英訳すると対応・構造が見やすいはずです.

後半の主文も(今の私が)わかるところから見ましょう. まず動詞はapareceで, aparecerの三人称単数現在です. 主語も三人称単数で, 浮いている名詞はun campo eléctricoだけです. 先頭は前置詞句al rededor del imánで, これはaparecerを修飾する副詞句と見ればよいでしょう. 残りはcon以下です. 前置詞conは名詞としてvalorを従えていて, さらに前置詞paraが名詞energiaを従えています.

次のように英訳すると対応・構造が見やすいはずです.

次のスペイン語文も比較的素直に読めます.

途中のdondeの後ろはse encuentreが再帰代名詞で主語がないため, これは関係代名詞dondeと思えばいいでしょう. もちろんその前に主文があり, generaは三人称単数現在なので三人称単数の名詞を探せば, 主語は素直に冒頭のEste campo eléctricoです. このeléctricoはフランス語と同じく形容詞が後置です. 目的語はuna corrienteでそこに前置詞句en el lugarによる修飾がかかっています.

まとめて次のように英訳すると状況がよくわかるでしょう.

単語