Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
[0., 1., 0., 0.]])
B = np.array([[1./tau, 0.],
[0., 1./tau],
[0., 0.],
[0., 0.]])
C = np.eye(4)
D = np.zeros((4, 2))
# make simulator with coninuous matrix
init_xs = np.array([0., 0., 0., 0.])
plant_cvxopt = FirstOrderSystem(A, B, C, init_states=init_xs)
plant_scipy = FirstOrderSystem(A, B, C, init_states=init_xs)
# create system
sysc = matlab.ss(A, B, C, D)
# discrete system
sysd = matlab.c2d(sysc, dt)
Ad = sysd.A
Bd = sysd.B
# evaluation function weight
Q = np.diag([1., 1., 10., 10.])
R = np.diag([0.01, 0.01])
pre_step = 5
# make controller with discreted matrix
# please check the solver, if you want to use the scipy, set the MpcController_scipy
controller_cvxopt = MpcController_cvxopt(Ad, Bd, Q, R, pre_step,
dt_input_upper=np.array([0.25 * dt, 0.25 * dt]), dt_input_lower=np.array([-0.5 * dt, -0.5 * dt]),
input_upper=np.array([1. ,3.]), input_lower=np.array([-1., -3.]))
def lsim(sys, U = 0.0, T = None, X0 = 0.0):
U_ = U
if isinstance(U_, (np.ndarray, list)):
U_ = U_.T
return cnt.lsim(sys, U_, T, X0)
8., 0., 0., 0.; \
0., 4., 0., 0.; \
0., 0., 1., 0.')
B = np.matrix('2.; 0.; 0.; 0.')
C = np.matrix('0.5, 0.6875, 0.7031, 0.5')
D = np.matrix('0.')
# The full system
fsys = StateSpace(A,B,C,D)
# The reduced system, truncating the order by 1
ord = 3
rsys = msimp.balred(fsys,ord, method = 'truncate')
# Comparison of the step responses of the full and reduced systems
plt.figure(1)
y, t = mt.step(fsys)
yr, tr = mt.step(rsys)
plt.plot(t.T, y.T)
plt.hold(True)
plt.plot(tr.T, yr.T)
# Repeat balanced reduction, now with 100-dimensional random state space
sysrand = mt.rss(100, 1, 1)
rsysrand = msimp.balred(sysrand,10,method ='truncate')
# Comparison of the impulse responses of the full and reduced random systems
plt.figure(2)
trand, yrand = mt.impulse(sysrand)
trandr, yrandr = mt.impulse(rsysrand)
plt.plot(trand.T, yrand.T,trandr.T, yrandr.T)
# lineared car system
V = 5.0
A = np.array([[0., V], [0., 0.]])
B = np.array([[0.], [1.]])
C = np.eye(2)
D = np.zeros((2, 1))
# make simulator with coninuous matrix
init_xs_lead = np.array([5., 0., 0.])
init_xs_follow = np.array([0., 0., 0.])
lead_car = TwoWheeledSystem(init_states=init_xs_lead)
follow_car = TwoWheeledSystem(init_states=init_xs_follow)
# create system
sysc = matlab.ss(A, B, C, D)
# discrete system
sysd = matlab.c2d(sysc, dt)
Ad = sysd.A
Bd = sysd.B
# evaluation function weight
Q = np.diag([1., 1.])
R = np.diag([5.])
pre_step = 15
# make controller with discreted matrix
# please check the solver, if you want to use the scipy, set the MpcController_scipy
lead_controller = MpcController_cvxopt(Ad, Bd, Q, R, pre_step,
dt_input_upper=np.array([30 * dt]), dt_input_lower=np.array([-30 * dt]),
input_upper=np.array([30.]), input_lower=np.array([-30.]))
self.f_bode.clf()
plt.figure(self.f_bode.number)
control.matlab.bode(self.sys, logspace(-2, 2))
plt.suptitle('Bode Diagram')
self.f_nyquist.clf()
plt.figure(self.f_nyquist.number)
control.matlab.nyquist(self.sys, logspace(-2, 2))
plt.suptitle('Nyquist Diagram')
self.f_step.clf()
plt.figure(self.f_step.number)
try:
# Step seems to get intro trouble
# with purely imaginary poles
tvec, yvec = control.matlab.step(self.sys)
plt.plot(tvec.T, yvec)
except:
print("Error plotting step response")
plt.suptitle('Step Response')
self.canvas_pzmap.draw()
self.canvas_bode.draw()
self.canvas_step.draw()
self.canvas_nyquist.draw()
def redraw(self):
""" Redraw all diagrams """
self.draw_pz(self.sys)
self.f_bode.clf()
plt.figure(self.f_bode.number)
control.matlab.bode(self.sys, logspace(-2, 2))
plt.suptitle('Bode Diagram')
self.f_nyquist.clf()
plt.figure(self.f_nyquist.number)
control.matlab.nyquist(self.sys, logspace(-2, 2))
plt.suptitle('Nyquist Diagram')
self.f_step.clf()
plt.figure(self.f_step.number)
try:
# Step seems to get intro trouble
# with purely imaginary poles
tvec, yvec = control.matlab.step(self.sys)
plt.plot(tvec.T, yvec)
except:
print("Error plotting step response")
def redraw(self):
""" Redraw all diagrams """
self.draw_pz(self.sys)
self.f_bode.clf()
plt.figure(self.f_bode.number)
control.matlab.bode(self.sys, logspace(-2, 2))
plt.suptitle('Bode Diagram')
self.f_nyquist.clf()
plt.figure(self.f_nyquist.number)
control.matlab.nyquist(self.sys, logspace(-2, 2))
plt.suptitle('Nyquist Diagram')
self.f_step.clf()
plt.figure(self.f_step.number)
try:
# Step seems to get intro trouble
# with purely imaginary poles
tvec, yvec = control.matlab.step(self.sys)
plt.plot(tvec.T, yvec)
except:
print "Error plotting step response"
plt.suptitle('Step Response')
self.canvas_pzmap.show()
self.canvas_bode.show()
self.canvas_step.show()
NUM34 = [0.891, 0.223]
H3 = [1., 0.7, 0.485, 0.22, 0.]
na3 = 2
nb31 = 1
nb32 = 2
nb33 = 1
nb34 = 2
th31 = 0
th32 = 1
th33 = 0
th34 = 2
nc3 = 3
# transfer function G, H
g_sample11 = cnt.tf(NUM11, DEN1, ts)
g_sample12 = cnt.tf(NUM12, DEN1, ts)
g_sample13 = cnt.tf(NUM13, DEN1, ts)
g_sample14 = cnt.tf(NUM14, DEN1, ts)
g_sample22 = cnt.tf(NUM22, DEN2, ts)
g_sample21 = cnt.tf(NUM21, DEN2, ts)
g_sample23 = cnt.tf(NUM23, DEN2, ts)
g_sample24 = cnt.tf(NUM24, DEN2, ts)
g_sample31 = cnt.tf(NUM31, DEN3, ts)
g_sample32 = cnt.tf(NUM32, DEN3, ts)
g_sample33 = cnt.tf(NUM33, DEN3, ts)
g_sample34 = cnt.tf(NUM34, DEN3, ts)
H_sample1 = cnt.tf(H1, DEN1, ts)
H_sample2 = cnt.tf(H2, DEN2, ts)