| 
 
Application examples solved using both
Ch Control Systems Toolkit and MATLAB Control Systems Toolbox
can be found 
here.
 
Selected
Syntax Comparison of Ch® Control System Toolkit with MATLAB® 
Control System Toolbox
 
 
| MATLAB Control Toolbox |   Ch Control Toolkit | 
| k = acker(A,b,p) |   sys.model("ss", A, b, NULL, NULL);  k = sys.acker(A, b, p); |  
 
| sys = append(sys1,sys2,...,sysN) |   sys = sys1.append(sys2, ..., sysN); | 
 
| asys = augstate(sys) |   asys = sys.augstate(); | 
 
| fb = bandwidth(sys) |   fb = sys.bandwidth(); | 
 
| bodemag(sys) |   sys.bodemag(plot, NULL, NULL); | 
 
| bodemag(sys,{wmin, wmax}) |   sys.bodemag(plot, NULL, NULL, wmin, wmax); | 
 
w={wmin, wmax};  bodemag(sys, w) |   sys.bodemag(plot, NULL, NULL, wmin, wmax); | 
 
| bode(sys) |  sys.bode(plot, NULL, NULL, NULL); | 
 
| bode(sys,{wmin, wmax}) |  sys.bode(plot, NULL, NULL, NULL, wmin, wmax); |  
 
w={wmin, wmax};  bode(sys, w) 
  (NOTE: For function bode(), the argument  
in MATLAB could be either {wmin,wmax} to focus 
 
on the particular frequency interval [wmin,wmax],  
or a vector of desired frequencies to use particular  
frequency points.  
In Ch, they have different prototypes.) |  sys.bode(plot, NULL, NULL, NULL, wmin, wmax); | 
 
w=[w0,w1,w2, ..., wn];  bode(sys, w) |  double w[]={w0,w1,w2, ..., wn};  sys.bode(plot, NULL, NULL, NULL, w); |  
 
w=logspace(wmin, wmax);  bode(sys, w) |  logspace(w,wmin,wmax);  sys.bode(plot, NULL, NULL, NULL, w); |   
 
w=logspace(wmin, wmax, n);  bode(sys, w) |  array double w[n];  logspace(w, wmin, wmax);  sys.bode(plot, NULL, NULL, NULL, w); | 
 
| [mag,phase,wout]=bode(sys) |  sys.bode(NULL, mag, phase, wout); | 
 
| [mag,phase,wout]=bode(sys, {wmin, wmax}) |  sys.bode(NULL, mag, phase, wout, wmin, wmax); | 
 
| [mag,phase]=bode(sys, w) |  sys.bode(NULL, mag, phase, NULL, w); | 
 
| sysd = c2d(sys, Ts, method) |  sysd = sys.c2d(Ts, method); | 
 
| csys = canon(sys) |  csys = sys.canon(NULL); | 
 
| [csys, T] = canon(sys) |  csys = sys.canon(T); | 
 
| csys = canon(sys, 'type') |  csys = sys.canon(NULL, 'type'); | 
 
| [csys, T] = canon(sys, 'type') |  csys = sys.canon(T, 'type'); | 
 
| sysc = connect(sys,[]) |  sysc = sys.connect(NULL, NULL, NULL); | 
 
| sysc = connect(sys,Q) |  sysc = sys.connect(Q, NULL, NULL); | 
 
| sysc = connect(sys,Q,inputs,outputs) |  sysc = sys.connect(Q, inputs, outputs); | 
 
| co = ctrb(sys) |  sys.ctrb(co); | 
 
| co = ctrb(A, B) |  sys.model("ss", A, B, NULL, NULL);  sys.ctrb(co); | 
 
| [Abar,Bbar,Cbar,T,k] = ctrbf(A,B,C) |  sys.model("ss", A, NULL, NULL, NULL);  sys.ctrbf(Abar, Bbar, Cbar, T, k, A, B, C); | 
 
| [Abar,Bbar,Cbar,T,k] = ctrbf(A,B,C,tol) |  sys.model("ss", A, NULL, NULL, NULL);  sys.ctrbf(Abar, Bbar, Cbar, T, k, A, B, C, tol); | 
 
| sysc = d2c(sysd) |  sysc = sysd.d2c(); | 
 
| sysc = d2c(sysd,method) |  sysc = sysd.d2c(method); 
  (NOTE:Only method 'zoh' is available for now.) | 
 
| sys1 = d2d(sys,ts) |  sys1 = sys.d2d(ts); | 
 
| damp(sys) |  sys.damp(); | 
 
| [wn,z] = damp(sys) |  sys.damp(wn, z); |  
 
| [wn,z,p] = damp(sys) |  sys.damp(wn, z, p); | 
 
| K = dcgain(sys) |  K = sys.dcgain(); | 
 
| [k,s,e] = dlqr(a,b,q,r) |  sys.model("ss", a, b, NULL, NULL);  sys.dlqr(k, s, e, q, r); | 
 
| [k,s,e] = dlqr(a,b,q,r,n) |  sys.model("ss", a, b, NULL, NULL);  sys.dlqr(k, s, e, q, r, n); | 
 
| x = dlyap(a, q) |    sys.dlyap(x, a, q); | 
 
| sys = drss(n) |  sys.model("drss", n); | 
 
| sys = drss(n,p) |  sys.model("drss", n, p); | 
 
| sys = drss(n,p,m) |  sys.model("drss", n, p, m); | 
 
| s = dsort(p) |  sys.model("zpk", z, p, k, -1);  s = sys.dsort(); | 
 
| s = esort(p) |  sys.model("zpk", z, p, k);  s = sys.esort(); | 
 
| est = estim(sys,l) |  est = sys.estim(l); | 
 
| est = estim(sys,l,sensors,known) |  est = sys.estim(l, sensors, known); | 
 
| sys = feedback(sys1,sys2) |  sys = sys1.feedback(sys2); | 
 
| sys = feedback(sys1,sys2,sign) |  sys = sys1.feedback(sys2, sign); | 
 
| sys = feedback(sys1,sys2, feedin, feedout, sign) |  sys = sys1.feedback(sys2, feedin, feedout, sign); | 
 
| grid on |  sys.grid(1); | 
 
| grid off |  sys.grid(0); | 
 
| grid |  sys.grid(0); or sys.grid(1); | 
 
| impulse(sys) |  sys.impulse(plot, NULL, NULL, NULL); | 
 
| impulse(sys, tf) |  sys.impulse(plot, NULL, NULL, NULL, tf); | 
 
| yout = impulse(sys) |  sys.impulse(NULL, yout, NULL, NULL); |  
 
| [y, tout] = impulse(sys) |  sys.impulse(NULL, yout, tout, NULL); | 
 
| [y, tout, xout] = impulse(sys) |  sys.impulse(NULL, yout, tout, xout); | 
 
| yout = impulse(sys, tf) |  sys.impulse(NULL, yout, NULL, NULL, tf); |  
 
| yout = impulse(sys, 0:dt:tf) |  double y[tf/dt+1];  sys.impulse(NULL, yout, NULL, NULL, tf); | 
 
| initial(sys, x0) |  sys.initial(plot, NULL, NULL, NULL, x0); | 
 
| initial(sys, x0, 0:dt:tf) |  sys.initial(plot, NULL, NULL, NULL, x0, tf); | 
 
| yout = initial(sys, x0) |  sys.initial(NULL, yout, NULL, NULL, x0); | 
 
| yout = initial(sys, x0, 0:dt:tf) |  sys.initial(NULL, yout, NULL, NULL, x0, tf); | 
 
| [yout, tout] = initial(sys, x0) |  sys.initial(NULL, yout, tout, NULL, x0); | 
 
| [yout, tout] = initial(sys, x0, 0:dt:tf) |  sys.initial(NULL, yout, tout, NULL, x0, tf); | 
 
| [yout, tout, xout] = initial(sys, x0) |  sys.initial(NULL, yout, tout, xout, x0); | 
 
| [yout, tout, xout] = initial(sys, x0, 0:dt:tf) |  sys.initial(NULL, yout, tout, xout, x0, tf); | 
 
| r = input('message to user') |  char s[30];  double r;  printf("message to user");  scanf("%s", s); or getline(_stdio, s, 30);  r = streval(s); |   
 
| r = input('message to user', 's') |  char r[30];  printf("message to user");  scanf("%s", r); or getline(_stdio, r, 30); | 
 
| [l,p,e] = lqe(a,g,c,q,r) |  sys.model("ss", a, NULL, c, NULL);  sys.lqe(l, p, e, g, q, r); | 
 
| [l,p,e] = lqe(a,g,c,q,r,n) |  sys.model("ss", a, NULL, c, NULL);  sys.lqe(l, p, e, g, q, r, n); | 
 
| [k,s,e] = lqr(a,b,q,r) |  sys.model("ss", a, b, NULL, NULL);  sys.lqr(k, s, e, q, r); | 
 
| [k,s,e] = lqr(a,b,q,r,n) |  sys.model("ss", a, b, NULL, NULL);  sys.lqr(k, s, e, q, r, n); | 
 
| lsim(sys, u, 0:dt:tf) |  array double u[tf/dt+1];  sys.lsim(plot, NULL, NULL, NULL, u, tf); | 
 
| lsim(sys, u, t) |  sys.lsim(plot, NULL, NULL, NULL, u, tf); | 
 
| lsim(sys, u, t, x0) |  sys.lsim(plot, NULL, NULL, NULL, u, tf, x0); | 
 
| y = lsim(sys, u, t, x0) |  sys.lsim(plot, y, NULL, NULL, u, tf, x0); | 
 
| [y, tout] = lsim(sys, u, t) |  sys.lsim(plot, y, tout, NULL, u, tf); | 
 
| [y, tout] = lsim(sys, u, t, x0) |  sys.lsim(plot, y, tout, NULL, u, tf, x0); | 
 
| [y, tout, xout] = lsim(sys, u, t) |  sys.lsim(plot, y, tout, xout, u, tf); | 
 
| [y, tout, xout] = lsim(sys, u, t, x0) |  sys.lsim(plot, y, tout, xout, u, tf, x0); | 
 
| margin(sys) |  sys.margin(plot, NULL, NULL, NULL, NULL); | 
 
| [gm,pm,wcg,wcp] = margin(sys) |  sys.margin(NULL, gm, pm, wcg, wcp); | 
 
| [Gm,Pm,Wcg,Wcp] = margin(mag,phase,w) |  sys.margin(NULL, gm, pm, wcg, wcp, mag, phase, w); | 
 
| [Am,Bm,Cm,Dm] = minreal(A,B,C,D) |  sys.model("ss", A, B, C, D);  sys2 = sys.minreal(NULL);  sys2->ssdata(Am, Bm, Cm, Dm); | 
 
| sysr = minreal(sys) |  sys.model("ss", A, B, C, NULL);  sys2 = sys.minreal(NULL);  sys2 = sys.pzcancel(); | 
 
| sysr = minreal(sys, tol) |  sys.model("ss", A, B, C, NULL);  sys2 = sys.minreal(NULL, tol);  sys2 = sys.pzcancel(tol) | 
 
| [sysr, u] = minreal(sys, tol) |  sys.model("ss", A, B, C, NULL);  sys2 = sys.minreal(u, tol); | 
 
| wc = gram(sys,'c') |  sys.model("ss", A, B, NULL, NULL);  sys.gram(wc, 'c'); | 
 
| wo = gram(sys,'o') |  sys.model("ss", A, NULL, C, NULL);  sys.gram(wo, 'o'); | 
 
| ngrid |  sys.ngrid(1); | 
 
| ngrid('new') |  sys.ngrid(1); | 
 
nichols(H);  ngrid |  sys.ngrid(1);  sys.nichols(); | 
 
ngrid('new');  nichols(H)  |  sys.ngrid(1);  sys.nichols(); | 
 
| nichols(sys) |  sys.nichols(plot, NULL, NULL, NULL); | 
 
| nichols(sys,{wmin, wmax}) |  sys.nichols(plot, NULL, NULL, NULL, wmin, wmax); | 
 
w={wmin, wmax};  nichols(sys, w) |  sys.nichols(plot, NULL, NULL, NULL, wmin, wmax); | 
 
w=[w0,w1,w2, ..., wn];  nichols(sys, w) |  double w[]={w0,w1,w2, ..., wn};  sys.nichols(plot, NULL, NULL, NULL, w); | 
 
w=logspace(wmin, wmax);  nichols(sys, w) |  logspace(w,wmin,wmax);  sys.nichols(plot, NULL, NULL, NULL, w); |  
 
w=logspace(wmin, wmax, n);  nichols(sys, w) |  array double w[n];  logspace(w, wmin, wmax);  sys.nichols(plot, NULL, NULL, NULL, w); | 
 
| [mag,phase,wout]=nichols(sys) |  sys.nichols(NULL, mag, phase, wout); | 
 
| [mag,phase,wout]=nichols(sys, {wmin, wmax}) |  sys.nichols(NULL, mag, phase, wout, wmin, wmax); | 
 
| [mag,phase]=nichols(sys, w) |  sys.nichols(NULL, mag, phase, NULL, w); | 
 
| nyquist(sys) |  sys.nyquist(plot, NULL, NULL, NULL); | 
 
| nyquist(sys,w) |  sys.nyquist(plot, NULL, NULL, NULL, w); | 
 
| [re,im,wout] = nyquist(sys) |  sys.nyquist(NULL, re, im, wout); | 
 
| [re,im] = nyquist(sys,w) |  sys.nyquist(NULL, w, re, NULL, w); | 
 
| ob = obsv(sys) |  sys.obsv(ob); | 
 
| ob = obsv(A, C) |  sys.model("ss", A, NULL, C, NULL);  sys.obsv(ob); | 
 
| [Abar,Bbar,Cbar,T,k] = obsvf(A,B,C) |  sys.model("ss", A, B, C, NULL);  sys.obsvf(Abar, Bbar, Cbar, T, k, A, B, C); |  
 
| [Abar,Bbar,Cbar,T,k] = obsvf(A,B,C,tol) |  sys.model("ss", A, B, C, NULL);  sys.obsvf(Abar, Bbar, Cbar, T, k, A, B, C, tol); | 
 
| sys = parallel(sys1, sys2) |  sys = sys1.parallel(sys2); | 
 
| sys = parallel(sys1, sys2, inp1, inp2, out1, out2) |  sys = sys1.parallel(sys2, input1, input2, output1, output2); | 
 
| k = place(A,B,p) |  sys.model("ss", A, B, NULL, NULL); sys.place(k, p); | 
 
| p = pole(sys) |  sys.pole(p); | 
 
| N/A |  sys.printss(); | 
 
| N/A |  sys.printSystem(); | 
 
| N/A |  sys.printtf(); | 
 
| N/A |  sys.printzpk(); | 
 
| pzmap(sys) |  sys.pzmap(plot, NULL, NULL); |  
 
| [p,z]=pzmap(sys) |  sys.pzmap(NULL, p, z); | 
 
| N/A |  sys.pzmap(plot, p, z); | 
 
| rlocus(sys) |  sys.rlocus(plot, NULL, NULL); | 
 
| rlocus(sys,k) |  sys.rlocus(plot, NULL, NULL, k); | 
 
| [r,kout] = rlocus(sys) |  sys.rlocus(NULL, r, kout); | 
 
| [r] = rlocus(sys, k) |  sys.rlocus(NULL, r, NULL, k); | 
 
| N/A |  sys.rlocus(plot, r, kout); | 
 
| N/A |  sys.rlocus(plot, r, NULL, k); | 
 
| rlocfind(sys, p) |  sys.rlocfind(NULL, NULL, p); | 
 
| [k, poles] = rlocfind(sys, p) |  sys.rlocfind(k, poles, p); | 
 
| sys = rss(n) |  sys.model("rss", n); | 
 
| sys = rss(n,p) |  sys.model("rss", n, p); | 
 
| sys = rss(n,p,m) |  sys.model("rss", n, p, m); | 
 
| sys = series(sys1, sys2) |  sys = sys1.series(sys2); | 
 
| sys = series(sys1, sys2, out1, inp2) |  sys = sys1.series(sys2, output1, input2); | 
 
| sgrid |  sys.sgrid(1); 
  (NOTE: Only apply to functions pzmap() and rlocus().) | 
 
| sgrid('new') |  sys.sgrid(1); | 
 
| sgrid(z, wn) |  sys.sgrid(1, z, wn); |  
 
| sgrid(z, wn, 'new') |  sys.sgrid(1, z, wn); | 
 
pzmap(H);  sgrid |  sys.sgrid(1);  sys.pzmap(); | 
 
sgrid('new');  pzmap(H) |  sys.sgrid(1);  sys.pzmap(); 
  (NOTE: z and wn can be intelligently generated.) |  
 
pzmap(H);  sgrid(z, wn) |  sys.sgrid(1, z, wn);  sys.pzmap(); | 
 
sgrid(z, wn, 'new');  pzmap(H) |  sys.sgrid(1, z, wn);  sys.pzmap(); | 
 
| nx = size(sys, 'order') |  nx = sys.size('x'); | 
 
| ny = size(sys, 1) |  ny = sys.size('y'); | 
 
| nu = size(sys, 2) |  nu = sys.size('u'); | 
 
| N/A |  nn = sys.size('n'); |  
 
| N/A |  nd = sys.size('d'); | 
 
| N/A |  nz = sys.size('z'); | 
 
| N/A |  np = sys.size('p'); | 
 
| N/A |  nk = sys.size('k'); | 
 
| [A,B,C,D] = ssdata(sys) |  int nx, ny, nu;  nx = sys.size('x');  ny = sys.size('y');  nu = sys.size('u');  array double A[nx][nx], B[nx][nu], C[ny][nx], D[ny][nu];  sys.ssdata(A, B, C, D); | 
 
| step(sys) |  sys.step(plot, NULL, NULL, NULL); | 
 
| step(sys, tf) |  sys.step(plot, NULL, NULL, NULL, tf); | 
 
| [yout, tout] = step(sys) |  sys.step(NULL, yout, tout, NULL); | 
 
| [yout, tout, xout] = step(sys) |  sys.step(NULL, yout, tout, xout); | 
 
| yout = step(sys, tf) |  sys.step(NULL, yout, NULL, NULL, tf); | 
 
| yout = step(sys, 0:dt:tf) |  double y[tf/dt+1];  sys.step(NULL, yout, NULL, NULL, tf); | 
 
| N/A |  sys.step(plot, yout, NULL, NULL); |  
 
| N/A |  sys.step(plot, yout, NULL, NULL, tf); | 
 
| step(sys) |  sys.step(plot, NULL); | 
 
| step(sys, tf) |  sys.step(plot, NULL, tf); | 
 
| y = step(sys) |  sys.step(NULL, y); | 
 
| y = step(sys, tf) |  sys.step(NULL, y, tf); | 
 
| y = step(sys, 0:dt:tf) |  double y[tf/dt+1];  sys.step(NULL, y, tf); | 
 
| N/A |  sys.step(plot, y); | 
 
| N/A |  sys.step(plot, y, tf); | 
 
| S = stepinfo(sys) |  
sys.stepinfo(risetime, settlingtime, overshoot,  
peakvalue, peaktime, undershoot, settlingmin,  
 settlingmax); | 
 
S = stepinfo(sys, 'SettlingTimeThreadshold',   
ts_percentage);
 |  
sys.stepinfo(risetime, settlingtime, overshoot,  
peakvalue, peaktime, undershoot, settlingmin,  
 settlingmax, ts_percentage, NULL, NULL); | 
 
rt[1] = tr_lowerlimit  
rt[2] = tr_upperlimit  
S = stepinfo(sys, 'RiseTimeLimits', rt);  |  
sys.stepinfo(risetime, settlingtime, overshoot,  
peakvalue, peaktime, undershoot, settlingmin,  
settlingmax, NULL, tr_lowerlimit, tr_upperlimit); | 
 
 
| sys = ss(A, B, C, D) |  sys.model("ss", A, B, C, D); | 
 
| sysT = ss2ss(sys,T) |  sysT = sys.ss2ss(T); | 
 
| [num,den] = ss2tf(A,B,C,D) |  sys.model("ss", A, B, C, D);  sys.tfdata(num, den); | 
 
| [z, p, k] = ss2zp(A,B,C,D) |  sys.model("ss", A, B, C, D);  sys.zpkdata(z, p, k); | 
 
| sys = tf(num, den) |  sys.model("tf", num, den); | 
 
| sys = tf(num, den, Ts) |  sys.model("tf", num, den, Ts); | 
 
| [num, den] = tfdata(sys) |  int nnum, nden;  nnum = sys.size('n');  nden = sys.size('d');  array double num[nnum], den[nden];  sys.tfdata(num, den); | 
 
| [A,B,C,D] = tf2ss(num,den) |  sys.model("tf", num, den);  sys.ssdata(A,B,C,D); | 
 
| [z, p, k] = tf2zp(num,den) |  sys.model("tf", num, den);  sys.zpkdata(z, p, k); | 
 
| z = tzero(sys) |  nz = sys.size('z');  array double complex z[nz];  sys.tzero(z); | 
 
| [z,gain] = tzero(sys) |  nz = sys.size('z');  array double complex z[nz];  double gain;  sys.tzero(z, &gain); | 
 
| z = tzero(A,B,C,D) |  sys.model("ss", A, B, C, D);  nz = sys.size('z');  array double complex z[nz];  double gain;  sys.tzero(z, &gain); | 
 
| zgrid |  sys.zgrid(1); 
  (NOTE: Only apply to functions pzmap() and rlocus().) | 
 
| zgrid('new') |  sys.zgrid(1); | 
 
| zgrid(z, wn) |  zgrid(1, z, wn); |  
 
| zgrid(z, wn, 'new') |  zgrid(1, z, wn); | 
 
pzmap(H);  zgrid |  zgrid(1);  sys.pzmap(); |  
 
zgrid('new');  pzmap(H) |  sys.zgrid(1);  sys.pzmap();
 |  
pzmap(H);  zgrid(z, wn) |  zgrid(1, z, wn);  sys.pzmap();
 |  
zgrid(z, wn, 'new');  pzmap(H) |  zgrid(1, z, wn);  sys.pzmap(); | 
 
| [A,B,C,D] = zp2ss(z, p, k) |  sys.model("zpk", z, p, k);  sys.ssdata(A,B,C,D); | 
 
| [num, den] = zp2tf(z, p, k) |  sys.model("zpk", z, p, k);  sys.tfdata(num, den); | 
 
| sys = zpk(z, p, k) |  sys.model("zpk", z, p, k); | 
 
| [z,p,k] = zpkdata(sys) |  int nz, np; double k;  nz = sys.size('z'); np = sys.size('p');  array double complex z[nz], p[np];  sys.zpkdata(z, p, &k); | 
  
 
References:
 
- 
Ch Control System Toolkit 
    User's Guide, Version 1.0,
SoftIntegration, Inc., September 2002.
 - 
MATLAB Control System Toolbox User's Guide, Version 5, The MathWorks, Inc., 2001.
  
Note: MATLAB is a registered trademark of The MathWorks, Inc.
 | 
 
 
 |