Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tutorial Desc I Lab
Tutorial Desc I Lab
Qu es Scilab? Scilab fue desarrollado para aplicaciones de control de sistemas y procesamiento de seales. Es un formato de cdigo distribuido libremente. Scilab fue creado con tres partes distintas: un interpretador, libreras de funciones (procedimientos Scilab) y libreras de Fortran y C. no de los conceptos b!sicos de la sinta"is Scilab es su #abilidad de mane$ar matrices: con manipulaciones b!sicas como concatenacin, e"traccin o transposicin %ue son lle&adas a cabo inmediatamente tan bien como las operaciones b!sicas como suma y multiplicacin. Scilab tambi'n mane$a ob$etos m!s comple$os %ue matrices num'ricas. (or e$emplo, para aplicaciones de control se re%uiere manipular matrices racionales o polinomiales. Esto es #ec#o en Scilab manipulando listas y escribi'ndolas, lo %ue permite una representacin simblica natural de ob$etos matem!ticos complicados como funciones de transferencia. Scilab pro&ee una &ariedad de poderosas funciones para el an!lisis de sistemas no lineales. )a integracin de modelos din!micos e"plcitos a implcitos puede ser lle&ada a cabo num'ricamente. )a barra de #erramientas scicos permite una definicin gr!fica y simulacin de sistemas #bridos interconectados. E"isten facilidades de optimi*acin num'rica para la optimi*acin no lineal (incluyendo optimi*acin no diferencial), optimi*acin cuadr!tica y lineal. Scilab tiene una programacin ambiental abierta en donde la creacin de funciones y libreras de funciones est!n completamente en las manos del usuario. )as funciones son reconocidas como ob$etos de datos in Scilab y pueden ser manipulados o creados como otros ob$etos de informacin. (or e$emplo, funciones pueden ser definidas en Scilab y pasadas como una entrada o salida de argumentos de otras funciones. +dem!s, Scilab acepta caracteres %ue permiten la creacin de funciones en lnea. )as matrices de caracteres tambi'n son manupiladas como matrices ordinarias. Finalmente, Scilab es f!cilmente interfasado con Fortan o programas de C. Esto permite utili*ar pa%uetes estandari*ados y libreras en el ambiente de Scilab. )a filosofa general de Scilab es pro&eer el siguiente tipo de ambiente computacional:
,ener tipos de datos %ue sean &ariables y fle"ibles con una sinta"is natural y f!cil de usar. (ro&eer un set ra*onable de funciones %ue sir&a como base para una e"tensa &ariedad de c!lculos. ,ener un ambiente abierto de programacin en donde nue&as funciones puedan ser ad#eridas. El ob$eti&o de este tutorial es dar al usuario una introduccin a los comandos y estructuras b!sica de Scilab para %ue empiece a utili*arlo. (ara informacin o tutoriales en temas especiali*ados como control, e"isten &arios tutoriales y documentos accesibles por internet. Instalacin de Scilab en Wind !s" (uede obtenerse una &ersin lista para instalar, con interface gr!fica, de la siguiente direccin: #ttp:--....scilab.org-do.nload(ara /S 0indo.s, ba$a e instala la &ersin:
scilab-4.1.2 installer for binary version
El instalador te generar! un enlace con el smbolo de Scilab en tu escritorio, con el %ue podr!s e$ecutarlo. Int# duccin a la l$na de c %and s" +l e$ecutar Scilas, se abre una &entana con un indicador a la lnea de comandos, inicada por 1-->. + continuacin se presentar!n algunos comandos simples. ,odos los comandos son interpretados. Scilab #ace diferencia entre min2sculas y may2sculas. El car!cter 134 despu's de cada comando le indica a Scilab 56 desplegar el resultado en la lnea de comandos:
-->a=1; -->A=2; -->a+A ans = 3.
(ueden escribirse &arios comandos en una lnea, separados por 134. Sin embargo, es preferible por claridad escribir un comando por lnea. Se pueden escribir comentarios utili*ando la combinacin de caracteres 1--4:
-->//Dos comandos en la misma lnea -->c=[1 2];b=1.5 b = 1.5
(uede escribirse un commando en &arias lneas, utili*ando la combinacin de smbolos 174. Esto es 2til para frmulas muy largas. 5o est! permitido 1cortar4 el nombre de una &ariable o funcin en dos lneas.
-->//Un comando en diferentes lneas -->u=1000000*(a*sin(A))2+... --> 2000000*a*b*sin(A)*cos(A)+... --> 1000000*(b*cos(A))2 u = 81268.994
(odemos obtener una lista de las &ariable e"istentes con el comando 1.#o4:
-->who your variables are... u A %scicos_menu b a %scicos_short scicos_pal %scicos_help
%scicos_display_mode modelica_libs scicos_pal_libs %scicos_lhb_list %CmenuTypeOneVector %helps WSCI home SCIHOME CreateScilabHomeDir PWD TMPDIR MSDOS SCI guilib sparselib xdesslib percentlib utillib statslib alglib roblib soundlib metalib armalib mtlblib %F %T %inf COMPILER %gtk %gui %t %f %eps using polylib siglib intlib optlib elemlib autolib s2flib %nan $ %e
9231
767
6bser&a %ue obtenemos la lista de las &ariables pre&iamente definidas por nosotros, 1u a b +4 $unto con un ambiente inicial compuesto de diferentes libreras y algunas &ariables especificas 1permanentes4.
Ti& s de Dat s C nstantes &#ede'inidas" Scilab pro&ee como constantes predefinidas %i, %pi, %e, y %eps. )a constante %i representa 8 , %pi es 9: ;.8<8=>?@7, %e es l n2mero de Euler e:?.@8A?A8A... y %eps es una constante %ue representa la precisin de la m!%uina (%eps es el numero m!s grande para el %ue 8B%eps=1). %inf y %nan son para 1Cnfinito4 y 15oun5umero4 respecti&amente. 6tras constantes son %t y %f %ue son para 1&erdadero (trae)4 y 1falso (false)4 respecti&amente. Estas constantes est!n protegidas y no pueden ser borradas ni modificadas por el usuario. Escala#es ( )at#ices )a estructura fundamental en Scilab son las matrices, como se &er! a continuacin. (ero antes es necesario definir %ue es un escalar para Scilab. Escala#es" )os escalares son n2meros reales o comple$os. )os &alores de los escalares pueden ser asignados a nombres de &ariable escogidos por el usuario.
--> a=5+2*%i a = 5. + 2.i --> B=-2+%i;
--> b=4-3*%i b = 4. - 3.i --> a*b ans = 26. - 7.i -->a*B ans = - 12. + i
6bser&a %ue Scilab e&al2a inmediatamente lneas %ue terminan con espacio. )as instrucciones %ue terminan con punto y coma son e&aluadas pero no se despliegan en pantalla. )at#ices" )as matrices son la estructura fundamental en Scilab" na matri* es un arreglo rectangular donde cada elemento puede locali*arse con don ndices, el n2mero de rengln y el n2mero de columna. Conocer el mane$o de matrices es fundamental para el uso eficiente de Scilab. C#eacin de una %at#i*" )a forma m!s f!cil para crear una matri* es especificando directamente sus elementos. 6bser&a %ue los elementos de cada rengln pueden separarse con espacios o con comas, y para indicar un nue&o rengln se utili*a el punto y coma. )os elementos deben especificarse dentro de par'ntesis cuadrados.
DDE+ : F8 ? <3 = @ >G + : 8. =. ?. @. <. >.
DDEH : F?,@3=,8G H : ?. =. @. 8.
E+t#accin de #an, s de %at#ices" )a e"traccin de rangos de matrices o submatrices es una de la operaciones mas importantes para la programacin eficiente en Scilab. Ieamos algunos e$emplos:
DDE+ : F8.=,?,@,>.?,A.; DDE?.@,=.?,;,8,A DDE8,?,;,<,=G + : 8.= ?. @. >.? A.; ?.@ =.? ;. 8. A. 8. ?. ;. <. =.
Jefinimos una matri* de ; renglones por = columnas. Si %ueremos e"traer el elemento correspondiente al primer rengln, segunda columna, utili*amos:
DDE+(8,?) ans : ?.
6bser&a %ue para acceder a los elementos de una matri* se utili*an par'ntesis normales, no cuadradosK (ara e"traer todos los elementos de la primera columna utili*amos:
DDE+(:,8) ans : 8.= ?.@ 8.
6bser&a como el smbolo 1:4 se utili*a en la posicin correspondiente al ndice del rengln, y un uno en la posicin correspondiente al ndice de la columna. Este comando puede leerse como: Regresa los elementos correspondientes a todos los renglones, primera columna. 6bser&a como el resultado es una matri* de tres renglones por una columna, o ; L 8.
En este caso, el resultado es una matri* de un rengln por tres columnas, o 8 L ;, como es de esperarse. ,ambi'n podemos e"traer submatrices definidas por rangos de renglones y columnas, por e$emplo:
DDE+(?:;,8:?) ans : ?.@ =.? 8. ?.
Este comando podemos leerlo como: 1regresa la submatri* formada por los elementos correspondientes desde el segundo rengln #asta el tercer rengln, y desde la primera columna #asta la tercera columna. - #%acin de %at#ices a &a#ti# de t#as %at#ices" (odemos 1componer4 matrices a partir de otras matrices, mientras las dimensiones sean congruentes. (or e$emplo:
DDE+ : F 8 ? ;3 = @ >3 ? A @G + : 8. =. ?. ?. @. A. ;. >. @.
6bser&a %ue + y H tienen %ue tener el mismo n2mero de renglones para poder #acer esta composicin. Como e$ercicio, e"plica como se forma la siguiente matri* compuesta:
DDEJ : FC3 F+(;,:) H(?,8)GG J : 8. =. ?. ?. ?. @. A. A. ;. >. @. @. 8. =. >. =.
)at#ices es&eciales" Scilab tiene &arios comandos para generar algunas matrices especiales de uso com2n. 6bser&a los siguientes e$emplos: Meneracin de una matri* con todos sus elementos igual a uno:
DDEC : ones(<,;) C : 8. 8. 8. 8. 8. 8. 8. 8. 8. 8. 8. 8.
Meneracin de una matri* cuadrada con unos en su diagonal principal y ceros fuera de ella:
-->E=eye(5,5) E = 1. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 1.
Meneracin de una matri* cuadrada con los elementos de la diagonal especificados, y ceros fuera de la diagonal principal:
DDEJ : diag( F? 8 N D8 D?G ) J : ?. N. N. N. N. N. 8. N. N. N. N. N. N. N. N. N. N. D 8. N. N. N. N. N. N. O ?.
Meneracin de una matri* cuadrada con los elementos en la diagonal deba$o de la diagonal principal especificados:
DDE) : diag( F8 ? ; <G, D8 ) ) : N. 8. N. N. N. N. N. ?. N. N. N. N. N. ;. N. N. N. N. N. <. N. N. N. N. N.
DDEH : +R H : 8. ;. A. =. ?. @.
)ulti&licacin & # un escala#" na matri* puede multiplicarse por un escalar utili*ando el smbolo 1S4. ,odos los elementos de la matri* se multiplican por el escalar, por e$emplo:
DDE H : F?, =, >3 ;, @, <G H : ?. ;. =. @. >. <.
Su%a ( #esta de %at#ices" (ara %ue dos matrices puedan sumarse o restarse, tienen %ue ser del mismo orden. )a suma y resta se #acen elemento a elemento correspondiente.
DDE+ : F?, ;3 =,83 @,>G + : ?. ;.
=. @.
8. >.
)ulti&licacin de %at#ices" )a multiplicacin de matrices se representa con el smbolo 1S4. Pecuerda %ue para %ue dos matrices puedan multiplicarse, deben ser conformes (el n2mero de columnas de la primera matri* tiene %ue ser igual al n2mero de columnas de la segunda matri*), y %ue la multiplicacin de matrices no es conmutati&a. El resultado tiene el mismo n2mero de renglones %ue la primer matri*, y el mismo n2mero de renglones %ue la segunda.
DEF : F?, =, >3 8, @, ?G F : ?. 8. =. @. >. ?.
DDEM : FN, =3 8N ?>3 @ ?8G M : N. =. 8N. ?>. @. ?8. DDET:FSM T : 88;. ;<<. A<. ?=N.
)ulti&licacin de %at#ices ele%ent a ele%ent " Esta es una operacin %ue 56 ES,+ JEFC5CJ+ dentro del !lgebra matricial, pero %ue es muy 2til en la solucin de algunos tipos de problemas con matrices. Se define en Scilab como la multiplicacin de los elementos correspondientes de dos matrices, y se representa con la secuencia de smbolos punto y asterisco: 1.S4. 6bser&a %ue las matrices tienen %ue ser del mismo orden, y %ue ob&iamente es conmutati&a.
DDE+ : F8 = ;3 ? @ A3 ; = <3 N ? >G + : 8. ?. ;. N. =. @. =. ?. ;. A. <. >.
0ect #es" n caso especial muy importante de matrices en Scilab son los &ectores, %ue se mane$an como una matri* de un solo rengln (&ector rengln) o de una sola columna (&ector columna). )os elementos de un &ector pueden accederse utili*ando solo un ndice. 6bser&a los siguientes e$emplos:
DDEL : F8 = @ >GR -- Iector columna L : 8. =. @. >. DDEL(;) ans : @. DDEU : F? < Q AG -- Iector rengln U : ?. <. Q. A.
DDEU(<) ans : A.
0ect #es c n c %& nentes e1uies&aciad s" )os &ectores e%uiespaciados se utili*an frecuentemente para e&aluar funciones, por lo %ue Scilab pro&ee una forma muy con&eniente de formarlos. (or e$emplo, para formar un &ector con elementos del N al 8N en inter&alos de 8 podemos usar:
Si %ueremos %ue es espaciamiento entre los elementos sea de N.=, introducimos el comando:
L : column 8 to ?N N. >. N.= >.= 8. 8.= ?. ?.= ;. ;.= <. <.= =. =.= Q. Q.= @. @.= A. A.=
column ?8 8N.
El siguiente comando genera un &ector columna de ? a ; con espaciamientos de :N.?: DDEU:(?:N.?:;)R U : ?. ?.? ?.< ?.Q ?.A ;.
-unci nes en Scilab )as funciones son otro de los componentes fundamentales de Scilab. E"isten cientos de funciones predefinidas, y el usuario puede definir sus propias funciones f!cilmente. (or e$emplo, algunas de las mas utili*adas son: log(), sin(), cos(), tan(), asin, acos, atan, e"p(), abs(), s%rt(). +lgo muy importante %ue debes recordar es %ue la mayora de las funciones matem!ticas en Scilab aplican tanto a n2mero reales como comple$os. E$emplos:
DDEsin(N.=) ans : N.<@><?== DDEc:s%rt(D>) c : ;.i DDEe"p(D;.?) ans : N.N<N@Q?? DDElog(8N) ans : ?.;N?=A=8
6bser&a %ue en el 2ltimo e$emplo, la funcin 1log()4 obtiene el logaritmo natural de un n2mero.
(uede encontrarse informacin sobre lo %ue #ace una funcin con el comando #elp, por e$emplo:
DDE#elp log
Calling Sequence
y=log(x)
Parameters
x
Description
log(x) logm .
Examples
exp(log([1,%i,-1,-%i]))
See Also
exp
, logm , ieee ,
A&licacin de 'unci nes a l s ele%ent s de una %at#i*" na caracterstica distinti&a de pa%uetes como Scilab, /atlab, y 6cta&e, es %ue es muy f!cil aplicar una funcin escalar a todos los elementos de una matri*. Hasta con pasar la matri* como argumento a la funcin. Esto se &e claramente en el siguiente e$emplo:
DDE+ : F > 8Q3 ?= ;QG + : >. 8Q. ?=. ;Q. DDEH : s%rt(+) H : ;. =. <. Q.
6bser&a como se aplic la funcin 1s%rt()4, ra* cuadrada, a cada elemento de la matri* +. -unci nes es&eciales &a#a %at#ices. E"isten &arias funciones definidas especialmente para matrices. +lgunas de las mas 2tiles son: Dete#%inante de una %at#i*" El determinante de una matri* cuadrada se obtiene utili*ando la funcin in&.
DDE+ : F8 @ >3 ? = <3 ; ? AG + : 8. ?. ;. @. =. ?. >. <. A.
23%e# de c ndicin de una %at#i*" El n2mero de condicin de una matri* es un escalar positi&o. Si el n2mero es muy cercano a cero, la matri* es mal condicionada, y el c!lculo de la in&ersa puede ser errneo por errores de redondeo. El n2mero de condicin es una medida mas confiable %ue el determinante para e&aluar la importancia de lo errores de redeondeo. Se obtiene con la funcin 1cond()4. (or e$emplo, para la matri* anterior:
DDEcond(+) ans : >.8;A;==?
)a matri* est! bien condicionada y el c!lculo de la in&ersa es confiable. In4e#sa de una %at#i*" )a in&ersa de una matri* cuadrada (si e"iste y la matri* es bien condicionada) pude obtenerse con la funcin 1in&()4. (ara la matri* del e$emplo anterior:
DDEin&(+) ans : D N.;;QA<?8 N.< N.8@A><@< N.N<?8N=; N.? D N.8<@;QA< N.88=@A>= D N.? N.N><@;QA
En Scilab, una funcin pude regresar una matri* o un &ector. ,mbi'n pude regresar mas de un resultado. n e$emplo muy 2til es la funcin 1si*e()4, %ue nos sir&e para determinar el orden de una matri*. 6bser&a los siguientes e$emplos:
H : 8. ?. ;. =. @. =. ?. ;. >. <. A. ?.
6bser&a %ue si utili*amos nuesta funcin con una matri*, Wla aplica a cada uno de los elementos de 'staK
Iamos a anali*ar uno por uno los elementos de nuestra funcin: function r = cubica(x) Este es el encabe*ado de nuestra funcin. )a palabra reser&ada 1function indica %ue se esta declarando una funcin. )a &airable r4 es representa la salida o resultado de la funcn, en este caso tenemos un escalar. El nombre puede ser cual%uier nombre &!lido. El signo igual se utili*a para indicar la asignacin de nuestra funcin. )a palabra 1cubica4 es el nombre con el cual &amos a llamar nuestra funcin. (uede ser cual%uier nombre &!lido. Elpar!metro 1x4 representa el argumento de nuestra funcin. na funcin puede tener mas de un argumento. // Funcion para calcular la raiz cubica Esta lnea es un comentario. Es importante incluir comentarios para facilitar el uso de la funcin. +dem!s este comentario aparecer! autom!ticamente en la documentacin de la funcin si se busca con el comando4#elp cubica4. 5o deben incluirse caracteres especiales en el comentario, como acentos, ya %ue la documentacin autom!tica no los permite. r = exp(1. /!. " log(x))# Esta lnea asigna a la &ariable de salida el &alor de la ra* c2bica de lo %ue se le pase a la funcin como argumento. Es necesario %ue en alguna parte de nuesta funcin se le asigne &alor a la &ariable o &ariables de salida. endfunction Esta lnea seala el final de la declaracin de la funcin.
Enseguida &amos a declarar una funcin %ue reciba como par!metro el radio de un crculo, y regrese el &alor del permetro y del !rea. function $p,a% = circulo(r) // Regresa el perimetro del circulo de radio r en p, // & el area en a. p = ' " (pi " r# a = (pi " r " r# endfunction IMPORTANTE Es muy importante dejar al menos una lnea en blanco al final del archi o! ya "ue el interpretador de #cilab lo re"uiere$ Jespu's de cargar la funcin en Scilab, podemos utili*arla:
DDEFperimetro,areaG : circulo(;) area : ?A.?@<;;< perimetro : 8A.A<>==Q
6bser&a %ue si llamamos la funcin sola, regresa el &alor de salida de la 2ltima &ariable %ue se declar en el encabe*ado:
DDEcirculo(;) ans : 8A.A<>==Q
+#ora &amos a modificar la funcin crculo para %ue entregue el permetro y el !rea como componentes de un &ector: function ) = circulo(r) // Regresa el perimetro & el area del circulo de radio r. // )(1) = perimetro. )(') = area. )(1) = ' " (pi " r# )(') = (pi " r " r# endfunction
)t d s 2u%#ic s
Scilab incluye funciones preDprogramadas para di&ersos m'todos num'ricos. En seguida presentamos algunos de los mas utili*ados. S lucin de siste%as de ecuaci nes lineales" Pesol&er sistemas de ecuaciones lineales es muy sencillo con Scilab. )a me$or forma de mostrarlo es con un e$emplo: Pesol&er el sistema:
= x8 ? x ? = x; + ? x < = x= = 8? ? x8 + 8? x ? = x; + ? x < = x= = ? < x8 + x ? = x; + ?? x < = x= = 8 ; x8 + ? x ? = x; + ? x < A x= = = ; x8 + ? x ? + 8= x; + ; x < ?8x= = =
;. ;.
?. D =. ?. D A. ?. 8=. ;. D ?8.
)a solucin se obtiene como pre multiplicando el &ector de t'rminos independientes por la in&ersa de la matri* de coeficientes:
DDEL : in&(+) S b L : ?.<>A=QN@ D N.<Q<=><8 N.N=<N@@> D N.<==;A?A N.N<A8Q@;
Comprobacin:
DDE+SL ans : 8?. D ?. D 8. =. =.
6tra forma (mas eficiente para sistemas grandes) es utili*ando el comando 1X4:
S lucin nu%#ica de inte,#ales de'inidas" (ara e&aluar una integra definida num'ricamente e"isten &arias opciones. Iamos a utili*ar la funcin predefinida 1intg()4. Empe*amos utili*ando el comando #elp para saber mas detalles de esta funcin: intg D definite integral Calling Se%uence F&,errG:intg(a,b,f F,ea F,erG) (arameters a,b : real numbers f : e"ternal (function or list or string) ea, er : real numbers ea : absolute error re%uired on t#e result. Jefault &alue: 8.dD8< er : relati&e error re%uired on t#e result. Jefault &alue: 8.dDA err : estimated absolute error on t#e result. )os par!metos entre par'ntesis cuadrados son opcionales.
Iamos a &er como se aplicara esta funcin si se desea e&aluar num'ricamente la siguiente integral:
?
x sen(;N x ) dx x ? 8( ) ?
El &alor de la integral fue asignado a 1&4, y a la &ariable 1error4 se le asign el estimado del error del resultado. S lucin nu%#ica de ecuaci nes n lineales" En Silab podemos utili*ar la funcin [fsol&e()\ para encontrar las races reales de una ecuacin no lineal, o de un sistema de ecuaciones no lineales. Ieamos como se utili*a con &arios e$emplos simples: Jeseamos encontrar una ra* real de la ecuacin:
x? ex = N
(rimero programamos la funcin usando el editor de Scilab y la cargamos: function y = f(x) y = x^2 - exp(x^2); endfunction
RECUERDA DEJAR AL MENOS UNA LINEA EN BLANCO AL FINAL DEL ARCHIVO!
6bser&a %ue fsol&e re%uiere una apro"imacin inicial de la ra*, en este caso utili*amos 8.N. +#ora utli*aremos la funcin [fsol&e\ para encontrar una ra* del siguiente sistema de ecuciones no lineales:
x? &? + = = N A 8Q
& ? =sen( x ) = N
(rimero programamos la funcin en el editor de Scilab, utili*ando un &ector para los par!metros de entrada, y un &ector de salida para las funciones e&aluadas: function F = Fx&(*) x = *(1)# & = *(')# F(1) = x"x/+ , &"&/1- ./# F(') = &"& . /"sin(x)# endfunction +#ora podemos pasar la funcin como par!metro a fsol&e() :
6bser&a como tu&imos %ue pasar un &ector con dos condiciones iniciales. El resultado es un &ector, donde el primer elemento correspode al &alor de ", y el segundo al &alor a y, respetando el orden en %ue los asignamos al declarar la funcin. )a funcin 1fsol&e( )4 tiene &arias opciones, las cuales puedes e"plorar utili*ando el comando #elp.