function fr = dm2fr(A,B,C,D,E,W,u0)
% fr = dm2fr(A,B,C,D,E,W,u0)
% Descriptor matrix to frequency response.
% A,B,C,D,E - descriptor matrices
% W vector of frequency points
% u0 input gain vector: u = u0*unit phasor
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %% Version control history
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %% $Id$
% %% $Log$
% %% Revision 1.7 1996/11/06 16:40:38 peterg
% %% Explicit definition of j
% %%
% %% Revision 1.6 1996/08/24 14:22:23 peter
% %% Put in a ; to avoid excessive log output.
% %%
% %% Revision 1.5 1996/08/16 14:26:37 peter
% %% Check and fix size of u0.
% %%
% %% Revision 1.4 1996/08/15 12:50:51 peter
% %% Put in a conj to undo effect of transpose.
% %%
% %% Revision 1.3 1996/08/15 11:53:44 peter
% %% Now has u0 input vector
% %%
% %% Revision 1.2 1996/08/15 10:24:28 peter
% %% Includes u0 argument.
% %%
% %% Revision 1.1 1996/08/10 14:11:28 peter
% %% Initial revision
% %%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[Ny,Nu] = size(D);
[Ny,Nx] = size(C);
N = length(W);
if nargin<7
U0 = zeros(Nu,1);
U0(1) = 1;
else
for i=1:Nu
U0(i) = u0(i);
end;
end;
u0 = U0;
[n,m]=size(W);
if m>n
W=W';
end;
[n,m]=size(u0);
if m>n
u0=u0';
end;
j = sqrt(-1);
fr = zeros(N,Ny);
i = 0;
for w = W'
i = i+1;
%% FR = C*( (E*j*w - A) \ B*u0 ) + D*u0;
FR = C*( inv(E*j*w - A)*B*u0 ) + D*u0;
fr(i,:) = conj(FR');
end;