質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1135閲覧

想定していた計算結果が得られない

Fallout_18

総合スコア124

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/07/20 10:40

編集2018/07/20 10:43

イメージ説明
4状態4自由度の2次元量子ウォークをやっています。
上の図の(0,0)に確率1にスタートで1step毎に格子点に移動します。周期境界条件で計算を行いました。

python

1import numpy as np 2import matplotlib.pyplot as plt 3import math 4from mpl_toolkits.mplot3d import Axes3D 5from matplotlib import cm 6import matplotlib.colors as colors 7#import matplotlib.animation as animation 8 9n=1 10m=4 11 12 13#D##[26,26] 14P = [[-1/2, 1/2, 1/2, 1/2],[0,0,0,0],[0,0,0,0],[0,0,0,0]] #→ 15Q = [[0,0,0,0],[1/2, -1/2, 1/2, 1/2],[0,0,0,0],[0,0,0,0]] #← 16R = [[0,0,0,0],[0,0,0,0],[1/2, 1/2, -1/2, 1/2],[0,0,0,0]] #↓ 17S = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[1/2, 1/2,-1/2, -1/2]] #↑ 18########## 19t_list = [] 20x_list = [] 21y_list = [] 22p_list=[] 23phi_map = np.zeros((2*m+1, 2*m+1,4),dtype="complex") #np.zeros((行,列,[]の中身の数)) 24phi_map[0,0]= np.array([1,0,0,0]) 25 26 27p_map=np.zeros([2*m+1,2*m+1]) 28 29for i in range(0,2*m+1): 30 p_map[i,i] = np.real(np.inner(phi_map[i,i], np.conj(phi_map[i,i]))) 31 #p_map[i,i]=p 32 x_list.append(i) 33 y_list.append(i) 34#print(p_map) 35print(p_map) 36for t in range(0,n+1): 37 t_list.append(t) 38 if t == 0: 39 print("foool") 40 else: 41 next_phi_map = np.zeros((2*m+1,2*m+1, 4),dtype="complex") 42 for x in range(0,2*m+1): 43 if x == 0: 44 for y in range(0,2*m+1): 45 if y == 0: 46 next_phi_map[x,y] = np.array([np.dot(P, phi_map[2*m,y]) + np.dot(Q, phi_map[x+1,y]) + np.dot(R, phi_map[x,y+1]) + np.dot(S, phi_map[x,2*m])]) 47 elif y == 2*m: 48 next_phi_map[x,y] = np.array([np.dot(P, phi_map[2*m,y]) + np.dot(Q, phi_map[x+1,y]) + np.dot(R, phi_map[x,0]) + np.dot(S, phi_map[x,y-1])]) 49 else: 50 next_phi_map[x,y] = np.array([np.dot(P, phi_map[2*m,y]) + np.dot(Q, phi_map[x+1,y]) + np.dot(R, phi_map[x,y+1]) + np.dot(S, phi_map[x,y-1])]) 51 elif x == 2*m: 52 for y in range(0,2*m+1): 53 if y == 0: 54 next_phi_map[x,y] = np.array([np.dot(P, phi_map[x-1,y]) + np.dot(Q, phi_map[0,y]) + np.dot(R, phi_map[x,y+1]) + np.dot(S, phi_map[x,2*m])]) 55 elif y == 2*m: 56 next_phi_map[x,y] = np.array([np.dot(P, phi_map[x-1,y]) + np.dot(Q, phi_map[0,y]) + np.dot(R, phi_map[x,0]) + np.dot(S, phi_map[x,y-1])]) 57 else: 58 next_phi_map[x,y] = np.array([np.dot(P, phi_map[x-1,y]) + np.dot(Q, phi_map[0,y]) + np.dot(R, phi_map[x,y+1]) + np.dot(S, phi_map[x,y-1])]) 59 elif x == 2 and y == 2: 60 next_phi_map[2,2]=-np.array([np.dot(P, phi_map[x+1,y]) + np.dot(Q, phi_map[x-1,y]) + np.dot(R, phi_map[x,y+1]) + np.dot(S, phi_map[x,y-1])]) 61 else: 62 for y in range(0,2*m+1): 63 if y == 0: 64 next_phi_map[x,y] = np.array([np.dot(P, phi_map[x-1,y]) + np.dot(Q, phi_map[x+1,y]) + np.dot(R, phi_map[x,y+1]) + np.dot(S, phi_map[x,2*m])]) 65 elif y == 2*m: 66 next_phi_map[x,y] = np.array([np.dot(P, phi_map[x-1,y]) + np.dot(Q, phi_map[x+1,y]) + np.dot(R, phi_map[x,0]) + np.dot(S, phi_map[x,y-1])]) 67 else: 68 next_phi_map[x,y] = np.array([np.inner(P, phi_map[x-1,y]) + np.inner(Q, phi_map[x+1,y]) + np.inner(R, phi_map[x,y+1]) + np.inner(S, phi_map[x,y-1])]) 69 #print(t,mean_0,mean_1,mean_2,mean_3) 70 p_map[x,y] = np.real(np.inner(next_phi_map[x,y], np.conj(next_phi_map[x,y]))) 71 phi_map = next_phi_map 72 #print(t,phi_map[0]) 73 mean_0 = phi_map[0].sum()/(4*m**2) #= np.array([(2*mean - next_phi_map[x,y][0])]) 74 mean_1 = phi_map[1].sum()/(4*m**2) #= np.array([(2*mean - next_phi_map[x,y][1])]) 75 mean_2 = phi_map[2].sum()/(4*m**2) #= np.array([(2*mean - next_phi_map[x,y][2])]) 76 mean_3 = phi_map[3].sum()/(4*m**2) #= np.array([(2*mean - next_phi_map[x,y][3])]) 77 phi_map[0] = 2*mean_0 - phi_map[0] 78 phi_map[1] = 2*mean_1 - phi_map[1] 79 phi_map[2] = 2*mean_2 - phi_map[2] 80 phi_map[3] = 2*mean_3 - phi_map[3] 81 #p_list.append(np.inner(phi_map[26,26],np.conj(phi_map[26,26]))) 82 #print("t={}, phi[80,0]:{}".format(t, phi_map[8,0]*np.conj(phi_map[80,0]))) 83 #print("t={}, phi[0,80]:{}".format(t, phi_map[0,8]*np.conj(phi_map[0,80]))) 84 for i in range(0,2*m+1): 85 for j in range(0,2*m+1): 86 print("t = {} ({}, {}):{}".format(t, i, j, phi_map[i, j]))

python

1foool 2t = 0 (0, 0):[-0.96875+0.j 0.03125+0.j 0.03125+0.j 0.03125+0.j] 3t = 0 (0, 1):[0.03125+0.j 0.03125+0.j 0.03125+0.j 0.03125+0.j] 4t = 0 (0, 2):[0.03125+0.j 0.03125+0.j 0.03125+0.j 0.03125+0.j] 5t = 0 (0, 3):[0.03125+0.j 0.03125+0.j 0.03125+0.j 0.03125+0.j] 6t = 0 (0, 4):[0.03125+0.j 0.03125+0.j 0.03125+0.j 0.03125+0.j] 7t = 0 (0, 5):[0.03125+0.j 0.03125+0.j 0.03125+0.j 0.03125+0.j] 8t = 0 (0, 6):[0.03125+0.j 0.03125+0.j 0.03125+0.j 0.03125+0.j] 9t = 0 (0, 7):[0.03125+0.j 0.03125+0.j 0.03125+0.j 0.03125+0.j] 10t = 0 (0, 8):[0.03125+0.j 0.03125+0.j 0.03125+0.j 0.03125+0.j] 11t = 0 (1, 0):[0.+0.j 0.+0.j 0.+0.j 0.+0.j] 12t = 0 (1, 1):[0.+0.j 0.+0.j 0.+0.j 0.+0.j] 13. 14. 15.

t=0のときの(0,0)((0,0)は[1,0,0,0])~(0,8)に0になるはずが、値を持っており原因がわかりません。
ご指導の程、宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mkgrei

2018/07/20 15:11

率直に申し上げて、コードが混沌としているためエラーがわかりにくいのだと思います。
Fallout_18

2018/07/21 04:22 編集

カオスでしょうか。。。。(^^;)。。。。?一応ゴテゴテではある事実は認めますが、境界条件の場合分けを明白にしているつもりなので、どこを計算している等はわかるように書いたのですが。。。見にくく申し訳ないです。
mkgrei

2018/07/21 07:07

例えばrange(0,100,2)のようにすれば、if文を消せたりします。
mkgrei

2018/07/21 07:10

今、端を特別に扱っていますが、外にもう一回り付け足すと、この特別性がなくなります。
Fallout_18

2018/07/26 09:12

ありがとうございます!やってみます
guest

回答1

0

自己解決

mkgrei様、メイン計算のコードを簡素化することが出来ました。
アドバイスありがとうございます!
引き続き頑張っていこうと思います。また機会がございましたら宜しくお願い致します。

python

1#main calculation 2for t in range(1,3): 3 for i in itertools.product(x_list,y_list): 4 next_phi_map[i[0],i[1]] = np.array([np.dot(P, phi_map[i[0]-1,i[1]]) + np.dot(Q, phi_map[i[0]+1,i[1]]) + np.dot(R, phi_map[i[0],i[1]+1]) 5 + np.dot(S, phi_map[i[0],i[1]-1])]) 6 p_map[i] = np.real(np.inner(next_phi_map[i], np.conj(next_phi_map[i]))) 7 phi_map = next_phi_map 8 print(t, p_map) 9

投稿2018/07/29 01:48

Fallout_18

総合スコア124

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問