state
должен быть вектором столбца, чтобы умножение работало. В настоящее время это просто одномерный массив. Вы можете либо добавить одноэлементное измерение, либо сделать state
2D-массив из одной строки и транспонировать:
state=np.array([2,3])[:,None]
OR
state=np.array([[2,3]]).T
Однако, если ваша задача - добавить все состояния к вашей траектории, вам нужно изменить еще две вещи:
Вам необходимо сделать новую копию state
до trajectory
. Прямо сейчас вы предоставляете только срез, поэтому изменение trajectory
также изменит state
.
np.append
выводит вновь добавленный массив. Вы не фиксируете выходные данные метода, поэтому фактически ничего не добавляете.
Таким образом:
# My initial state
import numpy as np
state=np.array([2,3])[:,None] # Change
trajectory =state.copy() # Change
# the following generate the next samples
class Buck:
""" The following code simulates a Buck converter """
def __init__(self,state,control):
self.control=control
self.state=state
def Next_State(self):
L, C = 1.0, 1.0
R, G = 1.0, 1.0
delta = 0.001
Q = np.array([[-1.0/L,0.0],[0.0,1.0/C]])
A = Q*np.matmul(Q,np.array([[R,1.0],[1.0,-G]]))
next_state = state + delta*np.matmul(A,state)
return next_state
# Here I am appending the new samples to trajectory
for i in range(100000):
state=Buck.Next_State(state)
trajectory = np.append(trajectory,state,axis=1) # Change