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

質問編集履歴

1

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

2020/02/07 02:10

投稿

itsukidesu
itsukidesu

スコア6

title CHANGED
File without changes
body CHANGED
@@ -1,7 +1,15 @@
1
1
  現在、c言語で行ったプログラムをpythonに変換してプログラムを書こうとしています。
2
-  配列でのループを行っており、配列内の計算によってデータを逐一追加してそのデータからまた、ループ内で値の更新を行ってます。じめは二重ループで行っていたため、あまり構造を把握できていないもだと考えたためループを減らしてその分記述を多くしてみたのすが、更新されません。xまでデータが取れることは確認できており、配列wの出力でエラーはでませんが、値が0に収束ます。見づらかもしれませんが下のC++のプログラムのように実行の結果を求めたいです。
3
- 図は二つもw00を出力た結果です。
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
- y[0][i+1] = w[0][0][i]*x[0][i] + w[0][1][i]*x[1][i]
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
- fai[0][i+1] = math.atan(y[0][i])
142
+ fai[j][i+1] = math.atan(y[j][i])
135
- fai[1][i+1] = math.atan(y[1][i])
136
- 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])
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
- 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])
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
  ![イメージ説明](a630b334de8198447edace739dd52efd.png)