View Full Version : [MATLAB]: alcuni comandi capricciosi
Ciao a tutti, sto seguendo alcune guide su internet per studiare i sitemi tramite matlab, ma talvolta i comandi non danno quello sperato:che devo fare?
per esempio ora in questo momento stavo seguendo un pò http://www.ladispe.polito.it/FondAut...oneMatlab1.pdf
>> T = 0 : 0.01 : 5;
>> U= sin(T);
>> num=[1 2 3]; den=[2 3];
>> SYS=tf(num,den)
Transfer function:
s^2 + 2 s + 3
-------------
2 s + 3
>> lsim(SYS,U,T)
??? Error using ==> rfinputs
Not supported for non-proper models.
che vuole?
stavo seguendo http://www.ladispe.polito.it/FondAutoInf/material/IntroduzioneMatlab1.pdf
anche qui
>> num=[1 2 3]; den=[2 3];
>> SYS=tf(num,den);
>> SYS=tf(num,den)
Transfer function:
s^2 + 2 s + 3
-------------
2 s + 3
>> step(SYS)
??? Error using ==> rfinputs
Not supported for non-proper models.
Pare che si arrabbi perchè il sistema da te inserito non è proprio:
Un sistema è strettamente proprio se il grado del numeratore è maggiore di quello del denominatore, è proprio se i due gradi sono uguali
è vero funziona così, grazie
però andando aveanti sono sorti dubbi
sul secondo pezzettino di codice aggiustando come da te suggeritomi
se metto
step(sys)
oppure step(num,den,t)
ho differenti uscite: perchè? i dati non sono sempre quelli?
e poi se antepongo ad uno di questi due comandi [y,t]=
cioè [y,t]=step(sys)
plot(y,t)
La guida dice: così facendo memorizzo l'evoluzione dell'uscita y ed il vettore dei tempi: ma che significa praticamente?cioè cosa vedo dal grafico?
ti consiglio di dare un bell'
help step
per avere la guida del comando step
l'ho vista, ma praticamente cosa sono,e cosa cambia, non so riuscito a capirlo.
tu non l'hai mai usato questo comando?
step(SYS)
mostra la risposta allo scalino del sistema SYS ma puoi ottenere la stessa cosa con
setp(num,den)
Se aggiungi il parametro t alle funzioni precedenti definisci tu su che tempi vuoi che venga calcolato, senza sceglie lui anche i tempi
step(SYS,t)
setp(num,den)
Con[y,t]=step(sys)invece al posto di stampare a video il grafico memorizzi i valori di y e t nei due vettori per poi utilizzarli in seguito
ok ,per la prima parte
step(SYS,t)
step(num,den)
Con[y,t]=step(sys)invece al posto di stampare a video il grafico memorizzi i valori di y e t nei due vettori per poi utilizzarli in seguito
ma se faccio plot cosa vedo in "pratica"? nella vita reale?
i valori delle uscite in base al tempo?
Si, in tutti i casi vedi il movimento forzato dell'uscita in risposta allo scalino, il tutto nel tempo
Si, in tutti i casi vedi il movimento forzato dell'uscita in risposta allo scalino, il tutto nel tempo
che però è una cosa diversa poichè
step(SYS) rappresenta la risposta al gradino (quindi risposta forzata anche essa)
mentre [y,t]=step(SYS) è l'uscita che è diversa dalla risposta
giusto?
Dovrebbero essere la stessa cosa, il problema è che tu fai
plot(y,t)
mentre il comando corretto è
plot(t,y)
Prima devi mettere l'asse dei tempi, poi i valori in funzione del tempo
Dall'help di plot
PLOT(X,Y) plots vector Y versus vector X
ok e quindi lo steso ordine anche quando metto [t,y]=....?
ok e quindi lo steso ordine anche quando metto [t,y]=....?
no,quello è corretto
[Y,T] = STEP(SYS) returns the output response Y and the time
vector T used for simulation.
mi trovo, ok funziona, grazie, spero che con l'andare avanti non ci siano prob.
grazie
Pare che si arrabbi perchè il sistema da te inserito non è proprio:
Un sistema è strettamente proprio se il grado del numeratore è maggiore di quello del denominatore, è proprio se i due gradi sono uguali
Vedo che il corso di Fondamenti di Automatica serve a qualche cosa. :D
ma linspace cosa serve?
cioè so che x=linspace(0.01,100,1000) crea un vettore di 1000 elementi compresi tra 0.01 e 100 .
ma quindi è come quando si definisce un vettore di tempi? solo cambaindo formalismo?
e se così perchè si usa: come faccio a capire quando usare l'uno o l'altro?
nessuno?
è l'ultima cosa che mi serve :help
ma linspace cosa serve?
cioè so che x=linspace(0.01,100,1000) crea un vettore di 1000 elementi compresi tra 0.001 e 1000 .
ma quindi è come quando si definisce un vettore di tempi? solo cambaindo formalismo?
e se così perchè si usa: come faccio a capire quando usare l'uno o l'altro?
nota che nel vettore dei tempi con t=A:passo:B definisci il passo, in linspace definisci il numero dei punti che vuoi ottenere
grazie 1000 ragazzi ;)
volendo creare 2 comandi equivalenti
linspace(0,5,500) è equivalente a t=0:0,01:5?
è possibile mettere in una stessa figura + grafici? per esempio step, lsim,impulse?
il prog su cui stavo ragionado è sempre quello
>> t=0:0.01:5;
>> u=sin(t);
>> num=[1,2];den=[3 2 1];
>> sys=tf(num,den)
Transfer function:
s + 2
---------------
3 s^2 + 2 s + 1
>> [residui,poli]=residue(num,den)
residui =
0.1667 - 0.5893i
0.1667 + 0.5893i
poli =
-0.3333 + 0.4714i
-0.3333 - 0.4714i
>> [a,b,c,d]=tf2ss(num,den)
a =
-0.6667 -0.3333
1.0000 0
b =
1
0
c =
0.3333 0.6667
d =
0
>> lsim(sys,u,t),grid,xlabel('t[sec]'),ylabel('[y(t)]'),title('risposta di un sistema LTI');
guardati le funzioni
hold on
per continuare a plottare i grafici sulla stessa finestra
Se invece vuoi uno spazio per grafico guardati subplot
ragazzi mi chiedevo una cosuccia:
quando si scrive
t=0:0,01:5
0,01 è il passo, ma a che corrisponde? alla frequenza in Herz?
altra cosa: se voglio che in una figura ci siano 3 grafici ed in un altra ce ne sia solo 1 come fo?
con il subplot sono riuscito a fare solo la prima parte, ora come faccio a far comparire anche l'altra figura?
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.