Uso de Scilab La idea de este post es publicar algunos scripts para Scilab. Debido fundamentalmente a que es una excelente alternativa a Matlab. Desde mi punto de vista puede reemplazar a programas como Matlab, tanto para realizar cálculos, hasta para hacer simulaciones de sistemas dinámicos con Xcos (reemplazo para Simulink). De a poco voy a ir agregando algunos scripts para resolver algun problema en particular con Scilab. Breve explicación acerca de que es Scilab: Scilab es un lenguaje de programación de alto nivel para cálculo científico. Es interactivo de libre uso y disponible en múltiples sistemas operativos, desarrollado por INRIA (Institut National de Recherche en Informatique et Automatique) y la ENPC (École Nationale des Ponts et Chaussées) desde 1990 [1] [2]. Como en Matlab si no queres ver el resultado del comando agregas ";" al final de la línea. Para Escribir un comentario en el archivo .sce (Script de Scilab) se usa "//". "-->" indica el comando tipeado en el entorno. O sea no es un script. Para ejecutar un script se puede utilizar el comando exec desde la línea de comandos de Scilab. Por ejemplo: exec ('/home/leviatan/archivoaejecutar.sce'); Graficando una señal sinusoidal. x=[0:0.001:6*%pi]; //Genero el vector x. y=sin(x); //Vector y, definido como una función sinusoidal. //Leyendas en los ejes X, Y y Título para el gráfico. xlabel( " Tiempo " ) ;ylabel(" Tensión " ) ;title("Función sinusoidal" ) ; plot(x,y) Exportando una variable a un archivo de texto fprintfMat('medx',x/100); donde medx es el archivo donde se guardara el vector x/100. Lectura de archivos de texto y ploteo: clf //borra la ventana de gráficos. cd /home/usuario/medalambre2008113 //entra al directorio fd=mopen('11.txt','r'); //abre el archivo a leer //paso lo valores a la variable y cierro el archivo de texto. yalambre=mfscanf(-1,fd,"%f"; mclose(fd); scf(0) //elijo la ventana "0" para gráficar. n=size(yalambre); x=1:1:n(1); plot(x,(yalambre/255)*5,'+'); Analizando controlabilidad y observabilidad de un sistema -->a=[-2 7 0;0 -7 0;0 7 1]; //Definiendo el sistema -->b=[3.8;1;0];c=[2 7 1]; -->ce1=cont_mat(a,b) //Matriz controlabilidad ce1 = 3.8 - 0.6 - 47.8 1. - 7. 49. 0. 7. - 42. //Cálculo del determinante de la matriz controlabilidad -->dce1=det(ce1) dce1 = - 546. El determinante da diferente de cero y el rango es 3. El sistema es controlable. -->oe1=obsv_mat(a,c) //Matriz observabilidad oe1 = ! 2. 7. 1. ! ! - 4. - 28. 1. ! ! 8. 175. 1. ! -->det(oe1) ans = - 798. -->rank(oe1) ans = 3 El sistema es observable. Reubicación de los polos de lazo cerrado de un sistema. //Verificación de los polos del sistema: -->spec(a) ans = - 2. 1. - 7. Si quisieramos llevar los polos a -1+i;-1-i y -2. Téngase en cuenta que los número imaginarios se agregan con "%" -->p=[-2 -1+%i -1-%i] p = - 2. - 1. + i - 1. - i -->k=ppol(a,b,p) k = 4.798D-16 - 4. 0.7142857 -->spec(a-b*k) ans = - 2. - 1. + i - 1. - i Se puede verificar la reubicación de los polos de lazo cerrado con spec: -->spec(a-b*k) ans = - 2. - 1. + i - 1. - i Reubicación de polos empleando control óptimo (lqr) Dado el siguiente sistema se plantea reubicar los polos utilizando lqr en scilab, se puede consultar [3]: K1K2=1.52; A=[0 0;1 0];B=[K1K2;0];C=[0 1]; //Calculo controlabilidad y observabilidad. Cc=cont_mat(A,B); DCc=det(Cc); rCc=rank(Cc); mo=obsv_mat(A,C); rmo=rank(mo); Dmo=det(mo); R=1;Q=10*C'*C; //defino R=1 y Q dando más importancia la salida del sistema. [3] Big=sysdiag(Q,R); //Now we calculate C1 and D12 [w,wp]=fullrf(Big);C1=wp(:,1:2);D12=wp(:,3:$); P=syslin('c',A,B,C1,D12); //The plant (continuous-time) [k,X]=lqr(P); k1=k(1,1);k2=k(1,2); El valor de k es [ - 2.0398264 - 3.1622777 ]. Respuesta al escalón de un sistema en tiempo continuo: s=poly(0,'s'); t=0:0.005:5; //vector de tiempos para la simulación gp=10/(s^2+21*s+448); //Sistema sist=syslin('c',gp); yp=csim('step',t,sist); plot(t',yp); //Gráfico de la simulación Respuesta al escalón de un sistema en tiempo discreto Adc=Ad+Bd*Kdlqr; s1=syslin('d',Adc,Bd,Cd); T=0.001; td=0:T:10; u=ones(1,size(td,2)); plot2d([td'],[(dsimul(s1,u))']); Discretización de una función de transferencia -->T=0.1; //Tiempo de muestreo -->s=poly(0,'s'); -->sis=syslin('c',(1/(s*(s+1)))); -->sisd=ss2tf(dscr(tf2ss(sis),T)) //Discretización y paso de variable de estados a función transferencia sisd = 0.0046788 + 0.0048374z -------------------------- 2 0.9048374 - 1.9048374z + z Xcos Xcos es un simulador gráfico para sistemas dinamicos desarrollado por INRIA. Con Xcos el usuario puede crear diagramas en bloques para modelar y simular sistemas dinamicos hibridos. Xcos es utilizado para procesamiento de señales, sistemas de control, estudio de sistemas biologicos, etc. Nuevas extensiones permiten la generación de componentes usando lenguaje modelica. Video de utilización de Xcos. link: http://www.youtube.com/watch?v=nKSvAX9D1Vc Ball and beam empleando Scilab/Xcos: link: http://www.youtube.com/watch?v=cIMDuqKYiG0 Ejemplos de control utilizando los dsps de microchip(utilizando las placas flex) y Scicos: Péndulo invertido: link: http://www.youtube.com/watch?v=XQ_ThZHNe4c&NR=1 Bola sobre una superficie, también utilizando las placas flex y el diseño del control con Scicos: link: http://www.youtube.com/watch?v=FBy_e4yvqhQ Espero sea de utilidad el post. Links de interes: Instalación de Scilab 5.2.1 en Slackware Linux http://www.taringa.net/posts/linux/4736847/Instalación-de-Scilab-5_2_1-en-Slackware-12_1.html Wikipedia http://es.wikipedia.org/wiki/Scilab Sitio Web Scilab http://www.scilab.org Sitio Xcos http://www.xcos.org Sitio Scicos. http://www.scicos.org/ Libros recomendados [1] Modeling and simulation in Scilab/Scicos, Stephen La Vern Campbell, Jean-Philippe Chancelier, Ramine Nikoukhah - 2006 Libro de google: http://books.google.com.ar/books?id=F1zYYOrQzgQC&printsec=frontcover&dq=scilab&cd=1 [2] Engineering and scientific computing with Scilab, Claude Gomez - 1999 Libro de google: http://books.google.com.ar/books?id=mpkznLUemMoC&printsec=frontcover&dq=scilab&cd=2 [3] Ejemplo Tutorial: Diseño en espacio de estados para un péndulo invertido: http://iaci.unq.edu.ar/materias/control2/web/etc/InvPen/invSS.html
Usando Scilab/Xcos
Datos archivados del Taringa! original
0puntos
931visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
3visitas
0comentarios
Dar puntos: