PDA

View Full Version : [MATLAB]: alcuni comandi capricciosi


Bandit
20-12-2006, 17:43
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.

wisher
20-12-2006, 22:04
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

Bandit
20-12-2006, 23:11
è 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?

wisher
21-12-2006, 09:37
ti consiglio di dare un bell'
help step
per avere la guida del comando step

Bandit
21-12-2006, 09:46
l'ho vista, ma praticamente cosa sono,e cosa cambia, non so riuscito a capirlo.
tu non l'hai mai usato questo comando?

wisher
21-12-2006, 10:28
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

Bandit
21-12-2006, 10:36
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?

wisher
21-12-2006, 10:53
Si, in tutti i casi vedi il movimento forzato dell'uscita in risposta allo scalino, il tutto nel tempo

Bandit
21-12-2006, 10:56
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?

wisher
21-12-2006, 11:04
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

Bandit
21-12-2006, 11:28
ok e quindi lo steso ordine anche quando metto [t,y]=....?

wisher
21-12-2006, 11:32
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.

Bandit
21-12-2006, 11:33
a ok provo

Bandit
21-12-2006, 11:49
mi trovo, ok funziona, grazie, spero che con l'andare avanti non ci siano prob.
grazie

sirus
21-12-2006, 13:42
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

Bandit
21-12-2006, 14:46
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?

Bandit
23-12-2006, 11:25
nessuno?
è l'ultima cosa che mi serve :help

wisher
23-12-2006, 12:10
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

Bandit
03-01-2007, 18:02
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');

wisher
03-01-2007, 19:22
guardati le funzioni
hold on
per continuare a plottare i grafici sulla stessa finestra
Se invece vuoi uno spazio per grafico guardati subplot

Bandit
19-01-2007, 17:11
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?