質問編集履歴
1
質問の意図をわかりやすく修正しました
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
現在、c言語で行ったプログラムをpythonに変換してプログラムを書こうとしています。
|
2
|
-
|
3
|
-
|
2
|
+
目的としている処理はfor文の中で y, s, faiの値を更新していくプログラムです。
|
3
|
+
1. 初期値としてxはすべて既知のデータでwの初期値のみが与えられています。
|
4
|
+
2. xとwの初期値をもとにyを求める。
|
5
|
+
3. yをアークタンジェントとしたものをfaiとします。
|
6
|
+
4. yとfaiをプログラムに書かれている式に挿入し次wを求める。
|
7
|
+
5. 2~4を繰り返すことでwを更新してゆく
|
4
8
|
|
9
|
+
図で示しているのは二行に列wの要素の一つを取り出したものです。
|
10
|
+
しかし、結果は図のようになり結果が更新されないうえに途中から0に収束しています。
|
11
|
+
手順4においてeta以降の数式を定数倍などに変更すると値が上昇することから、配列のいい関係などは間違っていないと思うのですが、解決方法がわかりません。
|
12
|
+
まだ、pythonに関しては初心者であるため読みにくいプログラムですが、教えていただけると幸いです。
|
5
13
|
|
6
14
|
```c++
|
7
15
|
#include<iostream>
|
@@ -129,13 +137,10 @@
|
|
129
137
|
fai[j][0] = math.atan(y[j][0])
|
130
138
|
|
131
139
|
for i in range(N-1):
|
140
|
+
for j in range(2):
|
132
|
-
|
141
|
+
y[j][i+1] = w[j][0][i]*x[0][i] + w[j][1][i]*x[1][i]
|
133
|
-
y[1][i+1] = w[1][0][i]*x[0][i] + w[1][1][i]*x[1][i]
|
134
|
-
|
142
|
+
fai[j][i+1] = math.atan(y[j][i])
|
135
|
-
fai[1][i+1] = math.atan(y[1][i])
|
136
|
-
|
143
|
+
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])
|
137
|
-
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])
|
138
|
-
|
144
|
+
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])
|
139
|
-
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])
|
140
145
|
```
|
141
146
|

|