Skip to content
Snippets Groups Projects
Commit 9ea88022 authored by Adam Friedrich Schrey's avatar Adam Friedrich Schrey
Browse files

Fixing bugs in StateSpace in Block.py

parent e66a51b6
Branches
No related tags found
1 merge request!1merge develop into master
...@@ -416,24 +416,16 @@ class StateSpace(Block): ...@@ -416,24 +416,16 @@ class StateSpace(Block):
self.ninput = len(inp) self.ninput = len(inp)
self.noutput = len(out) self.noutput = len(out)
self.nstate = len(A) 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.A = A
self.B = B self.B = B
self.C = C self.C = C
self.D = D self.D = D
self.inpos = numpy.zeros((self.ninput),dtype=numpy.int) self.inpos = inp
self.outpos = numpy.zeros((self.noutput),dtype=numpy.int) self.outpos = out
self.x = numpy.zeros((self.nstate)) self.x = numpy.zeros((self.nstate))
self.xo = numpy.zeros((self.nstate)) self.xo = numpy.zeros((self.nstate))
self.u = numpy.zeros((self.ninput)) self.u = numpy.zeros((self.ninput))
self.y = numpy.zeros((self.noutput)) 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): for i in range(0,self.nstate):
self.x[i] = xo[i] self.x[i] = xo[i]
self.xo[i] = xo[i] self.xo[i] = xo[i]
...@@ -451,9 +443,9 @@ class StateSpace(Block): ...@@ -451,9 +443,9 @@ class StateSpace(Block):
else: else:
print("WARNING: Can not handle self.C with dimension "+str(self.C.ndim)) print("WARNING: Can not handle self.C with dimension "+str(self.C.ndim))
for j in range(0,self.ninput): 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] 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: #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] self.y[i] = self.y[i] + self.D[i][j]*self.u[j]
else: else:
...@@ -465,12 +457,7 @@ class StateSpace(Block): ...@@ -465,12 +457,7 @@ class StateSpace(Block):
self.x[i] = xo[i] self.x[i] = xo[i]
def cdxdt(self,x,t): def cdxdt(self,x,t):
dxdt = numpy.zeros((self.nstate)) dxdt = numpy.matmul(self.B,self.u.T) + numpy.matmul(self.A,self.x)
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]
return dxdt return dxdt
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment