-
Notifications
You must be signed in to change notification settings - Fork 1
/
rscale.m
46 lines (42 loc) · 1.3 KB
/
rscale.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
function[Nbar]=rscale(a,b,c,d,k)
% Given the single-input linear system:
% .
% x = Ax + Bu
% y = Cx + Du
% and the feedback matrix K,
%
% the function rscale(sys,K) or rscale(A,B,C,D,K)
% finds the scale factor N which will
% eliminate the steady-state error to a step reference
% for a continuous-time, single-input system
% with full-state feedback using the schematic below:
%
% /---------\
% R + u | . |
% ---> N --->() ---->| X=Ax+Bu |--> y=Cx ---> y
% -| \---------/
% | |
% |<---- K <----|
%
%8/21/96 Yanjie Sun of the University of Michigan
% under the supervision of Prof. D. Tilbury
%6/12/98 John Yook, Dawn Tilbury revised
narginchk(2,5);
% --- Determine which syntax is being used ---
nargin1 = nargin;
if (nargin1==2) % System form
[A,B,C,D] = ssdata(a);
K=b;
elseif (nargin1==5) % A,B,C,D matrices
A=a; B=b; C=c; D=d; K=k;
else
error('Input must be of the form (sys,K) or (A,B,C,D,K)');
end
% compute Nbar
s = size(A,1);
Z = [zeros([1,s]) 1];
N = inv([A,B;C,D])*Z'; %#ok<MINV>
Nx = N(1:s);
Nu = N(1+s);
Nbar=Nu + K*Nx;
end