diff --git a/notebooks/Pysim/DTBlock.py b/notebooks/Pysim/DTBlock.py index 587df4a80fe156be7390977042bcdee7d3e43dbd..8e7861b7fbeb9b37af6847334fcfa571877a6384 100644 --- a/notebooks/Pysim/DTBlock.py +++ b/notebooks/Pysim/DTBlock.py @@ -273,6 +273,7 @@ class DTStateSpace(DTBlock): def __init__(self,inp,out,A,B,C,D,xo,Ts): super(DTStateSpace, self).__init__() self.Ts = Ts + self.xo = xo self.ninput = len(inp) self.noutput = len(out) self.nstate = len(A) @@ -291,15 +292,26 @@ class DTStateSpace(DTBlock): self.outpos[i] = out[i] for i in range(0,self.nstate): self.x[i] = xo[i] - self.xo[i] = xo[i] def updatediscrete(self): for i in range(0,self.noutput): self.y[i] = 0 for j in range(0,self.nstate): - self.y[i] = self.y[i] + self.C[j]*self.x[j] + if self.C.ndim == 1: + self.y[i] = self.y[i] + self.C[j]*self.x[j] + elif self.C.ndim == 2: + #prevent [ValueError: setting an array element with a sequence.] for 2 dimensional self.C: + self.y[i] = self.y[i] + self.C[i][j]*self.x[j] + else: + print("WARNING: Can not handle self.C with dimension "+str(self.C.ndim)) for j in range(0,self.ninput): - self.y[i] = self.y[i] +self.D[j]*self.u[j] + if self.C.ndim == 1: + self.y[i] = self.y[i] + self.D[j]*self.u[j] + elif self.C.ndim == 2: + #prevent [ValueError: setting an array element with a sequence.] for 2 dimensional self.C: + self.y[i] = self.y[i] + self.D[i][j]*self.u[j] + else: + print("WARNING: Can not handle self.D with dimension "+str(self.C.ndim)) xn = numpy.zeros((self.nstate)) for i in range (0,self.nstate): for j in range (0,self.ninput):