The control package is part of the Octave Forge project.
Function list
Linear System Representation
Chapter |
Function |
Implemented |
File |
Number of Tests |
Status |
SLICOT functions |
Priority (0-2)
|
Basic Models |
tf |
yes |
@tf/tf.m |
|
|
|
|
zpk |
yes |
zpk.m |
|
|
|
|
ss |
yes |
@ss/ss.m |
|
|
|
|
frd |
yes |
@frd/frd.m |
|
|
|
|
pid |
no |
|
|
|
|
|
pidstd |
no |
|
|
|
|
|
pid2 |
no |
|
|
|
|
|
dss |
yes |
@lti/dss.m |
|
|
|
|
drss |
no |
|
|
|
|
|
filt |
yes |
filt.m |
|
|
|
|
rss |
no |
|
|
|
|
|
Tunable Models |
ltiblock.gain |
no |
|
|
|
|
|
ltiblock.pid |
no |
|
|
|
|
|
ltiblock.pid2 |
no |
|
|
|
|
|
ltiblock.ss |
no |
|
|
|
|
|
ltiblock.tf |
no |
|
|
|
|
|
realp |
no |
|
|
|
|
|
AnalysisPoint |
no |
|
|
|
|
|
genss |
no |
|
|
|
|
|
genfrd |
no |
|
|
|
|
|
genmat |
no |
|
|
|
|
|
getLoopTransfer |
no |
|
|
|
|
|
getIOTransfer |
no |
|
|
|
|
|
getSensitivity |
no |
|
|
|
|
|
getCompSensitivity |
no |
|
|
|
|
|
getPoints |
no |
|
|
|
|
|
replaceBlock |
no |
|
|
|
|
|
getValue |
no |
|
|
|
|
|
setValue |
no |
|
|
|
|
|
getBlockValue |
no |
|
|
|
|
|
setBlockValue |
no |
|
|
|
|
|
showBlockValue |
no |
|
|
|
|
|
showTunable |
no |
|
|
|
|
|
nblocks |
no |
|
|
|
|
|
getLFTModel |
no |
|
|
|
|
|
Model with Time Delays |
pade |
no |
|
|
|
|
|
absorbDelay |
no |
|
|
|
|
|
thiran |
yes |
thiran.m |
|
|
|
|
hasdelay |
no |
|
|
|
|
|
hasInternalDelay |
no |
|
|
|
|
|
totaldelay |
no |
|
|
|
|
|
delayss |
no |
|
|
|
|
|
setDelayModel |
no |
|
|
|
|
|
getDelayModel |
no |
|
|
|
|
|
Model Attributes |
get |
yes |
@iddata/get.m |
|
|
|
|
set |
yes |
@iddata/set.m |
|
|
|
|
tfdata |
yes |
@lti/tfdata.m |
|
|
|
|
zpkdata |
yes |
@lti/zpkdata.m |
|
|
|
|
ssdata |
yes |
@lti/ssdata.m |
|
|
|
|
frdata |
yes |
@lti/frdata.m |
|
|
|
|
piddata |
no |
|
|
|
|
|
pidstddata |
no |
|
|
|
|
|
piddata2 |
no |
|
|
|
|
|
pidstddata2 |
no |
|
|
|
|
|
dssdata |
yes |
@lti/dssdata.m |
|
|
|
|
chgFreqUnit |
no |
|
|
|
|
|
chgTimeUnit |
no |
|
|
|
|
|
isct |
yes |
@lti/isct.m |
|
|
|
|
isdt |
yes |
@lti/isdt.m |
|
|
|
|
isempty |
yes |
built-in function |
|
|
|
|
isfinite |
yes |
built-in function |
|
|
|
|
isParametric |
no |
|
|
|
|
|
isproper |
no |
|
|
|
|
|
isreal |
yes |
built-in function |
|
|
|
|
isiso |
no |
|
|
|
|
|
isstable |
yes |
@lti/isstable.m |
|
|
|
|
isstatic |
no |
|
|
|
|
|
order |
no |
|
|
|
|
|
ndims |
yes |
built-in function |
|
|
|
|
size |
yes |
built-in function |
|
|
|
|
Model Arrays |
stack |
no |
|
|
|
|
|
nmodels |
no |
|
|
|
|
|
permute |
yes |
built-in function |
|
|
|
|
reshape |
yes |
built-in function |
|
|
|
|
repsys |
yes |
repsys.m |
|
|
|
|
Model Interconnection
Function |
Implemented |
File |
Number of Tests |
Status |
SLICOT functions |
Priority (0-2)
|
feedback |
yes |
@lti/feedback.m |
|
|
|
|
connect |
yes |
@lti/connect.m |
|
|
|
|
sumblk |
yes |
sumblk.m |
|
|
|
|
series |
no |
|
|
|
|
|
parallel |
no |
|
|
|
|
|
append |
yes |
append.m |
|
|
|
|
blkdiag |
yes |
@lti/blkdiag.m |
|
|
|
|
imp2exp |
no |
|
|
|
|
|
inv |
yes |
built-in function |
|
|
|
|
lft |
no |
|
|
|
|
|
connectOptions |
no |
|
|
|
|
|
Model Transformation
Chapter |
Function |
Implemented |
File |
Number of Tests |
Status |
SLICOT functions |
Priority (0-2)
|
Model Type Conversion |
pidstd2 |
no |
|
|
|
|
|
make1DOF |
no |
|
|
|
|
|
make2DOF |
no |
|
|
|
|
|
getComponents |
no |
|
|
|
|
|
Continuous-Discrete Conversion |
c2d |
yes |
@lti/c2d.m |
|
|
|
|
d2c |
yes |
@lti/d2c.m |
|
|
|
|
d2d |
yes |
@lti/d2d.m |
|
|
|
|
upsample |
no |
|
|
|
|
|
c2dOptions |
no |
|
|
|
|
|
d2cOptions |
no |
|
|
|
|
|
d2dOptions |
no |
|
|
|
|
|
Model Simplification |
hsvd |
yes |
hsvd.m |
|
|
|
|
hsvplot |
no |
|
|
|
|
|
sminreal |
yes |
@lti/sminreal.m |
|
|
|
|
balred |
no |
|
|
|
|
|
minreal |
yes |
@lti/minreal.m |
|
|
|
|
balreal |
no |
|
|
|
|
|
modred |
no |
|
|
|
|
|
balredOptions |
no |
|
|
|
|
|
hsvdOptions |
no |
|
|
|
|
|
State-Coordinate Transformation |
canon |
no |
|
|
|
|
|
prescale |
yes |
@lti/prescale.m |
|
|
|
|
ss2ss |
no |
|
|
|
|
|
xperm |
yes |
@lti/xperm.m |
|
|
|
|
Modal Decomposition |
modsep |
no |
|
|
|
|
|
stabsep |
no |
|
|
|
|
|
freqsep |
no |
|
|
|
|
|
stabsepOptions |
no |
|
|
|
|
|
freqsepOptions |
no |
|
|
|
|
|
Linear Analysis
Chapter |
Function |
Implemented |
File |
Number of Tests |
Status |
SLICOT functions |
Priority (0-2)
|
Time-Domain Analysis |
linearSystemAnalyzer |
no |
|
|
|
|
|
impulseplot |
no |
|
|
|
|
|
initialplot |
no |
|
|
|
|
|
lsimplot |
no |
|
|
|
|
|
stepplot |
no |
|
|
|
|
|
covar |
yes |
covar.m |
|
|
|
|
impulse |
yes |
impulse.m |
|
|
|
|
initial |
yes |
initial.m |
|
|
|
|
lsim |
yes |
lsim.m |
|
|
|
|
step |
yes |
step.m |
|
|
|
|
lsiminfo |
no |
|
|
|
|
|
stepinfo |
no |
|
|
|
|
|
stepDataOptions |
no |
|
|
|
|
|
Frequency-Domain Analysis |
bodeplot |
no |
|
|
|
|
|
nicholsplot |
no |
|
|
|
|
|
nyquistplot |
no |
|
|
|
|
|
sigmaplot |
no |
|
|
|
|
|
bode |
yes |
bode.m |
|
|
|
|
nichols |
yes |
nichols.m |
|
|
|
|
nyquist |
yes |
nyquist.m |
|
|
|
|
sigma |
yes |
sigma.m |
|
|
|
|
evalfr |
no |
|
|
|
|
|
freqresp |
yes |
@lti/freqresp.m |
|
|
|
|
bandwidth |
yes |
built-in function |
|
|
|
|
dcgain |
yes |
@lti/dcgain.m |
|
|
|
|
getGainCrossover |
no |
|
|
|
|
|
getPeakGain |
no |
|
|
|
|
|
Stability Analysis |
pole |
yes |
@lti/pole.m |
|
|
|
|
zero |
yes |
@lti/zero.m |
|
|
|
|
damp |
no |
|
|
|
|
|
dsort |
no |
|
|
|
|
|
esort |
no |
|
|
|
|
|
tzero |
no |
|
|
|
|
|
pzplot |
no |
|
|
|
|
|
iopzplot |
no |
|
|
|
|
|
allmargin |
no |
|
|
|
|
|
margin |
yes |
margin.m |
|
|
|
|
Plot Customization |
bodeoptions |
no |
|
|
|
|
|
hsvoptions |
no |
|
|
|
|
|
nicholsoptions |
no |
|
|
|
|
|
nyquistoptions |
no |
|
|
|
|
|
pzoptions |
no |
|
|
|
|
|
sigmaoptions |
no |
|
|
|
|
|
timeoptions |
no |
|
|
|
|
|
setoptions |
no |
|
|
|
|
|
getoptions |
no |
|
|
|
|
|
ctrlpref |
no |
|
|
|
|
|
updateSystem |
no |
|
|
|
|
|
Control Design
Chapter |
Function |
Implemented |
File |
Number of Tests |
Status |
SLICOT functions |
Priority (0-2)
|
PID Controller Tuning |
pidTuner |
no |
|
|
|
|
|
pidtune |
no |
|
|
|
|
|
pidtuneOptions |
no |
|
|
|
|
|
SISO Feedback Loops |
rlocus |
yes |
rlocus.m |
|
|
|
|
rlocusplot |
no |
|
|
|
|
|
controlSystemDesigner |
no |
|
|
|
|
|
sisoinit |
no |
|
|
|
|
|
Linear-Quadratic-Gaussian Control |
lqr |
yes |
lqr.m |
|
|
|
|
lqry |
no |
|
|
|
|
|
lqi |
no |
|
|
|
|
|
dlqr |
yes |
dlqr.m |
|
|
|
|
lqrd |
no |
|
|
|
|
|
kalman |
yes |
kalman.m |
|
|
|
|
kalmd |
no |
|
|
|
|
|
lqg |
no |
|
|
|
|
|
lqgreg |
no |
|
|
|
|
|
lqgtrack |
no |
|
|
|
|
|
augstate |
no |
|
|
|
|
|
norm |
yes |
@lti/norm.m |
|
|
|
|
Pole Placement |
estim |
yes |
estim.m |
|
|
|
|
place |
yes |
place.m |
|
|
|
|
reg |
no |
|
|
|
|
|
Matrix Computations
Function |
Implemented |
File |
Number of Tests |
Status |
SLICOT functions |
Priority (0-2)
|
lyap |
yes |
lyap.m |
|
|
|
|
lyapchol |
yes |
lyapchol.m |
|
|
|
|
dlyap |
yes |
dlyap.m |
|
|
|
|
dlyapchol |
yes |
dlyapchol.m |
|
|
|
|
care |
yes |
care.m |
|
|
|
|
dare |
yes |
dare.m |
|
|
|
|
gcare |
no |
|
|
|
|
|
gdare |
no |
|
|
|
|
|
ctrb |
yes |
ctrb.m |
|
|
|
|
obsv |
yes |
obsv.m |
|
|
|
|
ctrbf |
yes |
ctrbf.m |
|
|
|
|
obsvf |
yes |
obsvf.m |
|
|
|
|
gram |
yes |
gram.m |
|
|
|
|
bdschur |
no |
|
|
|
|
|
Examples
PT1/low-pass filter step response
Code: Creating a transfer function and plotting its response
|
T1=0.4; # time constant
P=tf([1], [T1 1]) # create transfer function model
step(P,2) # plot step response
#add some common markers like the tangent line at the origin, which crosses lim(n->inf) f(t) at t=T1
hold on
plot ([0 T1], [0 1],"g")
plot ([T1 T1], [0 1],"k")
plot ([0 T1], [1-1/e 1-1/e],"m")
hold off
|
Try also bode(P)!
(a first order low-pass filter has -3db magnitude at f=1/T1)
Inverted Pendulum
A nonlinear model of the inverted pendulum can be derived by
,
where the variables are defined as
Name
|
Definition
|
$$M$$
|
Mass of the cart
|
m
|
Mass of the pendulum
|
c
|
Translational damping coefficient
|
l
|
Length of the pendulum
|
I
|
Inertia of the pendulum
|
b
|
Rotational damping coefficient
|
References