IndexError: список индексов вне диапазона для l oop python - PullRequest
0 голосов
/ 13 марта 2020

Я пытаюсь запустить для l oop, который ниже, к сожалению, он выдает ошибку в первый раз. мне удалось присвоить нулевое значение переменной, но затем возникла эта ошибка xest[i] = xprediction + K * y[i] - np.multiply(H, xprediction) ValueError: could not broadcast input array from shape (2,2) into shape (1,1)

x1 = np.zeros(len(t))
x2 = np.zeros(len(t))
K = np.zeros(len(t))
x1p_1 = np.zeros(len(t))
x2p_1 = np.zeros(len(t))
x1e = np.zeros(len(t))
x2e = np.zeros(len(t)) 
y = np.zeros(len(t))

for i in range (1,25):
    print("",i)
    if i < 10:
        u = 0.25
    else:
        u = 0.0

    x1[i] = x1[i] + (dt*x2[i]) + (dt**2/2)*u
    x2[i] = x2[i] + dt*u + math.sqrt(Q)*np.random.normal()

    y[i] = x1[i] + math.sqrt(R) * np.random.normal()

    PP = (A.dot(PE).dot(A_trans)) + (G.dot(Q).dot(G_trans))
    K = (PP.dot(H_trans)).dot(np.linalg.inv(H.dot(PP.dot(H_trans) + R)))
    ident = np.identity(2)
    PE = (ident - K.dot(H)).dot(PP)

    xprediction = A.dot(xest) + B.dot(u)
       xest[i] = xprediction + K * y[i] - np.multiply(H, xprediction)

    """This equations are basically   
    x1e(i+1) = [1 0] * xest
    x2e(i+1) = [0 1] * xest"""

    sol_1 = np.matrix('%s %s' % (1, 0))
    sol_2 = np.matrix('%s %s' % (0, 1))
    x1e[i] = np.multiply(sol_1, xest[i])
    x2e[i] = np.multiply(sol_2, xest[i])


    print("",x1[i])
  1
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-74-6ccc7c6deb33> in <module>
      6         u = 0.0
      7 
----> 8     x1[i] = x1[i] + (dt*x2[i]) + (dt**2/2)*u
      9     x2[i] = x2[i] + dt*u + math.sqrt(Q)*np.random.normal()
     10 

IndexError: list index out of range

Может кто-нибудь объяснить это мне, я действительно ценю это.

1 Ответ

1 голос
/ 13 марта 2020

Поскольку ошибка выдается при первом запуске for для l oop, кажется, что x1 и x2 еще предстоит присвоить значения. Вы можете исправить эту ошибку, добавив массивы вместо использования оператора присваивания, что можно сделать, написав следующее:

for i in range (1,25):
    print("",i)
    if i < 10:
        u = 0.25
    else:
        u = 0.0

    x1.append((dt*x2[i]) + (dt**2/2)*u)
    x2.append(dt*u + math.sqrt(Q)*np.random.normal())

    y.append(math.sqrt(R) * np.random.normal())

Больше ничего я не могу предоставить в плане помощи, если вы не отредактируете свой ответ, включающий декларацию и присвоение x1 и x2

...