function y=elib(num,den,y0,t); % ELIB : traccia l'evoluzione libera di un modello ingresso-uscita % ****************************************************************************** % ## SYNTAX ## % % ELIB(NUM,DEN,Y0): % Traccia l'evoluzione libera di un sistema la cui funzione di trasferimento e' % NUM % W(s) = ----- % DEN % a partire da condizioni iniziali dell'uscita e delle sue derivate date dal % vettore Y0. La scala dei tempi e' scelta automaticamente. % % ELIB(NUM,DEN,Y0,T): % Usa il vettore dei tempi T. % % Y=ELIB(NUM,DEN,Y0): % Y=ELIB(NUM,DEN,Y0,T): % Non traccia il diagramma ma costruisce il vettore Y contenente io valori dell'uscita. % % Si veda anche LSIM % % Alessandro Giua, Novembre 2002 ni=nargin; no=nargout; if ((ni <2) & (ni>4)), dips('Errore: controllare il numero degli argomenti') return end if (length(den) ~= length(y0)+1), dips('Errore: se il polinomio al denominatore ha n+1 coefficienti Y0 deve avere lunghezza n') return end if (den(1)==0), dips('Errore: il coefficiente di grado maggiore in DEN deve essere non nullo') return end if (length(y0)==0), dips('Il sistema e'' istantaneo') return end n=length(y0); for i=1:n, alpha(i)=-den(n+2-i)/den(1); end if n==1, A=alpha(1); B=1/den(1); C=1; else A=[zeros(n-1,1),eye(n-1); alpha]; B=[zeros(n-1,1); 1/den(1)]; C=[1 zeros(1,n-1)]; end D=0; sys=ss(A,B,C,D); if ni==3, p=abs(real(roots(den))); [i,j,v]=find(p); if length(v)>0, tau=1/min(v); else tau=1; end t=0:6*tau/200:6*tau; end if no==0, lsim(sys,0*t,t,y0); else y=lsim(sys,0*t,t,y0); end return