我是python中的新手,我正在尝试自己学习它。我目前正在编写一个代码,它给我索引错误,因为不知何故for循环不会填充我的数据。我应该迭代一个值并使用它,我依赖于前一个值来产生新值。通常使用matlab很容易,只有x(:,k),但python的工作方式不一样,我真的很感激任何不能判断我在python中的知识水平的帮助。它是怎么回事:
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:index 1超出了轴1的大小为1'弹出,因为for循环不会填充数据' x'因此,对于' k-1'没有任何价值。也不是'
。我应该做的是迭代和存储' x'每次使用给定的等式获得新值,直到循环结束时,选择相关的先前值。如您所见,我有一个列矩阵,每次都应该有一个列矩阵。我希望我能说清楚。
谢谢
答案 0 :(得分:0)
第一行是x的初始值,第二行,第三行,第四行和第五行是for循环中用于计算x的迭代的值。
我想要实现的是一般的卡曼滤波器代码。在该系统中,利用给定方程x(k)= Ax(k-1)+ BU,利用先前值x(k-1)计算当前值x(k)。在下一次迭代中,每个x(k)值变为x(k-1),直到执行循环。在这里,我期望在每个循环之后有(2,k)矩阵,因为值的记录对于其他计算是必不可少的。要使用当前值中的先前值,我需要访问第(k-1)个值。
问题由juanpa.arrivillaga(https://stackoverflow.com/users/5014455/juanpa-arrivillaga)解决了。谢谢。