diff --git a/notebooks/Pysim/Block.py b/notebooks/Pysim/Block.py index 848490cd6c9d7a6a467b433ff5af9122d5b036ce..35c990a05f0ab9ccb37164b9386d02b88dfec037 100644 --- a/notebooks/Pysim/Block.py +++ b/notebooks/Pysim/Block.py @@ -416,24 +416,16 @@ class StateSpace(Block): self.ninput = len(inp) self.noutput = len(out) self.nstate = len(A) - self.A = numpy.zeros((self.nstate,self.nstate)) - self.B = numpy.zeros((self.nstate,self.ninput)) - self.C = numpy.zeros((self.noutput,self.nstate)) - self.D = numpy.zeros((self.noutput,self.ninput)) self.A = A self.B = B self.C = C self.D = D - self.inpos = numpy.zeros((self.ninput),dtype=numpy.int) - self.outpos = numpy.zeros((self.noutput),dtype=numpy.int) + self.inpos = inp + self.outpos = out self.x = numpy.zeros((self.nstate)) self.xo = numpy.zeros((self.nstate)) self.u = numpy.zeros((self.ninput)) self.y = numpy.zeros((self.noutput)) - for i in range(0,self.ninput): - self.inpos[i] = inp[i] - for i in range(0,self.noutput): - self.outpos[i] = out[i] for i in range(0,self.nstate): self.x[i] = xo[i] self.xo[i] = xo[i] @@ -451,9 +443,9 @@ class StateSpace(Block): else: print("WARNING: Can not handle self.C with dimension "+str(self.C.ndim)) for j in range(0,self.ninput): - if self.C.ndim == 1: + if self.D.ndim == 1: self.y[i] = self.y[i] + self.D[j]*self.u[j] - elif self.C.ndim == 2: + elif self.D.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: @@ -464,13 +456,8 @@ class StateSpace(Block): for i in range(0,self.nstate): self.x[i] = xo[i] - def cdxdt(self,x,t): - dxdt = numpy.zeros((self.nstate)) - for i in range (0,self.nstate): - for j in range (0,self.ninput): - dxdt[i] = self.B[i,j]*self.u[j] - for j in range (0,self.nstate): - dxdt[i] = dxdt[i] + self.A[i,j]*x[j] + def cdxdt(self,x,t): + dxdt = numpy.matmul(self.B,self.u.T) + numpy.matmul(self.A,self.x) return dxdt