teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

5

右側が山なり

2018/05/07 17:51

投稿

set0gut1
set0gut1

スコア2413

answer CHANGED
@@ -52,7 +52,8 @@
52
52
  s_list = next_s_list
53
53
  ```
54
54
 
55
- わりとそれっぽくなる気がするんですが、なぜか左との高さバッチリそろいません
55
+ これでわりとそれっぽくなってる気がしま山なり)
56
- まだ未発見のバグがあるっぽいです浮動小数点精度の問題かかしれせん)
56
+ コード変更によって `phai = [1,0]` のときのグラフ結構形が変わり
57
+ 違ってたらごめんなさい。
57
58
 
58
59
  ![わりとそれっぽいグラフ](027ffe6dcc8481a3e4fdedead024e18d.png)

4

スクショ追加

2018/05/07 17:51

投稿

set0gut1
set0gut1

スコア2413

answer CHANGED
@@ -52,5 +52,7 @@
52
52
  s_list = next_s_list
53
53
  ```
54
54
 
55
- わりとそれっぽくなる気がするんですが、なぜか左側よりほうが3倍ほどくなり
55
+ わりとそれっぽくなる気がするんですが、なぜか左右の高さがバッチリそろいせん
56
- まだ未発見のバグがあるっぽいです(浮動小数点の精度の問題とかかもしれません)。
56
+ まだ未発見のバグがあるっぽいです(浮動小数点の精度の問題とかかもしれません)。
57
+
58
+ ![わりとそれっぽいグラフ](027ffe6dcc8481a3e4fdedead024e18d.png)

3

typo修正

2018/05/07 17:37

投稿

set0gut1
set0gut1

スコア2413

answer CHANGED
@@ -48,7 +48,7 @@
48
48
  next_s_list[2*n] = np.inner(Q, s_list[2*n-1])
49
49
  else:
50
50
  next_s_list[x] = np.inner(P, s_list[x+1]) + np.inner(Q, s_list[x-1])
51
- p_list[x] = np.dot(s_list[x],s_list[x])
51
+ p_list[x] = np.dot(next_s_list[x],next_s_list[x])
52
52
  s_list = next_s_list
53
53
  ```
54
54
 

2

追記②

2018/05/07 17:28

投稿

set0gut1
set0gut1

スコア2413

answer CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  -----------
5
5
 
6
- 一点気づいたバグ(線対称にならない件とは関係ないです)
6
+ 追記① 一点気づいたバグ(線対称にならない件とは関係ないです)
7
7
 
8
8
  ```python
9
9
  if x == 0:
@@ -17,4 +17,40 @@
17
17
 
18
18
  elifじゃなくてifになってるので、x==0のときにelse節が実行されます。
19
19
  このとき s_list[x-1] == s_list[-1] == s_listの末尾となるので、
20
- x==300における状態がx==0の状態に影響を及ぼしています。
20
+ x==300における状態がx==0の状態に影響を及ぼしています。
21
+
22
+ ------
23
+
24
+ 追記②
25
+
26
+ ```python
27
+ for x in range(0,2*n+1):
28
+ # 中略
29
+ s_list[x] = np.inner(P, s_list[x+1]) + np.inner(Q, s_list[x-1])
30
+ ```
31
+
32
+ ↑の部分ですが、`s_list[x-1]`は既に更新済みなので、「左側の既に更新済みの状態を使って現在位置の状態を更新する」という操作を左から右に向かって行っていることになり、たぶんこれが主原因です。
33
+
34
+ 次のように`next_s_list`ってのを新設して対応してみるとー、、、
35
+
36
+ ```python
37
+ for t in range(0,3*n):
38
+ t_list.append(t)
39
+ if t ==0:
40
+ s_list
41
+ p_list
42
+ else:
43
+ next_s_list = [0] * len(s_list) # next state list
44
+ for x in range(0,2*n+1):
45
+ if x == 0:
46
+ next_s_list[0] = np.inner(P, s_list[1])
47
+ elif x == 2*n: # debug
48
+ next_s_list[2*n] = np.inner(Q, s_list[2*n-1])
49
+ else:
50
+ next_s_list[x] = np.inner(P, s_list[x+1]) + np.inner(Q, s_list[x-1])
51
+ p_list[x] = np.dot(s_list[x],s_list[x])
52
+ s_list = next_s_list
53
+ ```
54
+
55
+ わりとそれっぽくなる気がするんですが、なぜか左側より右側のほうが3倍ほど高くなります。
56
+ まだ未発見のバグがあるっぽいです(浮動小数点の精度の問題とかかもしれません)。

1

追記

2018/05/07 17:26

投稿

set0gut1
set0gut1

スコア2413

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