日本語練習帳

つらみのラプソディを歌います

修論 #2

今日は修論と関係のない話題で恐縮です.

PRE論文『Nonequilibrium phase transition in an exactly solvable driven Ising model with friction』について

内容については,出版社及びarXivからどうぞ.

journals.aps.org

[0909.0533] Non-equilibrium phase transition in an exactly solvable driven Ising model with friction

研究始めたての頃に目を通した時は,boundary magnetizationの計算で何故平均場近似が正当化されるのかなどと言って,数式を追うことに耽溺して結局読めなかった.しかし,この前目を通したらあっさり読めてしまい,「なるほど〜」と声が出たので,簡単にまとめておく.

  • 速度$v$である滑り面に沿って相対運動する2体の等価なIsing模型を考える(格子の次元・形状は任意).
  • $v \to \infty$の場合には,滑り面における磁化$m$があるランダム変数$\mu$による期待値で書かれ,滑り面に沿う方向の並進対称性から平均場の描像が成立する.
  • この手続によると,自己無到着方程式を任意の格子で書き下すことが出来る.よって,モンテカルロ・シミュレーションに頼らなくても,(方程式を解く際の)数値誤差の範囲で非平衡相転移の相図を得ることが出来る.
  • 非平衡相転移は,$v \to \infty$における有限の$T_{c}>0$で特徴付けられる.例えば,1次元のIsingスピン鎖が2本動いている場合には,実は(ある変数$\mathrm{e}^{-K}$の2次方程式が出現する都合上)2次元Ising模型と同じ転移点で相転移を起こすことが分かる.
  • 一方,スピンフリップによるエネルギー散逸のダイナミクスも「フリップ確率が2体スピンの相関の積で書ける」という特殊な可解性を課すと厳密に分かる1.この可解なダイナミクスに用いられる確率は"multipricative rate"と呼ばれる(日本語的には「掛け算式レート」かな).

やはり,数値実験に寄り添う分野だと,ある程度モンテカルロ・シミュレーション以外のこともきちんと遂行できて初めて論文になるのかなという印象を受けた.まあ,物理だから当然なのかも知れない.

Fortranで汎用ライブラリに変数空間を汚染される話

試しに,こんなソースコードコンパイルしたいとしよう.

PROGRAM main
  USE ifport
  IMPLICIT NONE

  INTEGER(kind = 4) :: stat_acc

  stat_acc = access("test.dat", " ")
  CALL system("echo hogehoge")
END PROGRAM main

ざっくり言うと,実行元ディレクトリにtest.datという名前のファイルが有るかどうかを調べるために,access()という標準では組み込まれない組み込み関数を用いて,状態を変数stat_accに格納し,その直後にシステムコールを用いてhogehogeという文字列をunix terminalから出力させようというプログラムだ.動機なんてどうでもいい2.ただ,それぞれの目的のために,あれこれを読み,何も考えずに実装しただけだ.

dynamicsoar.hatenablog.com

slpr.sakura.ne.jp

これをIntel Fortran Compilerにぶち込むと,次のようなエラーを吐く.

$ ifort test.f90 -o test
test.f90(8): error #6552: The CALL statement is invoking a function subprogram as a subroutine.   [SYSTEM]
  CALL system("echo hogehoge")
-------^
compilation aborted for test.f90 (code 1)

最初,エラー・メッセージでググっても何のことやらさっぱ分からなかったが,少し考えて,ある可能性に行き着いた.

「ひょっとして,system()という名の関数がifportから呼ばれている…?」

system()は,システムコールをやる時はsubroutineである.当然である.しかし,IFPORTモジュールにはどうやらfunctionとしてcontainされているみたいで,まあ結論から言えば名前が被ってしまったみたいだ.

これがもしmodule変数ならば,moduleの開発者側がprivate属性なりなんなりで隠蔽することが出来るが,subroutine名やfunction名だと引用する側がonlyなどで防がないことにはどうしようもない.よく言われるのは,「module側から隠蔽するのは性悪説,main文から必要最小限のもの以外は参照しないのは性善説に基づく実装だ」という話だけど,ちょっと今回のはsystem()というfunction名はセコいかなと思ったりした.

というわけで,呼びたい手続き(ここではaccess())だけをonly文で引くように,次のように書き換える.

PROGRAM main
  USE ifport, only: access
  IMPLICIT NONE

  INTEGER(kind = 4) :: stat_acc

  stat_acc = access("test.dat", " ")
  CALL system("echo hogehoge")
END PROGRAM main

こうすることで,無事にコンパイルも通り,実行結果もまともになる.幸あれ.

$ ifort test.f90 -o test
$ ./test
hogehoge

  1. 通常のモンテカルロ・シミュレーション(例えばGlauber確率やMetropolis確率に従ってシングルフリップ時間発展する場合)では,あるスピンがフリップする確率は,常に格子次元$d$に応じた複数個の隣接スピン全ての配位で確定する.よって,多体相関の影響で有効的に時間発展が加速されていると考えることが出来る.その最たるものがクラスター・アルゴリズムだか何だかだ.逆に言えば,この論文で手で解けるように導入されたmultiprivative rateをモンテカルロ・シミュレーションに導入すると,ダイナミクスはGlauber確率やMetropolis確率のそれと比べると2倍程度遅くなるということが,彼ら自身によって指摘されている(論文ではacceptance rateの図で明確に示されている).

  2. 実際には,ちょっと複雑な処理を行う数値計算プログラムの実装のヤバいところを簡略化して記述したノンフィクションである.

修論 #1

一体何度目か分からない長期休載みたいな感じになって恐縮ですが,修論に取り掛かることを機に,また出来る限り更新を続けていこうと思います.

最近,コーディング時の悩みの解決能力が随分と向上してきた実感があります.

特に,

  • MKL Link Line Advisorのオプションの意味を朧気ながら理解した
  • MKLで自力でコンストラクタ・実行・デストラクタの流れをsubroutineで隠蔽化して書けるようになった
  • GithubGit Flowの簡易な流れを模してタスク管理が出来るようになった

ということの寄与が大きかったように思います.何だかんだ物理学科に進学したからには,物理に専念するのに充分な技術的な余裕を獲得したいわけで,しょうもないことに時間を取られるのは不本意なわけです1

数値計算について若干

科学技術計算で低レイヤー言語で低学習コストと言えばFortran なわけですが,どうもエンジニアリングの観点から「作業効率化・保守管理・オブジェクト指向デザインパターン・etcと相性が悪い」と思わされる場面が少なくありませんでした.それもそのはずで,そういうことを気にしなくても済むような言語として開発された背景もあるのでしょう.一方,エンジニアリング界隈でFortranの優位性がいまいち評価されていないのも然りで,「何だかお互い技術的に断絶しているな」というのが現状なわけです.そう思っていた矢先に,ちょっと面白い同人誌を見つけてしまいました.

fortran.booth.pm

書籍のタイトルも『Fortranによる実践オブジェクト指向プログラミング』という大変魅力あるものだったので,特に中身に関する前情報もなく反射的に購入してしまいました.これが大変面白く,今の自分の「エンジニアリングの観点から見たFortran,そしてFortranユーザーから見たエンジニアリング界隈のパラダイムは一体どうなのか」という疑問に真っ向から向き合ってくれるような良書だったわけです.ちょっと見開いただけでも,自分の知らないFortran2003の標準機能がザクザクと紹介されている一方,200と数ページという薄い本によくこれだけの情報を蓄積できたなという感慨を覚えました.正直,著者の方にはものすごく強い共感みたいなものを覚えてしまいました.

例えば,文字型変数の宣言文では,Fortran95であれば

character(length = 20) :: char

などとやって文字数に余裕を持たせてから

char = TRIM("hogehoge")

という風に「代入 -> 後方の空白をカット」という手続きを経るのが常識だったわけです(多分).それがFortran2003では自動再割付文字型という機能に取って代わられ,

character(:), allocatable :: char

という宣言文からの

char = "hogehoge"

という代入文で自動的に8文字の割付が行われるようになったわけです.勿論,ありとあらゆる文献を当たってFortran2003を勉強していれば当たり前の事実ですが,日本語で書かれた数値計算屋さんのためのFortranの標準的な教科書では,どうもこの辺の便利な2003年以降の機能が取り上げられていないことが多く,やはり断絶みがあるなと言わざるを得ません.

個人的には,数値計算Fortran固有の機能についてバランスよく書かれた最良の教科書と言えば,現状は牛島さんの『数値計算のためのFortran90/95プログラミング入門』しかないかなと考えています.

数値計算のためのFortran90/95プログラミング入門

数値計算のためのFortran90/95プログラミング入門

なので,これ以上のクオリティのものがFortran2003ないしは2008について書かれれば人類は皆幸せになるのではと思うわけですが,どうもそういうわけではないようです.英語の文献で言えば,Springerからは『Guide to Fortran 2008 Programming』とか『Introduction to Programming with Fortran』が出ているようなので,是非このレベルのものが和書でも出て欲しい.

Guide to Fortran 2008 Programming

Guide to Fortran 2008 Programming

Introduction to Programming with Fortran: With Coverage of Fortran 90, 95, 2003, 2008 and 77

Introduction to Programming with Fortran: With Coverage of Fortran 90, 95, 2003, 2008 and 77

結論としては,Fortran界隈自体は非常に奇特なので,色んな人と仲良くしていきたい.

fortran66.hatenablog.com

今月10月22日の日曜日には秋葉原技術書展があるみたいなので,そこで修論研究の気分転換がてら自分の技術的なフラストレーションを解消する良い本に出会えればと思っている.

techbookfest.org


  1. 正直言うと,しょうもない(と言われがちな)技術的な部分も評価されたいし,数多ある数値計算・解析計算・実験のバックグラウンドにある必ずしも物理とは関係のない技術的な困難を「解決できて当然」と一蹴されるのはちょっと抵抗があります.

Never you can stop me 誰もが

研究

疎行列の扱いって簡単なようで,ややこしくて,よくわからないんですよね.

まず「ある行列を疎行列として扱って良い条件(定義)」が書かれた文献がない.

自分が扱おうとしている行列は「全成分数$N\times N$に対して$\log N\times N$成分のみがノンゼロ」なので,$N$を増やすとノンゼロとなる成分数の比が$0$に漸近する1.だから,まあ通常の疎行列に対する処方箋(Alnoldi法でHessenberg行列にmapして,そこからQR分解によって上三角行列にmapするなど)は使えるだろうと思っていた.

そこで気付いたのだが「上三角行列に持っていける」ということは明らかに「成分数に上限がある」ことを示唆している.最初調べていて,「ひょっとすると明確な定義などは存在しないのではないか」という思いに駆られたが,明らかに疎行列ならば満たす性質が幾つかある筈だという考えは当たっていた.

疎行列自体は,多くの場合その圧縮性が重要なので,どうしても数値解析・データ処理の分野からの参照が目立つ.だからと言って,現代の線形代数の教科書にその辺の記述が見当たらないのは,物理屋としては少々不満なお気持ちになってしまう2.「疎行列の処理を(飽くまで数学的な立場で)厳密に定式化しつつ,その限界をバチッと示す」みたいなのが欲しかった.

後,密行列(全成分がノンゼロ)を扱う時に比べると,(同じメモリ量が確保されていれば)疎行列の場合の方がより大きなサイズを扱えるのは明らかで,そういうメリットを生かす方法を考える必要がある.というのは,構成する時に一時的にでもナマの疎行列のサイズの配列を作ってしまうと元も子もないからである.CSRCompressed Sparse Row)による圧縮形式で最初から構成し,途中でナマの疎行列に展開することなく一貫して計算できたら良いのにという感じがある.

逆に上手くコーディングできれば,計算ソフトとしては計算結果と同等の価値がある気もする.

勿論,最初の段階で構成するのは簡単だとしても,どこかで必ず解凍する過程が必要になりそうで,それがネックになってしまうのは勿体無いなあというお気持ち

勉強

CPTP写像Completely Positive Trace Preserving map)という言葉を縁あって2週連続で聞くことになったが,具体形を示されるまでもなく「確率行列がこのクラスに属する表現の一種である」と今日初めて気付いた.

なので,CPTP写像の満たす性質ならば,確率行列も満たすと言って良さそうだが,逆に確率行列が満たす特別な性質をCPTP写像に拡張するという考えは,物理ではあまり聞かない.というか,むしろGoogleStochastic Matrices CPTP mapsと叩いたら先頭にこんな論文が出てきたくらいであった.

The complexity of divisibility - ScienceDirect

arXiv版: [1411.7380] The Complexity of Divisibility

大変面白そうなので,ゆっくり目を通してみたいと思いつつ,自分の研究に応用できるのはまだまだ先かなぁと考えてみたり.

ブログタイトル

昔,LeafというブランドのPCゲームに無常の価値を感じていた頃がございました.その時に触れたとある作品『Routes -ルーツ-』のリメイク版(on PS2)のオープニングです.

そういえば,ダンまちの第7巻を読了した.

ダンまちは,研究室配属前のB4に読ませたい一品である.その理由は,既に読まれた方たちにとっては自明だろう.


  1. そういえば,挙動を見たくて完全に何気なしにGoogleの検索窓にplot log x /xと叩いたら何とグラフを表示してくれた.さすが.

  2. 僕の不勉強故に,幾つかの重要な教科書や論文を平気で見逃している可能性があるため,この記事を読まれたらこっそりコメントで教えて頂けると嬉しいです.

大胆な告白 こころが望んでる

研究

行列を構成するやつをコチョコチョした.

エラーが出ないか探りながら実装するのは,どうも張り合いがない.

明日には決着を付けて何とか$2\times 2$の現状の結果と一致すること確認できたら嬉しい.

ブログタイトル

お察しください1



  1. エスは言いました.「百合アニメ談義では絶対に『ストロベリーパニック』の話をしないオタクだけが石を投げなさい」

星が歌う物語 キミにも教えてあげる

勉強

この前の確率過程論文,思っていたのとは違った.

tarotene.hatenablog.com

「開いた系を記述するような確率行列」の話があると思ったら,「開いた確率過程を組み合わせて閉じた確率過程を作ろう」という物語だった.チャンチャン👏

研究

$i = 1, \ldots, N$という番号から自動的に2次元Isingスピン系の状態を構成するやつをFortranで実装した.こういうのは,デコードとエンコードのテストをきちんとやって恒等写像になっていることを確かめないと後が怖いね.

ブログタイトル

それは昔,Falcomの『那由多の軌跡』というゲームがあり,「(同ブランドの)『Zwei!!』の再来ではないか」と興奮してプレイしていた時期がありました.この作品,今も物語が終わらない『軌跡シリーズ』とは異なり1つの閉じた物語を形成しています.やはり小さきものは美しい.

オープニングテーマはそこまで心惹かれるものではありませんでしたが,それなりにリスペクトしていたゲームなので,特別な感情を持っています.

終わらないJourney 新しい世界へ

明らかに『ダンまち』に影響され始めたオタクです.

なんか最近研究のペースが変になってきたので,今日はつらつらと読んだ本の話だけします.

最近,立て続けにライトノベルで精神力を補給しているわけですが,やはり『ダンまち』は人気作品だけあってスピード感,構成力ともに抜群の作品だと思います1

今日第6巻を読み終えましたが,こう「RPGの王道を行っていながら何故再現RPGがリリースされないのかな」と思う瞬間が沢山あります

そういえば,ずっと言いたかったこと.

最近は,本屋に行ってライトノベルのコーナーを見ても転生モノ時間遡行モノの皮を被ったRPG志向の作品が増えたなと思うようになりました.実際,空前のRPG系統の何かしらのブームが起きていることは間違いないと思います.

しかし,ゲーム業界を見ればおわかりの通り,一昔前みたいにコンシューマRPGが売れまくる時代ではありません.むしろ,スマートフォンMMORPGなど,通信が前提のプラットフォームに商業として移行しつつあるでしょう.

ライトノベルでこの辺のジャンルが描かれ始めたのとゲーム業界の大きなシフトに関係があるかは分かりませんが,結果から言えば「息の長い物語を提供する役割は,大方活字本に取って代わられたのではないか」と思っています.

これは凄く哀しいことで,『ダンまち』みたいな素晴らしい作品がもし(例えばPS4用の)RPGとしてリリースされていたら(ビジネスモデルとしてどうであれ)「そんなに素晴らしいことは無い」と思うわけですよ.

ちょっと前までは,アニメ化されたライトノベル作品のノベルゲームがコンシューマでリリースされるのは普通のことでした.『ゼロの使い魔』とか『灼眼のシャナ』とか,ありましたよね.それ自体は大した目的ではないのに,明らかな余裕からそういうことが出来ていた.

ところが今では,これがロールモデルとしても否定されつつある.ライトノベルの出処とその向かう先が経済的に絞り込まれ,つまらない終わりを迎えてしまう.

もちろん,「カクヨム」などの台頭によって,これまでに無かった層が小説家として大成するチャンスを得るようになったのは間違いありません.これによって,新たな商業の切り口を見いだせる.

ただ,業界全体としては寂しい方向に向かっていってしまっているのではないか,というのが僕の感想です.キッズがゲームに金を払わない国では,いかなる工夫に基づくビジネスモデルも,陳腐な結果を導くだけ,そんな気がします.

ブログタイトル

ダンまちのゲーム『メモリア・フレーゼ』を始めるにあたり,オープニングの『JOURNEY』という曲を通しで聴いたのですが,これを歌っている井口裕香さん,何と『ダンまち』シリーズのあらゆる作品のオープニング担当だったのですね…「不勉強ですみませんでした」という感じです.

収録シングルは,『ソード・オラトリア』(『ダンまち』の外伝作品)のオープニング『RE-ILLUSION』です.

Youtubeではフル版の動画が存在しなかったので,ちゃんと聴こうと思うとCDを買うしか無いでしょう.というか買いましょう.

メモリア・フレーゼをやりながら聴いた感想としては,この曲,割りと凝った作りをしていますね.よくある民族系旋法(6度目が半音上がる短音階)を,主調性であるF-dur側ではなく,平行調のEs-moll側で使っている.このせいで一瞬「ん?」となるのだが,それが実に良いスパイスになっている.平行調のマイナーコードで始まって主調のメジャーに切り替わる系の曲は無数にあるけど,「主調でやって良いことをそのまま移行すると思わぬことが起きる」という一般的事実を再確認したのは大きい.


  1. アニメについては視聴していないので何もコメントできませんのであしからず.

どこまでも飛んで行く 高い空 目指し

生活

疲労があるとどうしても後から1日を潰すことになる.それを唯一食い止める方法としては「17時に帰る」しかない.

分かってはいても実行に移せないのは,要らないプレッシャーを受けているからなんだろうな.

そういえば,そろそろアースノーマットを買い置きする季節なので,虫に対する緊張感が高まってきた.

研究

平衡状態を(長時間極限での)定常分布に持つマルコフ過程をうまく拡張し,非平衡定常状態での時間発展を記述できないか」という問いは,(自分の不勉強故に)半ば自明な答えと繋がっていると錯覚していた.しかし,そんなことはなかった.むしろ,根幹の部分を気にする人は少ない印象.

そこで見つけた良さげな論文がこちら.

[1601.00711] Open Markov processes: A compositional perspective on non-equilibrium steady states in biology

タイトル通り解釈すれば「開いた系におけるマルコフ過程」なので,「確率論の文脈でどこまで(開放系の)定常状態を理解できるか」ということが気になったら一読の必要がありそう.

次の論文も併せて読めば,理解は更に深まりそうである.

[1508.06448v4] A Compositional Framework for Markov Processes

実際,これらが(一応とは言え)物理の文脈に沿って書かれている以上1,要求されている知識はVan Kampen程度ではなかろうか.

tarotene.hatenablog.com

以前(上の記事で)紹介して以来,全然読めていない.こういうのも最先端の研究に繋げるつもりでスルッと読んでしまいたいね.

ブログタイトル

今日の記事を皮切りに(以前からずっとやっている,そして謎の)ブログタイトルの由来を紹介しようと思います.いわゆる種明かし部分です.

本記事のタイトルは,riyaの『時の向こう側』のサビです.曲そのものは,Falcomの『英雄伝説 ガガーブトリロジー』の(PSPリメイク版の)オープニングに使用されました.

PSPを買ったばかりの頃,このうちの『朱紅い雫』にハマり,いつまで経ってもラスボスが倒せなかったり.ふとした時にタイトル画面を放置していたらこの曲が流れてびっくりした覚えがあります2

ことFalcomに関しては(ほぼ完全な)キッズ世代なので,筆頭作品を訊かれるとどうしても『空の軌跡』などを思い浮かべてしまいますが,一方でI&IIのリメイクを通じて触れることになった『Y’s』なども自分の中ではかなり好きです3


  1. 学部時代の研究室のとあるスタッフ曰く,「Journal of Mathematical Physics物理サイドの数理物理の雑誌として名高い」そうである.逆に「Communications in Mathematical Physics等は数学サイド」だそう.確かに,図書館に足を運ぶついでに雑誌コーナーで蓋を空けてみれば,これは完全に当たっている.

  2. ガガーブトリロジー自体は3部作で,『白き魔女海の檻歌』と併せてシリーズ全体のナンバリングIIIIVVを成しています.

  3. ちょうど高校生くらいの頃にこの辺を漁っていたので,僕の人生は既に転落していたのかも知れません(アッアッ).