function y=risposta_indiciale(num,den,T); % RISPOSTA_INDICIALE : traccia la risposta indiciale di un modello ingresso-uscita % ******************************************************************************** % ## SYNTAX ## % % RISPOSTA_INDICIALE(NUM,DEN): % Traccia la risposta indiciale (cioč la risposta al gradino unitario) % di un sistema la cui funzione di trasferimento e' % NUM % W(s) = ----- % DEN % La scala dei tempi e' scelta automaticamente. % Il valore analitico di questo segnale viene visualizzato nel command window. % % RISPOSTA_INDICIALE(NUM,DEN,T): % Usa il vettore dei tempi T. % % W=RISPOSTA_INDICIALE(NUM,DEN): % W=RISPOSTA_INDICIALE(NUM,DEN,T): % Non traccia il diagramma ma costruisce il vettore W contenente i valori dell'uscita. % % Si veda anche RISPOSTA_LIBERA, RISPOSTA_IMPULSIVA % % Alessandro Giua, Febbraio 2008 ni=nargin; no=nargout; if ((ni <2) & (ni>3)), disp('Errore: controllare il numero degli argomenti') return end if (length(den) < length(num)), disp('Errore: il sistema non e'' proprio') return end if (den(1)==0), disp('Errore: il coefficiente di grado maggiore in DEN deve essere non nullo') return end n = length(den)-1; m = length(num)-1; % Definisco i polinomi % Sden = [s^n ... s 1] % Snum = [s^m ... s 1] syms s t for i=1:n+1, Sden(i) = [s^(n+1-i)]; end for i=1:m+1, Snum(i) = [s^(m+1-i)]; end % Calcolo la funzione di trasferimento W = (Snum*num')/(Sden*den'); % Calcolo la trasformata della risposta indiciale W_ind = W/s; % Calcolo la risposta indiciale antitrasformando w_ind = ilaplace(W_ind) % Calcolo la risposta indiciale numericamente % usando la funzione STEP di MATLAB if (no==0 & ni==3), step(num,den,T); else if (no==0 & ni==2), step(num,den); else if (no==1 & ni==3), y=step(num,den,T); else if (no==1 & ni==2), y=step(num,den); end end end end return