Existen una serie de comandos, que, aun no siendo específicos de la
Ingeniería de Control, se utilizan constantemente en este área, y por
ello los estudiamos en este apartado. Scilab realiza por
defecto las simplificaciones (cancelaciones polo-cero) que se puedan
producir al realizar operaciones con FTs, sin embargo, se puede
desactivar esta opción con el comando simp_mode(%f) si así se desea
(simp_mode(%t) para reactivar). Con los comandos simp, trfmod y clean
se pueden realizar algunas reducciones y simplificaciones de FTs:
En un primer lugar se pueden estudiar una serie de comandos que
permiten la definición y manipulado de FTs:
-->
s=poly(0,’s’);
// definición de la variable
s
--> g1=syslin(’c’,num,den); // definición de una FT a partir de los polinomios numerador y denominador
--> g=syslin(’c’,(s+1)/(s^2+s+1)) // definición de una FT de forma directa
g =
1 + s
----------
1 + s + s2
--> p=roots(denom(g)) // polos de la FT g
p =
¡ -0.5 + 0.866025i !
¡ -0.5 - 0.866025i !
--> p=roots(g.den); // lo mismo que la anterior
--> z=roots(numer(g)); // ceros de la FT g (también z=roots(g.num);)
--> plzr(g) // dibuja el mapa de polos y ceros de g
--> gan=horner(g,0) // ganancia de la FT g (ganancia a baja frecuencia)
Scilab realiza por defecto las simplificaciones (cancelaciones polo-cero) que se puedan producir al realizar operaciones con FTs, sin embargo, se puede desactivar esta opción con el comando simp_mode(%f) si así se desea (simp_mode(%t) para reactivar). Con los comandos simp, trfmod y clean se pueden realizar algunas reducciones y simplificaciones de FTs:
--> simp_mode(%f) // desactiva la cancelación por defecto
--> g1=g/(s+1)
g1 =
1 + s
-------------------
1 + 2s + 2s2 + s3
g1red =
1
-----------
1 + s +s2
--> simp_mode(%t) // activa la cancelación por defecto
--> g1red2=simp(g1); // realiza cancelación de parejas polo-cero existentes
-->
clean(g)
// realiza un redondeo a cero de valores pequeños
Mediante los comandos csim(u,t,g) y plot2d(t,y) se pueden obtener las respuestas temporales ante entrada escalón unitario o impulso de sistemas representados mediante sus FTs:
--> t=0:0.05:5; // definición del vector de tiempo
--> y=csim(’step’,t,g); // vector de salida en LA ante entrada escalón
--> plot2d(t,y)
--> plot(t,y) // equivalente al anterior en versión 4.1.2 y posteriores
--> h=2;gla=g*h; // definición de la realimentación y de la FTLA
--> glc=g/.h // obtención de la FTLC
glc =
1 + s
-----------
3 + 3s + s2
--> ylc=csim(’step’,t,glc); // vector de salida en LC ante entrada escalón
// creación de la ventana 1 y representación de la salida en LC
--> xset(’window’,1); plot2d(t,ylc)
--> f1=figure();scf(f1);plot(t,ylc) //equivalente al anterior en versión 4.1.2 y posteriores
// salida en LA ante entrada impulso
--> y=csim(’impulse’,t,g); plot2d(t,y)
--> y=csim(’impulse’,t,g);
plot(t,y)
//equivalente al anterior en
versión 4.1.2 y posteriores
Y si se desea calcular la respuesta del mismo sistema ante una entrada definida por el usuario, será necesario primero definirla. Sea, por ejemplo, un pulso de altura 100 unidades y anchura 0.01 (desde 0 seg. hasta 0.01 seg.):
--> t1=0:0.001:0.01; u1=100*ones(t1);
--> t2=0.011:0.001:5; u2=zeros(t2);
--> t=[t1 t2]; u=[u1 u2];
--> y=csim(u,t,g); plot2d(t,y)
--> y=csim(u,t,g); plot(t,y) //equivalente al anterior en versión 4.1.2 y posteriores
Si se desea obtener las coordenadas de un punto de una gráfica se
puede utilizar la función locate:
--> x=locate(2) // se almacena en x las coordenadas de los dos puntos que se pinchan con el ratón (en la 1ª fila los valores de la abcisa y en la 2ª de la ordenada)
Para obtener los valores de la ganancia que hacen críticamente estable al sistema en lazo cerrado se usa la función kpure:
--> k=kpure(gla)
Para la obtención del LR se dispone del comando evans, y
para el cálculo del valor de la ganancia de la cadena directa K para la
cual un punto del LR es polo del sistema en LC se puede realizar las
operaciones que se detallan a continuación:
--> xset(’window’,2); evans(gla,10) // creación de la ventana 2, y LR de gla (Kmáx=10)
--> f2=figure();scf(f2); evans(gla,10) //equivalente al anterior en versión 4.1.2 y posteriores
--> polo=[1 %i]*locate(1);k=-1/real(horner(gla,polo)) // obtención del punto (polo) del LR pinchado con el ratón y c álculo del valor de la ganancia K para la cual ese punto es polo en LC (pertenece al LR)