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