2016-10-23 13 views
-1

私はPythonで新しく、私は自分でそれを学ぼうとしています。私は現在、何らかのforループが自分のデータを設定していないので、私にインデックスエラーを与えるコードに取り組んでいます。私は値を反復することになっていて、それを使って新しい値を生成する前の値に依存します。通常これはmatlabではx(:、k)のみで簡単でしたが、Pythonは同じように動作しません。私はPythonで自分の知識レベルを判断しないような助けに本当に感謝しています。ここでは、それがどのようになる:forループ反復 - 人口矛盾

x = np.matrix([[1.2],[.2]]) # prior knowledge 
A = np.matrix([[1, 1], [0, 1]]) 
B = np.matrix([[.5], [1]]) 
U = -9 
t1 = range(1,100,1) 
for k, val in enumerate(t1): 
     x[:,k] = A*x[:,k-1] + B*U 

を私の理解に、エラー「はIndexError:インデックス1サイズ1と軸1のための範囲外であるが、」ポップアップ表示ループがデータを移入しないためので、「x」のため、 'k-1'と 'k'のどちらにも価値がない。

私が行うべきことは、 'x'値を繰り返して保存し、ループの終わりまで新しい値を得るために、毎回関連する以前の値を選択することです。あなたが見ることができるように、私は列行列を持っており、毎回列行列を持たなければならない。私は自分自身を明確にすることができれば幸いです。

は、最初の行はxの初期値であり、第二、第三、第四及び第五行はxの反復を計算するforループで使用される値であるあなた

+0

なぜ範囲を超えて列挙していますか?あなたの操作の結果は、あなたに形状(2,1)を持つ配列を与えますが、それを十分に超えてインデックスを作成しようとしています。つまり、99までです。そのため、インデックスエラーが発生します。あなたが達成しようとしていることは私には不明です。おそらく、あなたが私たちにそれを教えて、それぞれの行で達成しようとしていることを教えてくれるなら、どこが間違っているのかを理解できるように助けることができると思います –

+0

あなたが望むのは 'x = np.concatenate((x 、A.dot(x [:、k-1])+ B * U)、axis = 1) 'である。配列にインデックスを付けると、たとえば次のようになります。 'x [0]'は要素をアクセスするためのものであり、配列を拡張するものではありません。これは 'numpy'では非常に非効率的です。 –

+0

お返事ありがとうございました。最初の行はxの初期値で、2番目、3番目、4番目、5番目の行はforループでxの反復を計算するために使用される値です。私は実際にコードを何回も変更しましたが、なぜ列挙を使用したのか分かりませんが、あなたは正しいです。代わりに、 'for k in range(1,100,1)'の代わりに使うことができます。私はそれを訂正します。私が実装しようとしているのは、一般的にkamanフィルタのコードです。このシステムでは、現在の値x(k)は、与えられた方程式x(k)= Ax(k-1)+ BUを用いて前の値x(k-1)で計算される。 – Buket

答えて

0

ありがとう。

私が実装しようとしているのは、一般的にカマンフィルターのコードです。このシステムでは、現在の値x(k)は、与えられた方程式x(k)= Ax(k-1)+ BUを用いて前の値x(k-1)で計算される。各x(k)の値は、ループが実行されるまで、次の反復においてx(k-1)になる。ここでは、値の記録が他の計算に不可欠であるため、ループごとに(2、k)行列があることを期待しています。そして、現在の値で前の値を使うには、(k-1)番目の値にアクセスする必要があります。

質問はjuanpa.arrivillaga(https://stackoverflow.com/users/5014455/juanpa-arrivillaga)によって解決されました。ありがとうございます。