tonegas” post=64432Ora una cosa che mi chiedevo è se era possibile rendere il grafico un po’ smooth.
Anch’io ti consiglio di lavorare sui dati di Matlab, ma ti sconsiglio di usare l’interpolazione cubica perché i due rami di destra hanno un punto angoloso e la spline potrebbe non essere adatta.
Invece, potresti aumentare il numero di punti del grafico semplicemente imponendo tu i valori di guadagno in corrispondenza dei quali determinare la posizione dei poli in anello chiuso con il comando:
`
r = rlocus(FDT, k);
`
dove k, nel tuo caso, è un vettore con più di 17 elementi, ovviamente. Il problema è come scegliere i valori di k senza risparmiare (perché potresti ottenere un grafico che non corrisponde alla realtà) o senza esagerare (perché ti troveresti tanti punti inutili magari dove non servono, ad esempio in un segmento). Siccome Matlab non li sceglie a casaccio, una soluzione potrebbe essere:
1) fai una prima chiamata [r, k] = rlocus(FDT); e ti determini automaticamente i valori di k di partenza;
2) a partire da questi, ti costruisci un nuovo vettore k nel quale, tra ogni coppia di elementi di quello di partenza, andrai ad inserire uno o più valori intermedi a seconda del dettaglio che vuoi ottenere;
3) fai una seconda chiamata [r, k] = rlocus(FDT, k); con il vettore k appena determinato.
Il vantaggio, rispetto all’interpolazione, è che i valori che ottieni sono effettivamente punti del luogo.
Il metodo più semplice per scegliere i valori da inserire è, ovviamente, l’interpolazione lineare (che nel caso di un solo valore intermedio corrisponde alla media aritmetica). Chiaramente questo metodo non è comunque ottimo, perché potresti sempre generare punti che non ti servono in un segmento, ma sfruttando i valori di partenza forniti da Matlab, ti permette di non strafare.
Esempio di interpolazione lineare con un solo nodo intermedio:
*** Edit *** Ignora da qui in poi e passa al messaggio successivo
`
ni = 1; % numero di nodi intermedi tra due adiacenti
[r, k] = rlocus(FDT);
[r, k] = rlocus(FDT, interp1([k(1:end-1) realmax], 1:1/(ni+1):length(k)));`
Aumentando ni, puoi aumentare il numero di nodi intermedi. Nota che interp1 non accetta il valore Inf, che è sempre l’ultimo elemento di k quando calcolato automaticamente. Allora ho sostituito Inf con realmax, che per Matlab è il più grande numero reale. Così facendo, se provi a tracciare il grafico senza indicare manualmente gli assi, probabilmente vedrai qualcosa che non ti convince (ma tanto in pgfplots gli assi li hai indicati quindi non ci sono problemi). Volendo, puoi sostituire realmax con un numero più piccolo, ad esempio un multiplo del penultimo elemento di k: 10*k(end-1).
Ciao
P.S.: ma ci puoi dire direttamente la funzione di trasferimento?