回答編集履歴

5

右側が山なり

2018/05/07 17:51

投稿

set0gut1
set0gut1

スコア2413

test CHANGED
@@ -106,9 +106,11 @@
106
106
 
107
107
 
108
108
 
109
- わりとそれっぽくなる気がするんですぜか左と右の高さがバッチリそろいません
109
+ これでわりとそれっぽくなってる気がしま(右側り)
110
110
 
111
- まだ未発見のバグがあるぽいです(浮動小数点精度問題とかかしれせん
111
+ (コード変更によて `phai = [1,0]` ときグラフ結構形が変わりす。
112
+
113
+ 違ってたらごめんなさい。
112
114
 
113
115
 
114
116
 

4

スクショ追加

2018/05/07 17:51

投稿

set0gut1
set0gut1

スコア2413

test CHANGED
@@ -106,6 +106,10 @@
106
106
 
107
107
 
108
108
 
109
- わりとそれっぽくなる気がするんですが、なぜか左側よりほう3倍ほど高くなり
109
+ わりとそれっぽくなる気がするんですが、なぜか左右の高さバッチリそろいせん
110
110
 
111
111
  まだ未発見のバグがあるっぽいです(浮動小数点の精度の問題とかかもしれません)。
112
+
113
+
114
+
115
+ ![わりとそれっぽいグラフ](027ffe6dcc8481a3e4fdedead024e18d.png)

3

typo修正

2018/05/07 17:37

投稿

set0gut1
set0gut1

スコア2413

test CHANGED
@@ -98,7 +98,7 @@
98
98
 
99
99
  next_s_list[x] = np.inner(P, s_list[x+1]) + np.inner(Q, s_list[x-1])
100
100
 
101
- p_list[x] = np.dot(s_list[x],s_list[x])
101
+ p_list[x] = np.dot(next_s_list[x],next_s_list[x])
102
102
 
103
103
  s_list = next_s_list
104
104
 

2

追記②

2018/05/07 17:28

投稿

set0gut1
set0gut1

スコア2413

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
 
10
10
 
11
- 一点気づいたバグ(線対称にならない件とは関係ないです)
11
+ 追記① 一点気づいたバグ(線対称にならない件とは関係ないです)
12
12
 
13
13
 
14
14
 
@@ -37,3 +37,75 @@
37
37
  このとき s_list[x-1] == s_list[-1] == s_listの末尾となるので、
38
38
 
39
39
  x==300における状態がx==0の状態に影響を及ぼしています。
40
+
41
+
42
+
43
+ ------
44
+
45
+
46
+
47
+ 追記②
48
+
49
+
50
+
51
+ ```python
52
+
53
+ for x in range(0,2*n+1):
54
+
55
+ # 中略
56
+
57
+ s_list[x] = np.inner(P, s_list[x+1]) + np.inner(Q, s_list[x-1])
58
+
59
+ ```
60
+
61
+
62
+
63
+ ↑の部分ですが、`s_list[x-1]`は既に更新済みなので、「左側の既に更新済みの状態を使って現在位置の状態を更新する」という操作を左から右に向かって行っていることになり、たぶんこれが主原因です。
64
+
65
+
66
+
67
+ 次のように`next_s_list`ってのを新設して対応してみるとー、、、
68
+
69
+
70
+
71
+ ```python
72
+
73
+ for t in range(0,3*n):
74
+
75
+ t_list.append(t)
76
+
77
+ if t ==0:
78
+
79
+ s_list
80
+
81
+ p_list
82
+
83
+ else:
84
+
85
+ next_s_list = [0] * len(s_list) # next state list
86
+
87
+ for x in range(0,2*n+1):
88
+
89
+ if x == 0:
90
+
91
+ next_s_list[0] = np.inner(P, s_list[1])
92
+
93
+ elif x == 2*n: # debug
94
+
95
+ next_s_list[2*n] = np.inner(Q, s_list[2*n-1])
96
+
97
+ else:
98
+
99
+ next_s_list[x] = np.inner(P, s_list[x+1]) + np.inner(Q, s_list[x-1])
100
+
101
+ p_list[x] = np.dot(s_list[x],s_list[x])
102
+
103
+ s_list = next_s_list
104
+
105
+ ```
106
+
107
+
108
+
109
+ わりとそれっぽくなる気がするんですが、なぜか左側より右側のほうが3倍ほど高くなります。
110
+
111
+ まだ未発見のバグがあるっぽいです(浮動小数点の精度の問題とかかもしれません)。

1

追記

2018/05/07 17:26

投稿

set0gut1
set0gut1

スコア2413

test CHANGED
@@ -1,3 +1,39 @@
1
- x == n のときに phai の値を変えて、
1
+ 【勘違いでした】
2
2
 
3
- x == n + 1 のときに元に戻してることが原因に見えました。
3
+ x == n のときに phai の値を変えて、x == n + 1 のときに元に戻してることが原因に見えました。
4
+
5
+
6
+
7
+ -----------
8
+
9
+
10
+
11
+ 一点気づいたバグ(線対称にならない件とは関係ないです)
12
+
13
+
14
+
15
+ ```python
16
+
17
+ if x == 0:
18
+
19
+ s_list[0] = np.inner(P, s_list[1])
20
+
21
+ if x == 2*n:
22
+
23
+ s_list[2*n] = np.inner(Q, s_list[2*n-1])
24
+
25
+ else:
26
+
27
+ s_list[x] = np.inner(P, s_list[x+1]) + np.inner(Q, s_list[x-1])
28
+
29
+ p_list[x] = np.dot(s_list[x],s_list[x])
30
+
31
+ ```
32
+
33
+
34
+
35
+ elifじゃなくてifになってるので、x==0のときにelse節が実行されます。
36
+
37
+ このとき s_list[x-1] == s_list[-1] == s_listの末尾となるので、
38
+
39
+ x==300における状態がx==0の状態に影響を及ぼしています。