回答編集履歴

2

d

2019/07/30 10:28

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -191,3 +191,29 @@
191
191
  print(f"h = {h:.2f}, a[i] / a[i - 1] < {thresh} を満たす最初の項: {i}")
192
192
 
193
193
  ```
194
+
195
+
196
+
197
+ ```
198
+
199
+ h = 0.00, a[i] / a[i - 1] < 1.001 を満たす最初の項: 1
200
+
201
+ h = 0.10, a[i] / a[i - 1] < 1.001 を満たす最初の項: 11
202
+
203
+ h = 0.20, a[i] / a[i - 1] < 1.001 を満たす最初の項: 9
204
+
205
+ h = 0.30, a[i] / a[i - 1] < 1.001 を満たす最初の項: 7
206
+
207
+ h = 0.40, a[i] / a[i - 1] < 1.001 を満たす最初の項: 6
208
+
209
+ h = 0.50, a[i] / a[i - 1] < 1.001 を満たす最初の項: 6
210
+
211
+ h = 0.60, a[i] / a[i - 1] < 1.001 を満たす最初の項: 5
212
+
213
+ h = 0.70, a[i] / a[i - 1] < 1.001 を満たす最初の項: 5
214
+
215
+ h = 0.80, a[i] / a[i - 1] < 1.001 を満たす最初の項: 5
216
+
217
+ h = 0.90, a[i] / a[i - 1] < 1.001 を満たす最初の項: 4
218
+
219
+ ```

1

d

2019/07/30 10:28

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -97,3 +97,97 @@
97
97
 
98
98
 
99
99
  第 i 項 / 第 i - 1 項の比、青線がy=0.9
100
+
101
+
102
+
103
+ ## 追記
104
+
105
+
106
+
107
+ > ご指摘のように、増加関数なので2項の比をとったとき、分母が必ず小さくなり1を超えるためこの判定条件は間違っていることに気が付きました。そこで、判定条件をa_n/a_(n-1)<1.001と変更しました。
108
+
109
+
110
+
111
+ 各 h の値で 第 i 項 / 第 i - 1 項 < 1.001 を満たす最初の項は以下のようにして求められます。
112
+
113
+
114
+
115
+ ```python
116
+
117
+ import matplotlib.pyplot as plt
118
+
119
+ import numpy as np
120
+
121
+
122
+
123
+ n = 100 # 第何項まで求めるか
124
+
125
+ hs = np.arange(0, 1, 0.1)
126
+
127
+
128
+
129
+ # 数列を格納する2次元配列を用意する。
130
+
131
+ # A[i, j] は a_{i, j} = tanh(a_{i - 1, j} + h_{j}) を表す。
132
+
133
+ A = np.empty((n + 1, len(hs)))
134
+
135
+ A[0] = 0.5 # 初項
136
+
137
+
138
+
139
+ # 第 n 項までの数列を計算する。
140
+
141
+ for i in range(1, n + 1):
142
+
143
+ A[i] = np.tanh(A[i - 1] + hs)
144
+
145
+
146
+
147
+ # 条件を満たすす値を抽出する。
148
+
149
+ thresh = 1.001
150
+
151
+ conditions = A[1:] / A[:-1] < thresh # 第 i 項 / 第 i - 1 項 < 1.001 となるインデックス
152
+
153
+ # print(conditions)
154
+
155
+ # [[ True False False False False False False False False False]
156
+
157
+ # [ True False False False False False False False False False]
158
+
159
+ # [ True False False False False False False False False False]
160
+
161
+ # [ True False False False False False False False False True]
162
+
163
+ # [ True False False False False False True True True True]
164
+
165
+ # [ True False False False True True True True True True]
166
+
167
+ # [ True False False True True True True True True True]
168
+
169
+ # [ True False False True True True True True True True]
170
+
171
+ # [ True False True True True True True True True True]
172
+
173
+ # [ True False True True True True True True True True]
174
+
175
+ # [ True True True True True True True True True True]
176
+
177
+ # [ True True True True True True True True True True]
178
+
179
+ # ...
180
+
181
+
182
+
183
+ # 最初に条件を満たすのは第何項かを求める。
184
+
185
+ indices = np.argmax(conditions, axis=0) + 1
186
+
187
+
188
+
189
+ for h, i in zip(hs, indices):
190
+
191
+ print(f"h = {h:.2f}, a[i] / a[i - 1] < {thresh} を満たす最初の項: {i}")
192
+
193
+ ```