質問編集履歴

1

質問の意図をわかりやすく修正しました

2020/02/07 02:10

投稿

itsukidesu
itsukidesu

スコア6

test CHANGED
File without changes
test CHANGED
@@ -1,10 +1,26 @@
1
1
  現在、c言語で行ったプログラムをpythonに変換してプログラムを書こうとしています。
2
2
 
3
-  配列でのループを行っており、配列内の計算によってデータを逐一追加してそのデータからまた、ループ内で値の更新を行ってます。じめは二重ループ行っていたため、あまり構造を把握できていないもだと考えたためループ減らしてその分記述を多くしてみたのですが、値が更新されません。xまでデータが取れることは確認できおり、配列wの出力でエラーはでませんが、値が0に収束します。見づらかもしれませんが下のC++のプログラムのように実行の結果を求めたいです。
4
-
5
- 図は二つもw00を出力た結果です。
6
-
7
-
3
+ 目的としている処理for文の中 y, s, faiを更新ていプログラムです。
4
+
5
+ 1. 初期値としてxはすべて既知のデータwの初期値のみが与えられています。
6
+
7
+ 2. xとwの初期値をもとにyを求める。
8
+
9
+ 3. yをアークタンジェントとしたものをfaiとします。
10
+
11
+ 4. yとfaiをプログラムに書かれている式に挿入し次wを求める。
12
+
13
+ 5. 2~4を繰り返すことでwを更新してゆく
14
+
15
+
16
+
17
+ 図で示しているのは二行に列wの要素の一つを取り出したものです。
18
+
19
+ しかし、結果は図のようになり結果が更新されないうえに途中から0に収束しています。
20
+
21
+ 手順4においてeta以降の数式を定数倍などに変更すると値が上昇することから、配列のいい関係などは間違っていないと思うのですが、解決方法がわかりません。
22
+
23
+ まだ、pythonに関しては初心者であるため読みにくいプログラムですが、教えていただけると幸いです。
8
24
 
9
25
 
10
26
 
@@ -260,21 +276,15 @@
260
276
 
261
277
  for i in range(N-1):
262
278
 
279
+ for j in range(2):
280
+
263
- y[0][i+1] = w[0][0][i]*x[0][i] + w[0][1][i]*x[1][i]
281
+ y[j][i+1] = w[j][0][i]*x[0][i] + w[j][1][i]*x[1][i]
264
-
265
- y[1][i+1] = w[1][0][i]*x[0][i] + w[1][1][i]*x[1][i]
282
+
266
-
267
- fai[0][i+1] = math.atan(y[0][i])
283
+ fai[j][i+1] = math.atan(y[j][i])
268
-
269
- fai[1][i+1] = math.atan(y[1][i])
284
+
270
-
271
- w[0][0][i+1] = w[0][0][i] + eta * ((1-fai[0][i]*y[0][i])*w[0][0][i] - fai[0][i]*y[1][i]*w[1][0][i])
285
+ w[0][j][i+1] = w[0][j][i] + eta * ((1-fai[0][i]*y[0][i])*w[0][j][i] - fai[0][i]*y[1][i]*w[1][j][i])
272
-
273
- w[0][1][i+1] = w[0][1][i] + eta * ((1-fai[0][i]*y[0][i])*w[0][1][i] - fai[0][i]*y[1][i]*w[1][1][i])
286
+
274
-
275
- w[1][0][i+1] = w[1][0][i] + eta * ((1-fai[1][i]*y[1][i])*w[1][0][i] - fai[1][i]*y[0][i]*w[0][0][i])
287
+ w[1][j][i+1] = w[1][j][i] + eta * ((1-fai[1][i]*y[1][i])*w[1][j][i] - fai[1][i]*y[0][i]*w[0][j][i])
276
-
277
- w[1][1][i+1] = w[1][1][i] + eta * ((1-fai[1][i]*y[1][i])*w[1][1][i] - fai[1][i]*y[0][i]*w[0][1][i])
278
288
 
279
289
  ```
280
290