scilab.presentacion.060405
-
Upload
marvin-roque -
Category
Documents
-
view
96 -
download
0
Transcript of scilab.presentacion.060405
Scilab/Scicos una alternativa a
Matlab/Simulink
Prof. Víctor M. AlfaroDepartamento de AutomáticaEscuela de Ingeniería EléctricaUniversidad de Costa Rica Abril de 2006
Programas CACSD y de simulación dinámica
• Scilab/ScicosTM
• 1990• INRIA, ENPC• Consorcio Scilab (2003)• Software de distribución
gratuita INRIA, ENPC• http://scilab.org• Windows (9x/XP),
GNU/Linux, Mac OS X, Solaris
• Versión 4.0 (Febrero 2006)
• Matlab/Simulink®
• 1988• The Mathworks, Inc.• Comercial (varios miles
de US$, versión para estudiantes > US$100)
• http://www.mathworks.com• Windows 2000/XP,
Linux, Mac OS X• Release 2006a (Matlab
7.2/Simulink 6.4)
Scilab/Scicos• Scilab
• Lenguage de programación de alto nivel
• Intérprete• Fundamentado en el
manejo de matrices• Herramientas
• Álgebra lineal• Control clásico• Control robusto• Modelos ARMA• Manejo de polinomios• Comunicaciones
• Gráficos 2D y 3D• Procesamiento de
señales• Lógica difusa• Identificación• Optimización no lineal• Otras ...
• Scicos• Simulación de sistemas
dinámicos híbridos• Interconexión de
bloques• Paletas de bloques
(entrada/salida, lineal/no lineal, ...
Scilabinterfaz del usuario
Scilabopciones del menú
Scilabayuda en línea
Scilabayuda en línea
Scilabcaracterísticas de programación, ...
Nombres de variables (24 caracteres significativos)
Sensible a las mayúsculas, a, A, var, VAR, Var, VAr
Variables predefinidas: %i, %e, %pi, %t, %f
Objeto básico: matriz de dos dimensiones con elementos de punto flotante, precisión doble
Matrices entre [ ] , separador de columnas ; separador de filas ‘ traspuesta
//comentarios Operadores lógicos: ==,
>, < , >=, <=, ~= Lista de comandos: *.sce Ejecución de un “script”
--> exec(‘achivo.sce’); Funciones: *.sci “carga” de biblioteca de
funciones:getf(‘bl_fun.sci’)
los gráficos son sobrepuestos en la ventana activa
Scilabvariables, vectores, matrices, polinomios, ...
-->help()-->clear-->a=2;-->b=4;-->c=a*b c = 8.-->d=[1,2,3];-->e=[4;5;6];-->d*e ans = 32.-->e*d ans =! 4. 8. 12. !! 5. 10. 15. !! 6. 12. 18. !
-->d d =! 1. 2. 3. !-->d' ans =! 1. !! 2. !! 3. !-->x=poly(0,'x');-->p=x^3+5*x^2+10*x+1;-->roots(p) ans =! - 0.1054418 !! - 2.4472791 + 1.8694208i !! - 2.4472791 - 1.8694208i !
Scilabpolinomios, funciones de transferencia, ...
-->s=poly(0,'s');-->g1=2/((s+1)*(5*s+1));-->g2=5*(2*s+1)/(3*s+1)^3;-->g1*g2 ans =
10 + 20s ---------------------------------- 2 3 4 5 1 + 15s + 86s + 234s + 297s + 135s
-->syslin('c',g1*g2/(1+g1*g2)) ans = 0.0740741 + 0.1481481s ---------------------------------------------------------- 2 3 4 5 0.0814815 + 0.2592593s + 0.6370370s + 1.7333333s + 2.2s + s
ScilabSciPad (editor)
--> exec('F:\scilab.test01.sce'); ans = - 2. 4.i - 4.i Scilab 4.0 Scicos Scilab 4.0/Scicos-->
Scilabestructuras de control, flujo del programa
if <expre1> <inst1>elseif <expre2> <inst2>else <inst3>end
for <expre> <inst>end
while <expre> <inst>end
select varcase <expre1> <inst1>case <expre2> <inst2>else <inst3>end
Scilabfunciones y cadenas de texto
//Funciones en Scilabclear//definición de la funciónfunction xfac = fac(x) if x <= 1 xfac=1 else xfac=x*fac(x-1) endendfunction//n=input('Introduzca un número');nf=fac(n);disp('El factorial de ' + string(n) + '
es ' + string(nf))
--> exec('scilab.test02.sce');Introduzca un número--> 5
El factorial de 5 es 120
-->
Scilabmodelado, simulación (ecuac. diferenciales)
inLcL
Lc
VtiRtVdttdiL
tidttdVC
+−−=
=
)()()(
)()(
//Solución de ecuaciones diferen.cleart=0:0.05:8;//definición del modelofunction px = modelo(t,x) R=1.5,L=0.25,C=0.5,u=10 px(1)=1/C*x(2) px(2)=-1/L*x(1)-R/L*x(2)+1/L*uendfunction//llamado a la función odey=ode('rk',[0;0],0,t,modelo);plot2d(t',y'),xgrid(17)xtitle('Circuito RLC','tiempo
(segundos)','Variables de estado')
R
L
CVin
iL
Vc
inLc VuixVx === ,, 21
Scilabgráficos de dos y tres dimensiones
• Ventanas• xset(‘window’,1)
• Sub-ventanas• subplot(2,3,2)
• Gráficos 2D• plot2d(t,y)• plot2d(x,y)
• Gráficos 3D• plot3d(x,y,z)
• Gráficos siempre sobre impuestos 0 1 2 3 4 5 6 7 8
0
1
2
3
4
5
6
7
8
9
10
Circuito RLC
tiempo (segundos)
Varia
bles d
e es
tado
Scilabgráficos 2D
//Gráficos en Scilabclears=poly(0,'s');cv=[1,2,3,5,6];t=0:0.05:5;w=4;z=[0.1,0.2,0.4,0.6,0.8];//función de transferenciafor i=1:5 g=2/(s^2+2*z(i)*w*s+w^2); gs=syslin('c',g); y=csim('step',t,gs); plot2d(t,y,style=cv(i))endxgrid(17)xtitle('Repuesta sistema
subamortiguado','tiempo','y(t)')legends(['z = 0.1','z = 0.2','z =
0.4','z = 0.6','z = 0.8'],[1,2,3,5,6],opt=4) 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
0.00
0.05
0.10
0.15
0.20
0.25
Repuesta sistema subamortuiguado
tiempo
y(t)
z = 0.1
z = 0.2
z = 0.4
z = 0.6
z = 0.8
Scilabsimulación (sistemas lineales)
//Simulación en Scilabcleart=0:0.05:5;s=poly(0,'s');z=0.25;w=4;//función de transferenciag=2/(s^2+2*z*w*s+w^2);gs=syslin('c',g);//respuesta al escalónsubplot(2,1,1)y=csim('step',t,gs);plot2d(t,y,style=2),xgrid(17)xtitle('Respuesta a un escalón','',
'y1(t)')//respuesta al impulsosubplot(2,1,2)y=csim('impulse',t,gs);plot2d(t,y,style=5),xgrid(17)xtitle('Respuesta al impulso','tiempo
(seg.)','yo(t)')
0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.00.00
0.02
0.04
0.06
0.08
0.10
0.12
0.14
0.16
0.18
0.20
Respuesta a un escalón
y1(t)
0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
-0.2
-0.1
0.0
0.1
0.2
0.3
0.4
Respuesta al impulso
tiempo (seg.)
yo(t)
Scilabgráficos 3D
x=linspace(-%pi,%pi,40);y=x;
plot3d(x,y,sinh(x')*cos(y))
t=linspace(-20*%pi, 20*%pi, 2000);
param3d1(sin(t),t.*cos(t)/max(t),t/100)
-15
-10
-5
0
5
10
15
Z
-4-3
-2-1
01
23
4 X
-4-3
-2-1
01
23
4Y
-0.8
-0.4
0.0
0.4
0.8
Z
-1.0-0.8
-0.6-0.4
-0.20.0
0.20.4
0.60.8
1.0
X
-1.0-0.8
-0.6-0.4
-0.20.0
0.20.4
0.60.8
1.0
Y
Scilabsistemas de control
• Raíces de polinomios• Funciones de
transferencia• Diagramas de
bloques• Modelos en variables
de estado (ABCD)• Conversión de
sistemas (FT a VE y viceversa)
• Gráficos• Respuesta al escalón
y al impulso (csim)• Diagrama de Bode• Diagrama de Nyquist • Gráfico de Evans
(lugar de las raíces)• Diagrama de Black
-cartilla de Nichols
Scilabgráficos para control
Evans root locus
Real axis
Imag. axis
-25 -20 -15 -10 -5 0 5-15
-10
-5
0
5
10
15open loop poles
asymptotic directions
Magnitude
Hz
db
-210
-110
010
110
210
-140-120-100-80-60-40-200
20
Phase
Hz
degrees
-210
-110
010
110
210
-300-250-200-150-100-500
-1000
-0.453
-0.304 -0.203
-0.123
-0.053
0.011
0.075
0.1440.336
0.507
Nyquist plot
Re(h(2i*pi*f))
Im(h(2i*pi*f))
-0.5 0.0 0.5 1.0 1.5 2.0 2.5-1.5
-1.0
-0.5
0.0
0.5
1.0
1.5
0.01 0.21 0.45
0.74 1.2
1.7 2.2
2.9 3.7
5.2
8.2
14
22
38
70
1e+002
2.3db curve
-12-8-6-5-4-3-2-1.4-1-0.5
0.250.50.711.422.33456812
amplitude and phase contours of y/(1+y)
phase(y) - degree
magnitude(y) - db
-360 -288 -216 -144 -72 0-50.0
-38.8
-27.5
-16.3
-5.0
6.3
17.5
28.8
40.0
Scilaboptimización (optim, leastsq, lsqrsolve)
//Mínimo de una funciónclear//función a optimizar (fx)//y su derivada (gx)function [fx,gx,vest]=fcost(x,vest) fx=x.^2-8*x+6 gx=2*x-8endfunction//estimación inicialvin=1;//llamado a la rutina de
optimización[vmin,xopt]=optim(fcost,vin);disp(‘El valor mínimo de la función
es'),disp(vmin)disp('y ocurre en x ='),disp(xopt)
--> exec(‘scilab.test08.sce');
El valor mínimo de la función es
- 10.
y ocurre en x =
4.
-->
Scilabajuste de curvas (datafit)
clear//conjunto de pares de datosv=[1,2,3,4,5;1,1.25,3.25,3.75,4.25];...function z=fun2(p,v) z=v(2)-p(1)-p(2)*v(1)-p(3)*v(1).^2-
p(4)*v(1).^3endfunctionpo1=[1 1 1]';po2=[1 1 1 1]';[p1,err1]=datafit(fun1,v,po1)[p2,err2]=datafit(fun2,v,po2)...y1=p1(1)+p1(2)*x+p1(3)*x.^2;y2=p2(1)+p2(2)*x+p2(3)*x.^2+p2(4)*x.^3
;...Parámetros del polinomio de 3er orden[1.9501086,- 2.1132493,1.2411307,- 0.1458400]
0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
0
1
2
3
4
5
polinomio orden 2
polinomio orden 3
Scilabinterfaz gráfica de usuario (GUI)
//interfaz gráficadestinos=['Alajuela','Heredia','Limón','
Puntarenas','Volcán Poás'];anuncio=['TRANSPORTES PURA
VIDA','Seleccione su destino'];resp=x_choose(destinos,anuncio);if resp > 0
disp('Buen viaje a '+ destinos(resp))
elsedisp('No seleccionó su destino')
end
-->exec('scilab.test11.sce');
Buen viaje a Limón
Scicosinterfaz del usuario
Scicospaletas de bloques
Scicosdiagramas de bloques
Comparación de la sintaxisScilab Matlab
//Programa en Scilabcleart=0:0.05:5;s=poly(0,'s');z=0.25;w=4;//función de transferenciag=32/(s^2+2*z*w*s+w^2);gs=syslin('c',g);//respuesta al escalónsubplot(2,1,1)y1=csim('step',t,gs);plot(t,y1,'b'),xgrid(17)xtitle('Respuesta a un escalón','','y1(t)')////respueta al impulsosubplot(2,1,2)yo=csim('impulse',t,gs);plot(t,yo,'r'),xgrid(17)xtitle('Respuesta al impulso','tiempo
(seg.)','yo(t)')
%Programa en Matlabcleart=0:0.05:5;s=tf('s');z=0.25;w=4;%%función de transferenciags=32/(s^2+2*z*w*s+w^2);%respuesta al escalónsubplot(2,1,1)y1=step(gs,t);plot(t,y1,'b'),grid ontitle('Respuesta a un
escalón'),ylabel('y1(t)')%respueta al impulsosubplot(2,1,2)yo=impulse(gs,t);plot(t,yo,'r'),grid ontitle('Respuesta al
impulso'),xlabel('tiempo (seg.)'),ylabel('yo(t)')
Comparación de la respuestaScilab Matlab
0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.00.0
0.5
1.0
1.5
2.0
2.5
3.0
Respuesta a un escalón
y1(t)
0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0-3
-2
-1
0
1
2
3
4
5
6
Respuesta al impulso
tiempo (seg.)
yo(t)
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 50
0.5
1
1.5
2
2.5
3Respuesta a un escalón
y1(t)
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5-4
-2
0
2
4
6Respuesta al impulso
tiempo (seg.)
yo(t)
Scilabinformación en Internet
Scilab: http://www.scilab.org Scicos: http://www.scicos.org EIE:
http://www.eie.ucr.ac.cr/software/scilab/ Scilab à l’Enpc (en frances):
http://cermics.enpc.fr/scilab_new/site/ Libro: Campbell, S.L., J-P. Chancellier y R.
Nikoukhah - Modeling and Simulation in Scilab/Scicos, Springer(2006) (Ver 3.1)