正三角形で作る立体

  • 底面と上面が正三角形x6でできた正六角形で、底面と上面を\pi/6だけ角度をずらし、側面に正三角形を貼る。側面の正三角形は、1点を底面(もしくは上面)と共有し、その対辺を、もう片方の上面(もしくは底面)と共有する
  • 次数6の頂点が2個、次数5の頂点が12個
  • ちなみに、正三角形で作る穴のない閉多面体では、次数が6か5の頂点しかない場合、次数5の頂点はいつも12個となる

サッカーボール 切頂20面体 双対グラフ

  • サッカーボールの展開図がここにある
  • これを対応辺を糊付けして、平面グラフ化すると5角形と6角形とでできた平面グラフになる

f:id:ryamada:20190720092104j:plain

  • この頂点の周りには必ず3個の面があるので、その3面を反時計回りにID登録すると、双対グラフの向き付き3角形の集合が得られる
# サッカーボール
# の三角メッシュ
football.tri <- rbind(c(1,7,4),c(4,7,8),c(1,9,7),c(1,2,9),c(2,23,9),c(2,3,23),c(3,29,23),c(3,19,29),c(3,13,19),c(2,13,3),c(2,10,13),c(1,10,2),c(1,5,10),c(1,4,5),c(4,6,5),c(4,8,6),c(6,8,17),c(8,26,17),c(17,26,31),c(17,31,16),c(6,17,16),c(11,6,16),c(5,6,11),c(5,11,12),c(10,5,12),c(10,12,13),c(13,12,14),c(13,14,19),c(8,21,26),c(8,7,21),c(7,22,21),c(7,9,22),c(9,23,22),c(22,23,25),c(23,29,25),c(16,31,32),c(16,32,15),c(16,15,11),c(11,15,12),c(12,15,14),c(15,32,18),c(15,18,14),c(14,18,19),c(20,19,18),c(29,19,20),c(26,27,31),c(27,26,24),c(26,21,24),c(21,22,24),c(24,22,25),c(27,24,28),c(24,25,28),c(25,29,28),c(28,29,20),c(31,27,30),c(27,28,30),c(28,20,30),c(32,31,30),c(18,32,30),c(20,18,30))

ぱらぱらめくる『Picturing Quantum Processes』

1 Introduction

  • 長年にわたり量子力学では、うまく説明がつかないことがあり、それらを「バグ」のように扱ってきたが、そもそも「バグ」ではなく、「そういうもの・そういう性質をもつものだ」と考えればよいのでは、というスタンスに立つ
    • バグを説明するためにいろいろなものを導入してみたが失敗している(もしくは完全には成功していない):C*-代数(非可換代数)、Quantum logicにおける確率の取り扱い・non-distributivity、Quantum measure theory(加算できないmeasure)
  • いわゆる数学的記述とピクチャ記述の違いは、プログラムのバイナリと人にやさしいプログラミング言語との違いのようなもの
  • Process Theoryで考える。因果関係でとらえるのではなく、そのように変化していく、というとらえ方
  • 量子力学に限らず、論理学にも応用範囲は広がる

2 Guide to Reading This Textbook

  • 大まかな流れは、以下の通りで
  • 基本は、箱と線(wire)
  • String diagrams (線の引き方を見ていくと、水平方向・鉛直方向に反転可能になったりする)。これの導入により、non-separability,unitarity,impossibility to clone arbitrary states,quantum teleportationなどを扱えるようになる
  • Thin vs. Thick. 量子の説明はthin、それの二重・二乗・内積がthickとなりそれは古典力学対象。消滅も扱う
  • Spidersは3個以上の箱をつなぐ。Spidersの手足が集まる胴体は複数あったものを一つにまとめたりできる
  • Spidersに異なる色を着けられる、異なるphasesを与えられる
  • これら全部の道具立てがそろったら、量子力学の全体像をpicturingしていく

3 Processes as Diagrams

  • 過程(processes)が箱で、システム(全体の成り立ち)が線(wires)
  • 0個以上の入力を持ち、0個以上の出力を持つものは、すべて過程(関数型プログラミングっぽい)。線は入力・出力に対応し、型を持つ
  • 過程には、動詞的なもの(時間をかけて何かを起こす)が入ることもあり、装置名が入ることもある
  • 線が表すのは情報フロー
  • 情報には型があり、それは線の属性。過程に定めた入力・出力の型合わせは大事
  • 過程理論
    • T:線が持つ型の集合
    • P:過程の集合
    • 過程の線連結の解釈ができること。それらが全体で系として閉じていること
    • ダイアグラムで描いてあるが、数式的表現をしようと思えばできる
    • ダイアグラムとして異なっていても、過程として同じことになるものはある。論理式の変形や関数の表現の変更などがそれに相当する
    • 過程から生える、入力・出力の線の順番には意味がある
    • 演算順序の変更可能性などの議論にも使える
    • 回路に並列・直列の概念があるが、それは、過程が一緒に起きるか、順序づいて起きるかに対応する
  • 状態は入力ナシで出力アリ、Effectsは入力アリで出力ナシ、Numbersは入出力ナシ。状態があって、Effectにつなぐと併せてNumberになることになるが、それが「確率」だったりする
  • この状態とEffectはいわゆる、ブラとケット

4 String Diagrams

  • 分離可能か、分離不可能か
  • 状態が複数の出力線を持ったり、Effectが複数の入力線を持ったりできる。そのとき、単線入出力の状態・Effectに分離できるかできないか、という話
  • 分離できない状態がcups、分離できないEffectsがcaps
  • cup的状態、cap的Effectは、CUP形の線、CAP形の線で置き換えることができる
  • Cup線、Cap線を含むダイアグラムがString Diagram
  • 行列の転置とトレースもString diagramで簡単に描ける。転置は、入るものと出るものとが交換された過程(この過程は行列)。トレースは過程(行列)を含んだ数(入出力なしの過程)
  • 反転
    • 縦方向の反転:Adjoints(随伴), Conjugates(共役), 内積, ユニタリー、Positivity(正値性)
  • Projectros: 正でitempotent(二乗しても同じ)。これを使うと、複雑なString diagramがシンプルに分離される
  • 分離(不)可能性、コピー(不)可能性、時間逆行、テレポーテーョンなどがString diagramで示せる

5 Hilbert Space from Diagrams

  • Hilbert Spaceを考えるにあたり:
    • 線形代数的に考える
    • 正規直交基底がすべての型にある
    • 行列サイズは任意
    • (行列で表された)過程は同じ型なら加算可能
    • 成分や等倍は複素数
  • p237に、Hilbert spaceでの、Process theoryの概念表現がまとめられている

6 Quantum Processes

  • ここからが本番。線形写像とそのProcess theory 的ダイアグラムから、段階を追ってQuantum processとそのProcess theory的ダイアグラムへと説明を進める
    • 線形写像に「二乗」処理をすることで、pure quantum mapsにして、それに"discarding"を付与してquantum mapsにし、さらにnon-determinismを付与して、quantum processesに持っていく
    • 量子的測定は、システムと関わりうる唯一の手段で、システムと独立には行うことができないものであり、non-deterministicな量子過程の一つとして扱う
  • 線形写像とそのダイアグラムでは、Effectsは「システムを調べること」に相当し、状態に対して、その随伴を対応付けることが、システムがその状態にあるかどうかを調べることであり、それが「数」として表れ、それが、「はい、その状態にあります」という答えの確率に相当した
  • ただし、ここで出てくる数は実数とも限らないし、必ずしも0-1の範囲に収まるようになっていないので、「確率」として受け取るのは不適当なままになっている
  • 正の数を得るためのルールは、複素数とその共役複素数の積を取ること。そして0-1に収めるには、状態とEffectとをそれぞれ規格化しておくことで実現可能
  • これを「二乗をとる」ステップとする。これでpure quantum mapsの段階まで進んだ
  • 二乗するとphase 情報を喪失する。共役複素数を掛けることで実・虚の振り分けが持っていたphase情報を相殺し、その代わりに「実」を得ることを実現しているから
  • 二乗すると変わるのは、複素数複素数でなくなること、和が素直な和にならないこと(大きさの平方根を取る必要が出る、など)、直交基底が直交基底でなくなること
  • phaseが失われることに対応して、それが「なくなること」をダイアグラムで表示する必要が出る
  • 状態に純粋状態とmixed 状態とがあり、その描き方に違いが出る

7 Quantum Measurement

  • 観察することが量子過程なわけではない
  • ある特別なタイプの量子過程が量子測定に相当する。それがダイアグラムとしてあらわされる

8 Picturing Classical-Quantum Processes

  • Spider登場
  • Cups,CapsのつながりがSpider。結合点を縮合できる。線を一般化したもの

9 Picturing Phases and Complementarity

  • 2色を使ってphaseを表現。Spiderのbodyに色が着く
  • SpiderにはComplementary spiderが対応づく

10 Quantum Theory: The Full Picture

  • 総まとめ
  • この章がわかれば、この本はそれでよい、と言う感じの章

11 Quantum Foundations

12 Quantum Computation

13 Quantum Resources

14 Quantomatic

  • diagrammatic proof assistant アプリケーション
  • 問題をダイアグラムで描き、そこにダイアグラム的に同値なものをルール登録して簡略化させたりできる

quantomatic.github.io

ぱらぱらめくる『動く曲線の数値計算』

第0章 コンピュータ上の「数」

第 I 部 数値計算の基本

第1章 常微分方程式の数値解法

  • 微分は差分で代用する
  • 微分と差分では差が出る。差を小さくするには、小分けにすればよいが、計算回数が増えて誤差の原因になるというジレンマがある
  • 打切り誤差と丸め誤差
  • 誤差を小さくする工夫たち(オイラー法とその変法、ルンゲ=クッタ法など)
  • さらなる工夫としての気の利いたオイラー法、シンプレクティック・オイラー
  • 運動エネルギーとポテンシャルエネルギーの和が一定になるようにする~ハミルトニアン。これを「2つの誤差要因の和」を抑え込む方法としてとらえる方法

第2章 数値積分

  • 区分求積、数値積分
  • 端、中点、台形。改良してシンプソン則
  • 気の利いた変形

第3章 非線形方程式の数値解法

第 II 部 偏微分方程式の差分解法

第4章 1階線形偏微分方程式の差分解法

  • 差分商の作り方をいかにうまくするかが大きく影響する
  • 前進差分・後退差分・中心差分
  • 半離散化・全離散化
  • 不安定性、適合性、収束性

第5章 2階線形偏微分方程式の差分解法

  • 熱方程式に代表されるのが2階線形偏微分方程式なので、計算法も発達している

第 III 部 動く曲線の数値計算

第6章 動く曲線の問題

  • 2つのパラメタでx,y座標を決める
  • 閉曲線と開曲線
  • フレネ-セレ
  • 時間発展
  • 曲率、長さ、面積、重心、弾性エネルギー
  • 法線速度
  • 曲率流方程式
  • 表面拡散流方程式
  • そのほか複数の「流」の方程式
  • 動く開曲線は別問題

第7章 動く折れ線上の「曲率」と「法線」

  • 曲率と法線の近似

第8章 動く折れ線の問題

  • 「流」の方程式の離散版、エネルギーの離散版

第9章 間接法やグラフによる表現

  • 曲線上の点を結ぶのが直接法、格子等の補助道具を使って折れ線近似するのが間接法
  • 曲面(補助関数)を用いるものも間接法

第10章 基本解近似解法(MFS)

  • メッシュを作ったり、粒子を撒いたりする方法もあった
  • MFS : Method of Fundamental Solutions
  • 境界値問題
  • 特異点を適切に配置する

RのrSymPyは使いにくいので

  • シンボリック計算はRではやりにく
  • pythonにはSymPyパッケージがあってかなり楽
  • RにはこのpithonのSymPyをjava経由で使うというパッケージrSymPyというものがあるのだが、java SDKの設定など難関・陥穽が厳しく、断念…。WindowsMacも断念
  • じゃあ、ということで、Rでやりたいことをやって、SymPyでやりたいところだけ、pythonでやる作戦はどうか、ということになり、やってみる
  • pythonを立ち上げ、python側からRをバックグラウンド実行して、オブジェクトを取ってこれたら成功、という定義で試してみる
  • 参考サイトはこちら
  • まず、Rでやりたいことは、"pypertest.R"ファイルに書くことにする
X <- sample(1:10,3)
pip install pyper
  • pythonを起動し(anacondaとかを使って、一通りが入っているのが良い。pandaパッケージは使う)(実際にはJupyter notebookでpython3カーネルのipynbを作り)、以下の手順でやれば、Rで作成した乱数が表示できる
  • めでたしめでたし
import pyper
import pandas as pd
r = pyper.R(use_pandas='True')
r("source(file='pypertest.R')")
X = pd.Series(r.get("X"))
print(X)
  • うまくいったので、いざ、SymPyへ
  • やりたいことは、SymPyで作りたい式の係数の値をRで作り、それをpython側に持ってきて、SymPyの変数に代入した式を作ること
  • まず、係数を作るRコードをファイル保存。本当は、とても長いプロセスの末に出てくるが、ここでは、ちょろっと作る

  • 次にpython側でやるのは以下のようなこと