From fc6e495d6df50bc75c9d80866572922f61604ff6 Mon Sep 17 00:00:00 2001 From: Adam Friedrich Schrey <adam.schrey@gmx.de> Date: Sun, 29 Aug 2021 22:39:38 +0200 Subject: [PATCH] Add support for 2 dimensional arrays and fix bug --- notebooks/Pysim/DTBlock.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/notebooks/Pysim/DTBlock.py b/notebooks/Pysim/DTBlock.py index 587df4a..8e7861b 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): -- GitLab