忍者ブログ
20080511~ 13と7と11の倍数の論理積は13と7と11の積の倍数である。 和ァ・・・
[4304] [4303] [4302] [4301] [4300] [4299] [4298] [4297] [4296] [4294] [4295]

これの作り方備忘録です。


図のように、x、y、z、rの列を作り、そこに一様乱数を叩き込みます。
今回は1000点ほどデータを取りました。
rの列はrand()なので、0~1の一様乱数ですが
x、y、zは-1~1の一様乱数にしたかったので、2*rand()-1を使ってます。


次に、井戸型ポテンシャルにおける波動関数、パイロットウェーブのようなものを作ります。

左3列がそれぞれx、y、zによる偶関数の波動関数
同様に右3列がx、y、zによる奇関数の波動関数です。

偶関数の場合は
cos(2πnx/4)を
奇関数の場合は
sin(2πnx/4)を、
それぞれ使っています。y、zの波動関数(H,I,K,L列)は、xの代わりにyやzの乱数座標を入れてください。

また、ここでいうnとは、4行目にある数字のことを言いますが
1行目に入れた数が偶数ならG,H,I列をゼロに、奇数ならJ,K,L列をゼロにするように
2を法としたモジュロ演算を使っています。

波動関数そのものも、
1行目にいれたx,y,zの量子数が偶数ならG,H,I列の波動関数をゼロに、奇数ならJ,K,Lをゼロにするようにしています。

ここでは、x軸とz軸の量子数が2と4と、偶数なので
G,I列がゼロになって
K,L列に有限の数を入れました。

逆に、y軸の量子数が3と奇数なので
H列に有限の値、I列にゼロが入っています。

 

次に、各軸の波動関数を完成させます。
 
偶関数か奇関数のどちらかが入るはずなので、
M列=G列+J列
としています。
y,z軸もそれぞれ、N列=H列+K列、O列=I列+L列としています。


それから、3次元の波動関数を完成させたいので
一旦変数分離した各軸の波動関数を掛け合わせます。
P列=M列*N列*O列といった感じです。Ψ=Ψx*Ψy*Ψzですね。

確率は、Ψの2乗にrのパイロットウェーブ的なのを掛け算したいので
Q列=P列^2*F列としたいところですが、
今回の場合規格化が無理そうなので、代わりに、波動関数に定数を掛け算して、ちょうどよくなるように調整しました。
Q4に適切な値を入れて、掛け算しているので

Q列=P列^2*F列*$Q$4
となります。

最後に、R列で、Q列の値が0.5未満だったら0を、0.5以上だったら1を返すようにしました。
敷居値をR4に設けつつ、if文を使用しましたが、
別に0桁でのround関数で構いません。

この1の個数が、値の個数の半分くらいになるように、Q4の値を調整しています。
結果的に40ぐらいが適切と判断しました。




このシートのすべてをコピーし、新しいシートに、数式ではなく値として貼り付けます。


x、y、z、pの値だけを使うのですが、pが1のときのデータだけがほしいので、pの列に関してデータを降順に並べ替えます。
並べ替えるには、この4列をひとまとまりのデータと機械に認識してもらうために
周りを空けて、x、y、z、pの列ラベルに2つ以上の書式変更を設定します。
今回は中央寄せと太文字を用いました。
また、降順などの操作を行う際に、数式コピペだとうまくいかないことが多いので、一旦値コピペをしました。(ほかにも理由はあります)

これで、pが1の区間の行すべてを取り囲み、グラフ化することで、外村彰先生の実験のような
パイロットウェーブ的な干渉縞をシミュレーションすることができます。

ただし、ここで用いるグラフは2Dグラフで、x、yのデータしか用いません。
ですので、x、y、zのデータを適切に回転させることで、3Dのように見せかけることにしました。

図のような、y軸回転のあとにx軸回転させるような回転行列を作用させます。

H8~J10の区間に、mmult(H2:J4,H5:J7)という行列の積を計算させます。
まず代表となるH8セルに行列の積を実装し、H8~J10を選択して
ctrl+shift+Enterを押すことで、H8~J10全体に計算結果をいきわたらせることができます。

そしてこのH8~J10の混合された回転行列を、先ほどのC,D,E列に作用させたいので
mmult(C12:E12,$H$8:$J$10)とします。
C~E列の500列くらいに作用させるのに、H8~J10の行列は固定のまま作用させたいので
ここでも絶対参照を用います。


これで、G3やG6セルをいじれば、x、y平面だけでなく、見たい角度からの粒子を見ることができるようになりました。

このG3やG6セルも、自動で動かしたいため、以下のような表を作ります。

P列の値に応じて、Q列のy軸回転の角度(°)と、R列のx軸回転角度(°)をまとめてあります。
Q3とR3セルには、それぞれ、選択したP列の数字に応じたQ列とR列の値が出るように
vlookup関数を用いています。

ここで、選択したP列の数字を時々刻々と動かしたいので
now()-today()を計算して、シリアル値を0~1までの数値として表現します。
この値は隠れがちですが1秒以内に何度も更新されています。
これを100万倍ぐらいさせて、わずかな値の変化を増幅します。
それからround関数で整数にしてやり
先ほどの図のP列の最大値を法としたモジュロ演算を行うことで、周期をP列の値の整数にすることができます。ここでは89行あったので89周期です。

ただし、mod関数は0から88までの89個が算出されるので、1を足して、1から89までの整数に直してやります。

この結果が仮にC6セルにあったとすると
Q3とR3にはそれぞれ
vlookup(C6,P5:R93,2)
vlookup(C6,P5:R93,3)
と入力することで、C6セルがP列の値と等しい行のQ列とR列の値を算出してくれます。
(vlookupの3つ目の変数である2や3は、参照する範囲の2列目、3列目という意味です)

あとは
HとI列を参照して、散布図のグラフにすれば完成です


Excelファイルをアップしておきます。
windowsのPCでしか動作確認してませんが、テキトーな空白セルで、delボタンを連打していただければそのたびに再計算されるので、グラフが動くと思います

拍手[1回]

PR

コメント


コメントフォーム
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字


忍者ブログ [PR]
カレンダー
10 2019/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
ブログランキング
ブログランキング参戦中
にほんブログ村 アニメブログ 深夜アニメへ
にほんブログ村 漫画ブログ SF・ファンタジー漫画へ
にほんブログ村 科学ブログ 自然科学へ
よかったらポチッとお願いします^^
最新CM
[10/29 Kellota]
[09/24 Xavier]
[03/03 くそ]
[02/28 GIC結晶ファン]
[12/01 量子きのこ]
プロフィール
HN:
量子きのこ
年齢:
38
性別:
男性
誕生日:
1981/04/04
職業:
WinDOS.N臣T
趣味:
妄想・計算・測定・アニメ
自己紹介:
日記タイトルの頭についてるアルファベットは日記の番号です
26進数を右から読みます
例:H→7番目、XP→15(P)×26+23(X)=413番目。
A=0とする仕様につき一番右の桁はAにできませんのでご了承くださいズコー
バーコード
ブログ内検索
アクセス解析