i

Introducci´ on a SCILAB
H´ ector Manuel Mora Escobar
Departamento de Matem´ aticas Universidad Nacional de Colombia Bogot´ a mayo del 2005

´ INDICE GENERAL
´ 1 INTRODUCCION 2 GENERALIDADES 2.1 Primeros pasos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Operaciones y funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Otros temas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4 Complejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3 3 6 9 9

2.5 Polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.6 Lista de algunas herramientas . . . . . . . . . . . . . . . . . . . . . . . . 11 3 VECTORES Y MATRICES 13

3.1 Creaci´ on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.2 Notaci´ on y operaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.3 Funciones elementales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.4 Soluci´ on de sistemas de ecuaciones . . . . . . . . . . . . . . . . . . . . . 20 3.5 Otras funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4 PROGRAMAS 22

4.1 Guiones (scripts) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4.2 Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 4.3 Carpeta actual o por defecto . . . . . . . . . . . . . . . . . . . . . . . . . 26 4.4 Comparaciones y operadores l´ ogicos . . . . . . . . . . . . . . . . . . . . . 27 ´ 4.5 Ordenes y control de flujo . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.5.1 if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 ii

´ INDICE GENERAL 4.5.2 4.5.3 4.5.4 4.5.5 4.6.1 4.6.2 4.6.3 4.6.4

iii

for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Otras o ´rdenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 C´ alculo num´ erico del gradiente . . . . . . . . . . . . . . . . . . . 33 Matriz escalonada reducida por filas . . . . . . . . . . . . . . . . . 34 Aproximaci´ on polinomial por m´ ınimos cuadrados . . . . . . . . . 37 Factores primos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

4.6 Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

4.7 Miscel´ anea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 ´ 5 GRAFICAS 43

5.1 Dos dimensiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 5.2 Tres dimensiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 5.3 Otras funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 5.4 Creaci´ on de un archivo Postscript . . . . . . . . . . . . . . . . . . . . . . 49 ´ ´ 6 METODOS NUMERICOS 50

6.1 Sistemas de ecuaciones lineales . . . . . . . . . . . . . . . . . . . . . . . . 50 6.2 Soluci´ on por m´ ınimos cuadrados . . . . . . . . . . . . . . . . . . . . . . . 51 6.3 Una ecuaci´ on no lineal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 6.4 Sistema de ecuaciones no lineales . . . . . . . . . . . . . . . . . . . . . . 53 6.5 Integraci´ on num´ erica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 6.6 Derivaci´ on num´ erica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 6.7 Interpolaci´ on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 6.8 Aproximaci´ on por m´ ınimos cuadrados . . . . . . . . . . . . . . . . . . . . 56 6.9 Ecuaciones diferenciales ordinarias . . . . . . . . . . . . . . . . . . . . . . 58 6.10 Sistema de ecuaciones diferenciales . . . . . . . . . . . . . . . . . . . . . 58 ´ 7 OPTIMIZACION 7.1.1 60

7.1 Optimizaci´ on lineal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 Desigualdades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

4.3 ´ INDICE GENERAL Desigualdades y restricciones de caja . . . . . . 64 7. . . . . . . . . . . . . . .3 Optimizaci´ on no lineal . . . . . . . . . . .1 7. 63 7. . . . . . desigualdades y restricciones de caja . . .1. . . . . . . . . 66 M´ ınimos cuadrados con restricciones de caja . . . . . . . . . . . . . 67 7. . . .1 Optimizaci´ on no restringida . . . . . . 64 Restricciones de caja . . . . . . . . . . .3. . . . . . . . .4 M´ ınimos cuadrados no lineales . . . .2 7. . . .2 7. . . . . . . . . . . . . . . . . . . . . . .2 Optimizaci´ on cuadr´ atica . 61 Igualdades. . . . . . .1. . . . . . 62 7.iv 7. . . . . . . . . . . . . . . . . 66 . . . . . . . . . . . . . . . . . . .3.

Adem´ as. un excelente instituto franc´ es de investigaci´ on. sugerencias y correcciones enviados a: hmmorae@unal. es decir. Sus principales caracter´ ısticas son: • software para c´ alculo cient´ ıfico • interactivo • programable • de libre uso. tampoco es exhaustivo con respecto al contenido de cada tema.co o hectormora@yahoo. .. EDF Electricit´ e de France. s´ olo est´ an algunos aspectos de cada tema. con la condici´ on de siempre hacer referencia a sus autores • disponible para diferentes plataformas: Windows. Institut National de Recherche en Informatique et Automatique.scilab.com Scilab fue desarrollado en el INRIA.. CEA Commissariat a ` l’Energie Atomique. Sun. Est´ a lejos de ser exhaustivo con respecto a los temas. Thales. Linux. Posteriormente colabor´ o la escuela de ingenieros ENPC.edu. CNES Centre National d’Etudes spatiales.org 1 .Cap´ ıtulo 1 ´ INTRODUCCION Este documento es una peque˜ na introducci´ on a Scilab. Peugeot-Citroen.. El autor estar´ a muy agradecido por los comentarios. Alpha.. Ecole Nationale de Ponts et Chauss´ ees. El sitio oficial de Scilab es www. Dassault Aviation. muchos de los temas y posibilidades de Scilab no son tratados aqu´ ı. Actualmente hay un gran consorcio con empresas como Renault.

niveau L3.. Paris. a la fecha de hoy: 1 de abril del 2005).. Me ha sido muy u ´ til para mi trabajo personal y para mis clases en la Universidad.. 1. Ellipses. • Gomez C. . Birkhauser. ´ • Guerre-Delabri` ere S.. et al. diferencias con Matlab. 1999. 1998 • Chancelier J. et al.M.P.. Engineering and Scientific Computing with Scilab.. Paris. 2001. Otros libros son: • Allaire G y Kaber S. 2002 La utilizaci´ on es igual para las diferentes plataformas. Deseo agradecer a todos los que tuvieron que ver con la creaci´ on y actualizaci´ on de Scilab. • Urroz G. vol. pero obviamente hay algunas diferencias intr´ ınsecas al usar una u otra plataforma. en particular. lista de errores. Exercises pratiques d’alg` ebre lin´ eaire. All´ ı se puede “bajar” la versi´ on binaria o las fuentes para las diferentes plataformas. . 2004. Birkhauser..0 para Linux y para Windows (la u ´ ltima.Applications Scilab. Paris. FAQs (frequent asked questions).. Paris. Ellipses. y Postel M. Introduction a ` SCILAB (Collection IRIS) Springer. Este peque˜ no manual se refiere principalmente a la versi´ on 3. Realmente es una herramienta de uso libre muy poderosa.2 ´ CAP´ ITULO 1. Tambi´ en deseo manifestar mi agradecimiento a todas las personas que de una u otra forma me han ayudado a corregir. • Yger A. 1999.. M´ ethodes d’approximation : Equations diff´ erentielles . 2. manuales. Boston. 2002. Introduction a ` Scilab. modificar. referencias sobre reportes. Integrated Scientific Computing with SciLab. ed. a Manuel Mej´ ıa. Bunks C. actualizar y mejorar este documento. Th´ eorie et analyse du signal : Cours et initiation pratique via MATLAB et SCILAB (1 d´ ecembre 1999) Ellipses. Booksurge. Un libro bastante completo sobre el tema es: Gomez C.. INTRODUCCION All´ ı se encuentra informaci´ on general. Numerical and Statistical Methods With Scilab for Science and Engineering. Boston.

5 .Cap´ ıtulo 2 GENERALIDADES Al activar Scilab aparece en la pantalla algo semejante a: ------------------------------------------Scilab-3.0 Copyright (c) 1989-2004 Consortium Scilab (INRIA. ´ Estas deben ser acabadas oprimiendo la tecla Enter . 2. Adem´ as Scilab muestra el resultado de la orden desplegando en pantalla lo siguiente: 3 .5 ←− crea la variable t y le asigna el valor 3. ENPC) ------------------------------------------- Startup execution: loading initial environment --> A partir de ese momento se puede escribir al frente de --> las o ´rdenes de Scilab. denominada tambi´ en Intro o | simplemente ←− .1 Primeros pasos La orden | --> t = 3.

en este manual no se indicar´ a la tecla ←−| ni tampoco el “prompt” --> .0023e20 -12. T t startup %scicos_display_mode %scicos_short %helps percentlib soundlib s2flib roblib optlib autolib armalib alglib %F %T %z %t %f %eps ierr demolist scicos_pal MSDOS home xdesslib utillib metalib elemlib intlib mtlblib %s %nan %io %i %scicos_menu PWD TMPDIR tdcslib siglib commlib polylib WSCI SCI %inf $ %e . Scilab no hace diferencia entre n´ umeros enteros y n´ umeros reales.. La presencia de punto y coma al final de la orden hace que Scilab no muestre el resultado en la pantalla. se crea otra variable diferente con nombre T y se le asigna el valor 4.5 --> CAP´ ITULO 2..5 -4. GENERALIDADES De ahora en adelante.345e+12 Al usar la orden who Scilab muestra las variables que est´ a usando en ese momento. Scilab diferencia las letras min´ usculas de las may´ usculas. Generalmente tampoco se mostrar´ a el resultado desplegado en la pantalla por Scilab ante una orden recibida.14e-10 3. Su respuesta es algo semejante a: your variables are. Por ejemplo. 3. Los n´ umeros se pueden escribir usando la notaci´ on usual o la notaci´ on cient´ ıfica.1234 3. son v´ alidos los siguientes n´ umeros.14E-10 0. la orden tuvo efecto.5.5.4 t = 3. Por lo tanto deben sobreentenderse. Al dar la orden T = 4. Sin embargo.

buscar una orden anterior para editarla y enseguida activarla. pesoEsp. despu´ es de la orden.5 obteni´ endose el mismo resultado. and 48 variables out of 5 1791 Ah´ ı aparecen las variables t y T . $. #. Scilab crea o actualiza una variable llamada ans .1. Es posible volver a repetir f´ acilmente una orden dada anteriormente a Scilab. Los otros pueden ser letras. por ejemplo x = t+T Si se da la orden t = 2*t se utiliza el antiguo valor de t para la operaci´ on.2. ! . Por ejemplo. = Tambi´ en es posible. y otras variables propias de Scilab. Los espacios en blanco sirven simplemente para facilitar la lectura. PRIMEROS PASOS using 5870 elements out of 1000000. . basta con digitar el nombre de la variable y oprimir Enter. por medio de las flechas (hacia arriba y hacia abajo). En las o ´rdenes de Scilab los espacios en blanco antes y despu´ es del signo igual no son indispensables. t queda valiendo 7. Se podr´ ıa simplemente escribir t=3. Los nombres en Scilab constan hasta de 24 caracteres. pero. se obtiene una orden anterior y se activa oprimiendo ←−| . Utilizando las teclas correspondientes a las flechas hacia arriba y hacia abajo. Las asignaciones pueden incluir operaciones con variables ya definidas. t+T produce el resultado ans 8. sino simplemente una operaci´ on v´ alida. Por ejemplo al repetir varias veces la orden x = (x+3/x)/2 se obtiene una aproximaci´ on muy buena de √ 3. n´ umeros. Por ejemplo: a12. Si se quiere conocer el valor de una variable ya definida. El primero debe ser una letra o $ . _. definidas anteriormente. valor_ini Cuando en la orden no hay ninguna asignaci´ on.

Las reglas de precedencia son semejantes a las de la escritura matem´ atica usual. De mayor a menor. v = 2**8 ). abs : valor absoluto acos : arcocoseno acosh : arcocoseno hiperb´ olico asin : arcoseno asinh : arcoseno hiperb´ olico atan : arcotangente . Scilab tiene predefinidas muchas funciones matem´ aticas. t2 = 3.6 CAP´ ITULO 2. Por ejemplo. Estas deben estar separadas por coma o por punto y coma. Entre los operadores vistos hay tres grupos de prioridad. 2*3+4^5-6/7 es equivalente a ((2*3)+(4^5))-(6/7). estos son los grupos de prioridad: ^ * + ** / - Entre operadores de igual prioridad. En una expresi´ on puede haber varios operadores. t1 = 2. A continuaci´ on est´ a la lista de las funciones elementales m´ as comunes. El signo . Los par´ entesis tienen prioridad sobre todos los operadores. como en la orden o tambi´ en ** . dt = t2-t1 2. GENERALIDADES ´ En una misma l´ ınea de Scilab puede haber varias o ´rdenes. Por ejemplo u = -t Para elevar a una potencia se utiliza el signo ^ u = 2^8. Puede haber parejas de par´ entesis metidas (anidadas) dentro de otras. Por ejemplo.tambi´ en sirve para indicar el inverso aditivo.2 + Operaciones y funciones * / Los s´ ımbolos sirven para las 4 operaciones aritm´ eticas. se utiliza el orden de izquierda a derecha. Por ejemplo Scilab utiliza para agrupar los par´ entesis redondos: ( x = (x+3/x)/2.

.3.4.4. 1. 1.3.4. . .3. . . . OPERACIONES Y FUNCIONES atanh : arcotangente hiperb´ olica ceil : parte entera superior cos : coseno cosh : coseno hiperb´ olico cotg : cotangente coth : cotangente hiperb´ olica exp : funci´ on exponencial: ex fix : redondeo hacia cero (igual a int) floor : parte entera inferior int : redondeo hacia cero (igual a fix) log : logaritmo natural log10 : logaritmo decimal log2 : logaritmo en base dos max : m´ aximo min : m´ ınimo modulo : residuo entero rand : n´ umero aleatorio round : redondeo sin : seno sinh : seno hiperb´ olico sqrt : raiz cuadrada tan : tangente tanh : tangente hiperb´ olica 7 El significado de la mayor´ ıa de estas funciones es absolutamente claro.3. . 1. 1.1 .8 2.3.3. 1. .3. 1.3.8 . 1. .2. x ceil(x) floor(x) int(x) round(x) 2. La siguiente tabla muestra varios ejemplos utilizando las funciones de parte entera y redondeo. 2. . . 1. . 1.5 2.3.4. 2.2.3.2 2.5 . 2. . 2.0 2.4. 1. 2.

sin. sysdiag. cos.. cumsum. subf. int8. erfcx. sqrtm. log. con la opci´ on Help seguida de Help Dialog se obtiene un cat´ alogo resumido de las herramientas de Scilab. int32. La lista de funciones elementales de Scilab es la siguiente: abs. atanh. maxi. cotg. log10. signm. log2. sparse. full. delip. es modulo. frexp. sqrt. Por ejemplo: apropos polynomial da informaci´ on sobre las funciones que tienen que ver con polinomios. interpln. lex_sort. modulo. sum. Mediante la barra de men´ u. modulo(17. bessely. besseli. atan. atanhm. imag. max. la funci´ on gama. linspace. acosm. coshm. tan. syslin. trfmod. tril. El resultado es el residuo de la divisi´ on entera. Sus dos par´ ametros deben ser enteros. sinm. prod. calerf. eval. real. sprand. solve. ssrand. Adem´ as de estas funciones elementales. ´ esta ya con dos par´ ametros de entrada. int16. minus. conj. atanm. trianfml. sign. spget. bloc2ss. . intersect. coth. speye. tanhm. interp. acoshm. kron. . cumprod. sinhm. or. sysconv. asinhm. asinh. rat. floor. st_deviation. pen2ea. uint16. sort. asinm. cosh. not. round. GENERALIDADES Otra funci´ on matem´ atica. integrate. uint32. median.8 CAP´ ITULO 2. typeof. toeplitz. rdivf. Scilab tiene muchas m´ as funciones como las funciones de Bessel. fix. ldivf. addf. min. norm. dlgamma. spcompack. squarewave. spones. pertrans. uint8. logm. Para tener informaci´ on m´ as detallada sobre alguna funci´ on basta con digitar help y a continuaci´ on el nombre de la funci´ on o de la orden. tanm. and. cothm. besselj. cosm. sinh. En cambio. isnan. double. smooth. eye. adj2sp. pero se desea buscar sobre un tema. unique.. ssprint. bloc2exp. gamma. int. mini. size. logspace. sp2adj. Si no se conoce el nombre de la funci´ on. mps2linpro. intsplin. acosh. diag. besselk. ones. splin. help polynomial informa que no hay manual para polynomial. binomial. triu. trisolve. isreal. mulf. isinf. zeros. union. spzeros. erfc. mean. acos. rand. gammaln. isdef.5) da como resultado 2. nnz. cmb_lin. gsort. Por ejemplo help floor Obviamente se requiere que la funci´ on floor exista. se debe utilizar apropos. erf. inttrap. mtlb_sparse. tanh. ceil. pmodulo. amell.

* / ** ^.14) La orden anterior sirve para utilizar notaci´ on cient´ ıfica con 14 posiciones. Scilab utilizar´ a 16 “columnas” (16 posiciones) para mostrar cada n´ umero. OTROS TEMAS 9 2. Estos pueden ser definidos de varias maneras.. imag y conj permiten obtener la parte real. por ejemplo. Si se utiliza la funci´ on abs con un complejo. b = 2i. −1. Despu´ es de la siguiente asignaci´ on. format(’v’. la variable r tendr´ a el valor -1. π . resta.4 Complejos Scilab maneja de manera sencilla los n´ umeros complejos. Por ejemplo. la parte imaginaria y el conjugado de un complejo. a = 3 − 20i. Por defecto. %i . Scilab usa 10 posiciones. . Las funciones de Scilab usadas para funciones reales elementales que tienen generalizaciones en complejos. sus nombres son: %e . %pi . se obtiene la magnitud o m´ odulo de ´ el. por ejemplo. se pueden usar tambi´ en para los complejos.) utilizan exactamente los mismos s´ ımbolos + . format(’e’.3. sin. Si se da la orden format(16) a partir de ese momento. definen dos variables.2.. suponiendo que r vale −5. mediante format. multiplicaci´ on. Estas 16 columnas incluyen el espacio para el signo la parte entera y el punto. r = log(1/%e) 2. el formato “variable” (el predefinido por Scilab) se usa format(’v’) o. 10) Scilab tiene predefinidas algunas constantes especiales cuyos nombres est´ an precedidos √ del signo % . Para los valores e. se Las funciones real. .3 Otros temas Se puede modificar el formato utilizado por Scilab para mostrar los resultados. Observe que dos de estas variables aparecieron al utilizar who. las dos o ´rdenes siguientes a = 3 + 4*r*%i b = sqrt(-4) Para las operaciones con n´ umeros complejos (suma. Tambi´ en se puede utilizar simplemente format(’e’) Para regresar al formato inicial.

r = p^3 La funci´ on coeff tiene dos par´ ametros. GENERALIDADES 2. se puede reemplazar ’coeff’ por ’c’ y ’roots’ por ’r’ . La doble comilla " puede ser reemplazada por la comilla sencilla ’. 2) Si se utiliza simplemente c = coeff(q) . ’y’. r = sin(z) El resultado mostrado por Scilab en pantalla es r = 3.. La orden q = poly([2 3 5]. multiplicaci´ on por un n´ umero. Escribir q = poly([2 3 5]. el primero es el polinomio y el segundo la potencia. k = coeff(q. restas. Deben ser polinomios en la misma variable. 3 y 5.10 cos. M´ as a´ un. log.1*q Tambi´ en se puede elevar un polinomio a una potencia. Por ejemplo: v = p + q + p*q .3. "x") produce exactamente el mismo resultado.5 Polinomios Un polinomio se puede definir de dos maneras: por sus coeficientes o por sus ra´ ıces. multiplicaciones.853738 . "x". "roots") define en la variable q el polinomio −30+31x − 10x2 + x3 cuyas ra´ ıces son exactamente 2. por ejemplo. sean ´ estas reales o complejas. el coeficiente de x 2 en el polinomio q.. La orden p = poly([2 3 5 7]. es completamente l´ ıcito z = 3 + 4*%i. "coeff") define en la variable p el polinomio 2 + 3x + 5x2 + 7x3 .27. As´ ı. La funci´ on roots calcula las ra´ ıces de un polinomio. "x".016813i CAP´ ITULO 2. Es l´ ıcito escribir r = poly([6 7 8]. Es necesario adem´ as indicar la variable simb´ olica para el polinomio. ’c’) . Por ejemplo roots(p) Con polinomios se pueden hacer sumas. o sea. . La siguiente orden asigna a la variable k el valor −10. "roots" es el tipo de definici´ on por defecto.

2.6. 1) dar´ a como resultado −8.2. donde a es una matriz cuadrada (ver cap´ ıtulo siguiente sobre matrices y vectores). q) para obtener p(q(x)). Para evaluar un polinomio p en un valor t se usa horner(p. se obtiene el polinomio caracter´ ıstico de de la matriz a. ´ • Algebra lineal (cap´ ıtulo 3) • Gr´ aficas (cap´ ıtulo 5) • Optimizaci´ on • METANET: grafos y redes • An´ alisis y control de sistemas lineales • Procesamiento de se˜ nales • Modelaci´ on y simulaci´ on ARMA (autoregressive moving average) • Simulaci´ on • SCICOS: modelamiento y simulaci´ on de sistemas din´ amicos h´ ıbridos • Funciones de entrada y salida • Manejo de funciones y librer´ ıas • Manipulaci´ on de cadenas de caracteres • Di´ alogos: ventanas y botones • C´ alculos con polinomios . es l´ ıcito utilizar la orden r = horner(p.’x’). Si se utiliza p = poly(a.6 Lista de algunas herramientas Scilab tiene numerosas herramientas para diferentes temas. t) Por ejemplo horner(q. A continuaci´ on hay una lista de ellas. Si q es un polinomio. La variable c ser´ a un vector (ver cap´ ıtulo siguiente sobre matrices y vectores). LISTA DE ALGUNAS HERRAMIENTAS 11 se obtendr´ an todos los coeficientes.

GENERALIDADES .12 • Funciones de distribuci´ on • Control robusto • PVM: parallel virtual machine • Traducciones de lenguajes y datos • GeCI: comunicaci´ on con otras aplicaciones • Interfaz con Maple CAP´ ITULO 2.

21. ! 35.24. 21 22 23 24 25.34.32.35] o por a = [ 11 12 13 14 15 21 22 23 24 25 31 32 33 34 35] Scilab mostrar´ a el siguiente resultado en la pantalla: a ! ! ! = 11. 12.33.1 Creaci´ on   11 12 13 14 15 21 22 23 24 25 31 32 33 34 35 La matriz se puede definir por medio de o tambi´ en por medio de a = [ 11 12 13 14 15. 14 24 34 15. 31. los vectores se deben asimilar a matrices de una sola fila o vectores fila (tama˜ no 1 × n) o a matrices de una sola columna o vectores columna (tama˜ no n × 1).23. 21. 33.25. ! 25. 13.13.12.14.22. 22. 23. ! 13 .Cap´ ıtulo 3 VECTORES Y MATRICES En Scilab no hay vectores como tales. 31. 3. 31 32 33 34 35] a = [ 11.15. 32.

por ejemplo x = [1 1.0 2.30) es una matriz aleatoria de tama˜ no 20 × 30 Algunas veces es u ´ til.2:5) denota la submatriz de tama˜ no 2 × 4.5) es una matriz de ceros de tama˜ no 4 × 5 eye(4. o sea. a(3. la matriz 12 13 14 15 · 22 23 24 25 La anterior definici´ on de submatrices se puede generalizar utilizando vectores(fila o columna). Los elementos de una misma fila se separan por medio de espacios en blanco o por medio de comas. Por medio de las siguientes o ´rdenes u = [ 1 2 1].v)   12 14 22 24 · 12 14 se asigna a la variable aa la matriz . por ejemplo.6)’ 3.5) es una matriz de unos de tama˜ no 4 × 5 zeros(4. Scilab permite crear r´ apidamente algunos tipos especiales de matrices: ones(4.0.14 CAP´ ITULO 3.6 1. aa = a(u.4) es la matriz identidad de orden 4 rand(20. especialmente para gr´ aficas de funciones (tema que se vera en un cap´ ıtulo posterior).2:2. Si no se especifica incremento se supone que es uno.6 Los valores 1. v =[2 4]. 5.4 2.:) denota la tercera fila de la matriz a.2:2.8 2.2 Notaci´ on y operaciones a(2.5) denota el elemento o entrada de a en la fila 2 y en la columna 5. 0. Cuando se desea una columna basta con utilizar el operador de trasposici´ on. 2 y en las columnas 2. Una fila se separa de la siguiente por medio de punto y coma o por medio de cambio de l´ ınea. a(1:2. formado por los elementos que est´ an en las filas 1.2 y 2. Escribir y = 2:9 es equivalente a y = 2:1:9. a(:.6 corresponden respectivamente al l´ ımite inferior.6] Esto tambi´ en se puede hacer m´ as f´ acilmente as´ ı: x = 1:0. z = (1:0.2 1. VECTORES Y MATRICES La definici´ on de la matriz se hace por filas. 3. 4.4) denota la cuarta columna de la matriz a. al incremento y al l´ ımite superior.2 2. crear vectores con elementos igualmente espaciados.4 1.

Por medio de * se puede hacer el producto entre un n´ umero y una matriz. sin(3) sin(4)] Para matrices (y vectores) del mismo tama˜ no se puede hacer la multiplicaci´ on elemento a elemento utilizando .´ Y OPERACIONES 3.1). Por ejemplo. D = sin([1 2. La transposici´ on de una matriz se indica por medio de comilla. por ejemplo. se puede escribir y(2) en lugar de y(2. c = a’*a crea la matriz c . La mayor´ ıa de las funciones de Scilab utilizadas para n´ umeros reales se pueden aplicar a matrices. se puede escribir x(3) en lugar de x(1. Cuando el producto de matrices es posible (n´ umero de columnas de la primera matriz igual al n´ umero de filas de la segunda). a1 = a^(1/2) Q = rand(3. Por ejemplo: P = rand(3. si a es una matriz cuadrada. una matriz del mismo tama˜ no. producto de la traspuesta de a y de a . H = a.2. las dos o ´rdenes siguientes son equivalentes. Si x es un vector columna. luego la tercera y as´ ı sucesivamente. entonces x(:) es un vector columna con las mismas entradas de x. D = [sin(1) sin(2). enseguida la segunda columna. 3 4]) .^(1/2) es lo mismo que sqrt(a) es decir. en la que se ha aplicado la funci´ on a cada uno de los elementos de la matriz. NOTACION 15 Si a es una matriz m × n. cuyas entradas son las raices cuadradas de las entradas de a. En este caso se obtiene una matriz del mismo tama˜ no. obtenido colocando primero la primera columna de a. Los signos + y . por ejemplo. An´ alogamente. ´ este se indica por medio de * . r = P. si x es un vector (fila o columna). De manera an´ aloga se puede hacer la divisi´ on elemento a elemento. Dicho de otra forma.* . si y es un vector columna. Por construcci´ on c es una matriz cuadrada. x = x(:) convierte el vector x en un vector columna.^3 Si a es una matriz rectangular a. entonces x(:) es el mismo vector columna.5). entonces a(:) es un vector columna de tama˜ no mn × 1. .*Q Tambi´ en es posible elevar a una potencia los elementos de una matriz. Si x es un vector fila. As´ ı. En cambio. entonces x(:) es lo mismo que x’.3).permiten hacer sumas y restas entre matrices del mismo tama˜ no. Si x es un vector fila.5).

Si x es un vector. o sea. Las dos o ´rdenes siguientes permiten crear los dos vectores para un polinomio: x = (-2:0. 5.01:3)’.5)] Como a fue definida de tama˜ no 3 × 5. Por ejemplo. Algunas de las m´ as usadas son: • rank(a) calcula el rango de a. 3. si a es un matriz.3 Funciones elementales Hay numerosas funciones de Scilab para el manejo de matrices. Como se ver´ a m´ as adelante. a. VECTORES Y MATRICES es una matriz raiz cuadrada de a. • det(c) determinante de una matriz cuadrada c. y = 3*x.16 CAP´ ITULO 3. x(2) = [] produce el resultado x ! = 2. eye(5. De manera an´ aloga.5*x. para graficar se requieren dos vectores.5). AA = [a rand[3. uno con los valores de la variable x y otro (del mismo tama˜ no) con los valores de la variable y . a1*a1 es lo mismo que a.6)^3 Si los tama˜ nos son compatibles.*x + 3.^3 . Para matrices cuadradas.^4 + x. la orden x(2) = [] suprime la segunda componente y desplaza el resto. Por ejemplo. G = rand(6. dos o m´ as matrices se pueden “pegar” para obtener una matriz de mayor tama˜ no.14. por ejemplo. 11.2)] B = [rand(2. la orden a(:. x = [2 3 5 7 11]. 7. entonces AA es de tama˜ no 3 × 7 y B es de tama˜ no 10 × 5. . es posible calcular directamente una potencia.2) = [] suprime la segunda columna. • inv(c) inversa de una matriz cuadrada e invertible c. ! La orden y = [] permite crear la matriz y de tama˜ no 0 × 0.

. 1 1 1 eC = I + C + C 2 + C 3 + C 4 + · · · 2 6 24 17 • diag(c) produce un vector columna con los elementos diagonales de la matriz cuadrada c. considerando cada matriz como un vector formado por la primera columna. a= 3.4 3. k] = sort(x): y es el vector ordenado de manera decreciente. .8 3.4 • m = max(x) calcula el m´ aximo del vector (fila o columna) x.4 3. la segunda columna. • expm(C) produce la matriz eC . • y = sort(x) ordena el vector x de manera decreciente. el resultado externo es un ordenamiento de las filas. b= 3. Atenci´ on.2 3. ’c’) ordena la matriz a de manera decreciente por filas. • diag(x) produce una matriz diagonal con los elementos del vector (fila o columna) x. la u ´ ltima columna..3.2 3.1 • b = sort(a.2 3. 3..1 • b = sort(a. • [y. aunque ’c’ tiene un significado interno de columnas.2 3.8 3. • b = sort(a) ordena la matriz a de manera decreciente.8 b= 3. ’r’) ordena la matriz a de manera decreciente por columnas.1 3. FUNCIONES ELEMENTALES • rref(a) matriz escalonada reducida por filas equivalente a a. k es un vector que contiene los ´ ındices del ordenamiento.8 3. k indica la posici´ on donde • m = max(a) calcula el m´ aximo de la matriz a. . y = x(k). b= 3. Atenci´ on.1 .4 3. o sea. • [m. k] = max(x): est´ a el m´ aximo. aunque ’r’ tiene un significado interno de filas. donde C es una matriz cuadrada. el resultado externo es un ordenamiento de las columnas. m es el m´ aximo del vector x.3.

el mayor valor singular de a. • m = mean(a) calcula el promedio de la matriz a. para la matriz a. m es un vector fila (row) que contiene los m´ aximos de las • [m. k] = max(a. m 1≤j ≤n max i=1 |aij |. • st-deviation semejante a mean pero para la desviaci´ on est´ andar. ’r’) : columnas de a. • m = mean(a. .18 CAP´ ITULO 3. • norm(a. o sea. ’inf’) calcula la norma “del m´ aximo” del vector x: 1≤i≤n max |xi |. • m = mean(x) calcula el promedio del vector (fila o columna) x. p) i=1 |xi | p . VECTORES Y MATRICES • [m. calcula la norma lp del vector x: n 1/p • norm(x. ’c’) : m es un vector columna que contiene los promedios las filas de a. • norm(a) = norm(a. para la matriz a. m es un vector fila (row) que contiene los promedios las • m = mean(a. • median semejante a mean pero para la mediana. • prod semejante a mean pero para el producto. k] = max(a): m es el m´ aximo de la matriz a. k es un vector 1 × 2 e indica la posici´ on donde est´ a el m´ aximo. • m = max(a. o sea. • sum semejante a mean pero para la suma. ’r’) : columnas de a. la norma matricial generada por la norma euclidiana. • norm(x) calcula la norma euclidiana del vector x (fila o columna). ’r’) : m es un vector fila que contiene los m´ aximos de las columnas de a. 1) calcula. la norma matricial generada por la norma l1 . k es un vector fila que contiene las posiciones de los m´ aximos. • min semejante a max pero para el m´ ınimo. • norm(x. 2) calcula.

o sea. m n 1/2 a2 ij i=1 j =1 . Con la orden [v. Esta es la llamada factorizaci´ on de Cholesky. ! 0. 8. 4. por medio de v = spec(a) se obtiene un vector columna con los valores propios (reales o complejos) de a. • Si A es una matriz sim´ etrica y definida positiva.3. a = [1 2 3. ! 9. s] = spec(a) se obtiene la matriz v cuyas columnas son vectores propios y la matriz diagonal s cuyos elementos diagonales son los valores propios. • Si a es una matriz cuadrada. Por ejemplo.2) proporciona el n´ umero de columnas de a. n 1≤i≤m max j =1 |aij |. ’fro’) calcula.3. • Por medio de tril se puede obtener la parte triangular inferior (low) de una matriz cuadrada. Esta matriz se puede obtener por U = chol(A) . FUNCIONES ELEMENTALES 19 • norm(a.1) proporciona el n´ umero de filas de a. size(a. 7. ! • La funci´ on triu produce la parte triangular superior (upper). 4 5 6. L = tril(a) produce el resultado L ! ! ! = 1. para la matriz a. ’inf’) calcula. o sea. para la matriz a. 0. 5. la norma matricial generada por la norma l∞ . entonces se puede factorizar en la T forma A = U U . • La orden fc = size(a) proporciona un vector fila 1 × 2 con el n´ umero de filas y el n´ umero de columnas de a. 7 8 9]. • norm(a. 0. donde U es una matriz triangular superior de diagonal positiva. La orden size(a. An´ alogamente. la norma de Frobenius.

cuyos elementos diagonales son los valores singulares de A. r] = qr(a) • La factorizaci´ on LU de una matriz cuadrada invertible A es la expresi´ on P A = LU donde P es una matriz de permutaci´ on. o posiblemente el m´ as frecuente. descomposici´ on en valores singulares.20 CAP´ ITULO 3. V] = svd(A) • La inversa generalizada de Moore-Penrose o seudoinversa de una matriz se puede obtener por medio de a1 = pinv(a) 3. VECTORES Y MATRICES • La factorizaci´ on QR de una matriz A es la expresi´ on A = QR donde Q es una matriz ortogonal y R es una matriz del tama˜ no de A. de una matriz A es la expresi´ on A = U DV T donde U y V son matrices ortogonales y D es una matriz del tama˜ no de A. D. La segunda usa un algoritmo eficiente de Scilab para hallar la soluci´ on. Si A es una matriz cuadrada e invertible. U. L es una matriz triangular inferior con unos en la diagonal y U es una matriz triangular superior. [q. La primera conlleva el c´ alculo de la inversa. “triangular ” (no necesariamente cuadrada). x1 = inv(A)*b x2 = A\b . Por ejemplo. [L. Por ejemplo. el sistema tiene. P] = lu(A) • La descomposici´ on SVD. una u ´ nica soluci´ on y se puede resolver por una de las dos o ´rdenes siguientes. [U. “diagonal ” (no necesariamente cuadrada).4 Soluci´ on de sistemas de ecuaciones En matem´ aticas (y todas las ciencias y t´ ecnicas relacionadas) uno de los problemas m´ as frecuentes. consiste en resolver un sistema de ecuaciones lineales Ax = b. Por ejemplo. donde se conocen la matriz A y el vector columna b. te´ oricamente.

luget. rref. companion. fullrf. randpencil. inv. aproximadamente. rowcomp. spaninter. chol. pinv.3. gspec. lyap. spantwo. esta seudosoluci´ on es u ´ nica. spchol. Para matrices medianamente grandes hay diferencias en tiempo. schur. la soluci´ on 2 por m´ ınimos cuadrados. range. se busca x que minimice ||Ax − b||2 . spanplus. colcomp. givens. ludel. projspec. use la ayuda: help backslash 3. fullrfk. Para mayor informaci´ on. Si el sistema es inconsistente. orth. svd. tres veces m´ as tiempo que la segunda. sylv. La primera forma gasta. exp. chsolve. sva. gschur. glever. sqroot. Desde el punto de vista de precisi´ on num´ erica. det. psmall. balanc. qr. kroneck. polar. proj. expm. genmarkov. bdiag. rcond. spec.5. fstair. hess. chfact. los resultados son semejantes.5 Otras funciones ´ La lista de funciones de Scilab para Algebra Lineal es la siguiente: aff2ab. ereduc. el resultado debe ser el mismo. pbig. rank. classmarkov. penlaur. En este caso la orden x = A\b encuentra una de estas“soluciones”. lufact. trace . Fuera del caso de soluci´ on u ´ nica hay otros dos casos: el caso de sistema inconsistente (sin soluci´ on) y el caso de muchas soluciones (n´ umero infinito de soluciones). im_inv. entonces se desea encontrar una seudosoluci´ on. coff. lu. cond. nlev. kernel. eigenmarkov. Si las columnas de A son linealmente independientes. linsolve. lusolve. householder. OTRAS FUNCIONES 21 Te´ oricamente. o sea. quaskro. pencan. rowshuff.

crear aleatoriamente la soluci´ on x0 . hallar la soluci´ on. son variables locales. Puede estar colocado en cualquier carpeta. calcular la norma del error cometido. las variables definidas dentro de la funci´ on dejan de existir una vez finalizada la ejecuci´ on de la funci´ on. crear los t´ erminos independientes correspondientes a x0 . En cambio una funci´ on s´ ı los tiene.sce pero eso no es obligatorio. 4. Un gui´ on es simplemente una secuencia de o ´rdenes de Scilab. Scilab viene con un editor llamado Scipad. con Scipad o con un editor cualquiera. despu´ es del llamado del gui´ on estas variables siguen existiendo. No tiene par´ ametros (“argumentos”) de entrada ni de salida. es decir.1 Guiones (scripts) Un gui´ on es simplemente un archivo ASCII en el que hay una sucesi´ on de o ´rdenes de Scilab.Cap´ ıtulo 4 PROGRAMAS En Scilab hay dos tipos de programas: los guiones o libretos (scripts) y las funciones. En cambio en una funci´ on. En el ejemplo que sigue se va a hacer lo siguiente: crear aleatoriamente una matriz.sce 22 . Se activa mediante la opci´ on Editor de la barra de men´ u de Scilab. Generalmente tiene la extensi´ on . Por otro lado. las variables definidas en un gui´ on son globales. creamos el archivo c:\misci\ensayo01. Ya sabiendo lo que se va a hacer.

Sea c:\estad\ensayo02. fueron creadas y todav´ ıa existen. Su seudosoluci´ on o soluci´ on por m´ ınimos cuadrados est´ a dada por la soluci´ on de la ecuaci´ on normal AT A x = AT b. guardarlos y de nuevo activar el gui´ on mediante exec . Consideremos el siguiente sistema de ecuaciones A x = b.sce. b = A*x0.. .sce el archivo que define los datos y lleva a cabo este proceso. En Linux se hace de manera muy parecida: en la barra de men´ u File. tiene m´ as filas que columnas y sus columnas son linealmente independientes. En el siguiente ejemplo suponemos que se tiene una matriz A de tama˜ no m × n. se obtiene el mismo resultado con la barra de men´ u (de SciPad) mediante la opci´ on Execute y despu´ es Load into Scilab.n).sce Esto hace que se ejecuten todas las o ´rdenes contenidas en el archivo. GUIONES (SCRIPTS) cuyo contenido sea el siguiente: n = 100. Si se usa SciPad. A = rand(n. o de cualquier otra forma. Subiendo y bajando de nivel se busca la carpeta adecuada y se hace doble clic con el bot´ on derecho del rat´ on en el archivo ensayo01. x0..1). residuo = norm(x-x0) 23 Obviamente el nombre de la carpeta misci es simplemente un ejemplo y hubiera podido ser cualquier otra carpeta. Su contenido puede ser: . r (A) = n. x0 = rand(n. Si se desea. proveniente de minimizar el cuadrado de la norma del error: ε = ||A x − b||2 2. enseguida File Operations y finalmente Exec despu´ es de haber escogido el archivo deseado.. se puede verificar que las variables n. desde el ambiente Scilab se da la orden exec c:\misci\ensayo01. Probablemente este sistema de ecuaciones no tiene soluci´ on en el sentido estricto. x = A\b. se puede editar el archivo. m ≥ n. Una vez guardado el contenido.. Mediante who.4. es decir. Dar la orden exec c:\misci\ensayo01.1.sce tambi´ en se puede hacer en Windows por medio de la barra de men´ u con las opciones File y despu´ es Exec. hacer algunos cambios. A.

24 // solucion por minimos cuadrados // a = [ 1 2. .... endfunction El siguiente archivo llamado c:\misci\misfunc.) . ... . // x = (a’*a)\(a’*b) e = norm(a*x-b)^2 CAP´ ITULO 4. .. par2. Generalmente el nombre de los archivos de funciones tienen la extensi´ on .sci. b) // solucion por minimos cuadrados x = (A’*A)\(A’*b) error2 = norm(A*x-b)^2 . par2. error2] = seudoSol(A.sce De manera natural aparece la pregunta: ¿C´ omo hacer el mismo proceso con otro sistema de ecuaciones sin tener que cambiar el archivo? Las funciones son la respuesta. res2. 3 4. PROGRAMAS Las l´ ıneas que empiezan por // son l´ ıneas de comentarios (como en C++). el esquema puede ser simplemente: function result = nombrefuncion(par1.. El esquema general de una funci´ on es el siguiente: function [res1. El significado de par2 es par´ ametro de entrada 2 o simplemente par´ ametro 2.] = nombrefuncion(par1... endfunction El significado de res1 es resultado 1 o tambi´ en par´ ametro de salida 1. 5 6]. Cuando la funci´ on tiene un u ´ nico resultado. ... 4. b = [ 3 7 10]’..sci tiene varias funciones function [x.. Obviamente para activar este otro archivo se necesita dar la orden exec c:\estad\ensayo02.2 Funciones En un archivo ASCII puede haber varias funciones..) .

res = f(x) Cuando una funci´ on produce m´ as de un resultado.2. 3 4. Por ejemplo. las funciones se pueden utilizar como las otras funciones de Scilab. mediante las opciones de la barra de men´ u File y despu´ es Exec. 6]. FUNCIONES endfunction //-------------------------------------------------------function [x. 30) a = [1 2. y] = polarCartGr(r. b] = polarCartGr(3. Una vez cargado el archivo.30) lo cual produce el resultado b = . Tambi´ en con la barra de men´ u de SciPad: Execute y Load into Scilab . en la barra de men´ u File . 4]) x = [5. x = r*cos(t) y = r*sin(t) endfunction //-------------------------------------------------------function [x. t) // Conversion de coordenadas polares a cartesianas. t) // Conversion de coordenadas polares a cartesianas. 5 6]. y] = polarCart(r. y] = polarCart(r. En Linux. son v´ alidas las siguientes o ´rdenes: [x1.sci 25 o tambi´ en. b = [3 7 10]’.7854) [u. 5 6]. [x. t*%pi/180) endfunction //-------------------------------------------------------function fx = f(x) fx = x(1)^2 + x(2)^2 endfunction Este archivo de funciones se debe cargar mediante la orden getf c:\misci\misfunc. 0. 3 4. File Operations y finalmente Getf despu´ es de haber escogido el archivo deseado. y1] = polarCart(2. // el angulo esta dado en grados. en Windows. v] = polarCartGr(3. dif] = seudoSol([1 2.4. [3 7 10]’) valor = f([3. [x. la utilizaci´ on completa de polarCartGr puede ser [a.err] = seudoSol(a.b) [x. tambi´ en se puede utilizar asignando menos de los resultados previstos. Por ejemplo.

3 Carpeta actual o por defecto Al arrancar. hay simplemente una secuencia de o ´rdenes que siempre se repite de la misma manera. 4.5 = 2. Esto se ver´ a en secciones posteriores de este mismo cap´ ıtulo. hay que tomar algunas decisiones. abortar un proceso. Normalmente dentro de una funci´ on. Con mucha frecuencia esto no es as´ ı.5980762 Otra caracter´ ıstica de las funciones es que una funci´ on puede llamar una o varias funciones.. la orden c = polarCartGr(3.. dependiendo de los datos o de resultados intermedios.30) produce el resultado c = 2. Obs´ ervese que la funci´ on polarCartGr utiliza la funci´ on polarCart.5980762 En cambio. se da la orden pwd La respuesta de Scilab puede ser: ans = C:\WINDOWS\Escritorio En Linux la respuesta podr´ ıa ser ans = /home/h . Esto se logra mediante los operadores relacionales. los operadores l´ ogicos y las estructuras de control. actual o por defecto.26 CAP´ ITULO 4. . Para saber el nombre de esta carpeta. En los ejemplos anteriores de funciones. PROGRAMAS a 1. repetir un proceso. Scilab tiene definido un subdirectorio (o carpeta) preferencial.

sce est´ a en la carpeta C:\WINDOWS\Escritorio. se usa la orden chdir. no es necesario. escribir la ubicaci´ on completa del archivo.4 Comparaciones y operadores l´ ogicos < <= > >= == ~= <> & | ~ menor menor o igual mayor mayor o igual igual diferente diferente y o no 4.sce Basta digitar exec ejemplo4.5 ´ Ordenes y control de flujo La principales estructuras de control de Scilab son: • if • select y case • for • while Otras o ´rdenes relacionadas con el control de flujo son: • break .sce Para decir a Scilab que cambie la carpeta por defecto.4. basta dar el nombre del archivo. Por ejemplo. COMPARACIONES Y OPERADORES LOGICOS 27 Esto quiere decir que si un archivo de funciones o un archivo tipo gui´ on est´ an ubicados all´ ı. chdir ’c:\algebra\matrices\’ 4.´ 4. por ejemplo. no es necesario. si el archivo ejemplo4. dar la orden exec \WINDOWS\Escritorio\ejemplo4. al utilizar getf o exec.

. Entonces se puede escribir if condici´ on . se puede escribir directamente.... . end Estas estructuras se pueden utilizar directamente dentro del ambiente interactivo de Scilab. fx = x*x.. PROGRAMAS En este manual introductorio se supone que el lector tiene alg´ un conocimiento de un lenguaje de programaci´ on. end La palabra then puede ser reemplazada por una coma o por un cambio de l´ ınea.28 • return equivalente a resume CAP´ ITULO 4.. else fx = x*x*x.. Por ejemplo. Aqu´ ı no se explica como es el funcionamiento de la estructura while. cuando hay muchas o ´rdenes y muchos controles y es necesario depurar el proceso.. es casi indispensable hacer un gui´ on o una funci´ on.1 if Una forma sencilla de la escritura de la escritura if es la siguiente: if condici´ on then .. . else .. sin necesidad de un gui´ on if x < 0.. end Obviamente tambi´ en existe la posibilidad else: if condici´ on .. Simplemente hay algunos ejemplos sobre su escritura en Scilab.5. end Resulta ineficiente hacer un gui´ on u ´ nicamente para las o ´rdenes de la l´ ınea anterior. • abort 4. Pero..

5.. ..... end Por ejemplo e = 1.5.. ´ este se puede suprimir.. .. A continuaci´ on algunos ejemplos.´ 4. .. Si el incremento es 1.. despu´ es va incrementar el valor en el incremento incr (puede ser negativo).. end for k = 2:8 . 4. end Esto quiere decir que la variable var empieza en el l´ ımite inferior lim1. end .. for i = 2:3:14 ... end Una estructura for puede estar anidada dentro de otro for o dentro de un if..5... . ORDENES Y CONTROL DE FLUJO 29 4.. .2 for La estructura for tiene la siguiente forma: for var = lim1:incr:lim2 . end for j = 2:-3:-10 .. while e+1 > 1 e = e/2..3 while La forma general es: while condici´ on .

. . case valor2 then . case valor3 then ... . case valor3 .. end La palabra then puede ser reemplazada por una coma o por un cambio de l´ ınea...... .. case valor2..4 select La forma general es: select variable case valor1 then .30 CAP´ ITULO 4. ..... . . case valor4 ... .. . Entonces se puede escribir select variable case valor1 . else .....5.... case valor4 then . PROGRAMAS 4. ....... La parte else es opcional..

c. a = b. function [maxcd. indic = 0 maxcd = 0 if round(a) ~= a | round(b) ~= b return end if a < 1 | b < 1 return .5..5 Otras o ´rdenes La orden break permite la salida forzada (en cualquier parte interna) de un bucle for o de un bucle while.b).. es abort.5. Otra orden que sirve para interrumpir una funci´ on. b = 0. else a = 0.. b = 1. end 31 4. b = a*a. b enteros positivos. case 3 a = max(a.. En la siguiente funci´ on se calcula el m´ aximo com´ un divisor por el algoritmo de Euclides.´ 4. case 1 a = b*b. end Por ejemplo select indic case 0. ORDENES Y CONTROL DE FLUJO . b) // Maximo comun divisor de a. . Todos los par´ ametros de salida o resultados deben estar definidos con anterioridad. indic] = mcd(a. // indic valdra 1 si se calculo el m.d // 0 si los datos son inadecuados. en este caso interrumpiendo la evaluaci´ on. La orden return permite salir de una funci´ on antes de llegar a la u ´ ltima orden.

La condici´ on del while siempre es cierta. luego la salida del bucle se obtiene siempre en la mitad del cuerpo del while. pues de todas maneras Scilab no muestra el resultado de la asignaci´ on (en Matlab si es necesario el punto y coma). a. b. Otras o ´rdenes que se pueden utilizar para escritura son: fprintf print write . En una funci´ on no es necesario el punto y coma despu´ es de una orden. b) if r == 0 maxcd = b return end a = b b = r end endfunction CAP´ ITULO 4. se desea mostrar en pantalla algunos valores intermedios se debe hacer por medio de disp o por medio de printf. r) Observe que primero escribe el valor de r. El s´ ımbolo \n se utiliza para cambio de l´ ınea. La orden printf es una emulaci´ on de la orden del mismo nombre del lenguaje C. r) Esta emulaci´ on utiliza una comilla en lugar de la comilla doble. luego se podr´ ıa cambiar por un break. Por ejemplo se podr´ ıa utilizar la orden printf(’ a = %3d b = %3d r = %3d\n’.32 end if a < b t = a a = b b = t end indic = 1 while 1 == 1 r = modulo(a. en una funci´ on. b. Si definitivamente. despu´ es del c´ alculo de r se puede utilizar la orden disp(a. el u ´ ltimo return est´ a anidado en un solo bucle y despu´ es acaba la funci´ on. PROGRAMAS En el ejemplo anterior. Por ejemplo. despu´ es el de b y finalmente el de a.

cuyo nombre es exactamente f.6.1 C´ alculo num´ erico del gradiente En este ejemplo se desea aproximar num´ ericamente el gradiente de una funci´ on.4. EJEMPLOS 33 4. Cuando se desea cambiar de funci´ on. .6.. son simplemente casos que pretenden ilustrar la manera de programar en Scilab.1) for i =1:n xi = x(i) x(i) = xi+h f1 = f(x) x(i) = xi-h f2 = f(x) x(i) = xi g(i) = (f1-f2)/h2 end endfunction Habiendo cargado. el archivo que contiene estas dos funciones. su uso se puede hacer mediante o ´rdenes semejantes a: ...6 Ejemplos Los siguientes ejemplos. (¯ x) ≈ ∂xi 2h donde e1 .. es necesario editar la funci´ on f e introducir los cambios necesarios. en forman la base can´ onica. mediante getf . //-------------------------------------------------------function fx = f(x) fx = 3*x(1)^2 + 5*x(2) endfunction //-------------------------------------------------------function g = gradf(x) // gradiente de la funcion f en el punto x //******** h = 0.. 4. e2 ..001 //******** h2 = 2*h n = max(size(x)) g = zeros(n. que va n de R en R. A continuaci´ on aparece la funci´ on f y la funci´ on que aproxima el gradiente. La aproximaci´ on utilizada es ∂f f (¯ x + hei ) − f (¯ x − hei ) . En ellos se busca m´ as la claridad que la eficiencia num´ erica.

gr = grad(func1. //-------------------------------------------------------function fx = func1(x) fx = 3*x(1)^2 + 5*x(2) endfunction //-------------------------------------------------------function fx = func2(x) fx = 3*x(1) + 5*x(2)^3 endfunction //-------------------------------------------------------function g = grad(funcion. 4]. La u ´ nica diferencia con respecto al m´ etodo tradicional que se ve en los cursos de .2 Matriz escalonada reducida por filas En el siguiente ejemplo se obtiene la matriz escalonada reducida por filas de una matriz dada. 4]. PROGRAMAS Si se desea una funci´ on que eval´ ue el gradiente de varias funciones diferentes sin tener que editar cada vez la misma funci´ on f. entonces se debe pasar la funci´ on como uno de los par´ ametros. x). gr = gradf(x) CAP´ ITULO 4. x) 4. fp = grad(func2.001 //******** h2 = 2*h n = max(size(x)) g = zeros(n.6. x) // gradiente de funcion en el punto x //******** h = 0.1) for i =1:n xi = x(i) x(i) = xi+h f1 = funcion(x) x(i) = xi-h f2 = funcion(x) x(i) = xi g(i) = (f1-f2)/h2 end endfunction //-------------------------------------------------------El llamado se puede hacer as´ ı: x = [3.34 x = [3.

titulo) // escribe una matriz en la pantalla . . EJEMPLOS 35 ´ Algebra Lineal es que se hace pivoteo parcial.\n’) end x = x(:) if argn(2) == 2 printf(’%s :\n’. j ) y se intercambia la fila i con la fila del mayor valor absoluto.n2) m = min(n1. titulo) // escribe un vector en la pantalla //********************* formato = ’%10.4f’ numNumerosPorLinea = 5 //********************* nnl = numNumerosPorLinea [n1. function escrVect(x. 0) ..0e-7. j ). se busca que el pivote sea lo m´ as grande posible en valor absoluto con el fin de disminuir los errores de redondeo. n2]= size(x) n = max(n1. Si la posici´ on del pivote es (i. El llamado merf(A. x(i)) if modulo(i. En merf se utiliza argn(2) que indica el n´ umero de par´ ametros en el llamado a la funci´ on y permite definir los dos u ´ ltimos por defecto.n2) if m > 1 printf(’ESCRVECT: x no es un vector. titulo) end for i=1:n printf(formato. Esta funci´ on merf permite escribir en pantalla resultados parciales de los c´ alculos mediante la funci´ on escrMatr que a su vez llama la funci´ on escrVect.. j ). Para una matriz cualquiera.0e-7) es equivalente a merf(A. 1..4. (i + 1. 1. j ). El llamado merf(A) es equivalente a merf(A. nnl) == 0 | i == n printf(’\n’) end end endfunction //------------------------------------------------------function escrMatr(A. 0). entonces se busca el mayor valor absoluto en las posiciones (i. es decir.6.0e-12. la orden norm(rref(a)-merf(a)) debe producir un valor muy cercano a cero. (m. 1.

j))) if vmax > eps0 imax = i+i0-1 if imax ~= i t = a(i. Se hace pivoteo parcial para buscar para disminuir los errores numericos. 0 no se escriben los resultados parciales if argn(2) == 1 eps0 = 1.j:n) = a(imax. ’matriz inicial’). n] = size(A) for i=1:m escrVect(A(i. end [m.j:n) = t . i0] = max(abs(a(i:m. titulo) end [m. IRP) // // // // // // Matriz escalonada reducida por filas. Si |t| <= eps0.:)) end endfunction //-------------------------------------------------function a = merf(A. se considera nulo. Si IRP = 1 se escriben resultados parciales. escrMatr(a.36 CAP´ ITULO 4. n] = size(a) eps0 = eps0*max(abs(A)) a = A i = 1 j = 1 while i <= m & j <= n [vmax.j:n) a(i.0e-12 IRP = 0 end if argn(2) == 2 IRP = 0 end if IRP == 1. PROGRAMAS if argn(2) == 2 printf(’%s :\n’. eps0.j:n) a(imax.

j+1:n) = a(k.a(k. j) escrMatr(a) end i = i+1 else a(i:m. Si n = m − 1. el polinomio pasa exactamente por los m puntos. utilizando las ecuaciones normales. EJEMPLOS if IRP == 1 printf(’interc. (x2 .. filas %d y %d\n’. y1 ).j) a(i.j) = 1 if IRP == 1 printf(’dividir fila %d por el pivote: %f\n’. i.1) end j = j+1 end endfunction 37 4. ym ).0 end end if IRP == 1 printf(’buscar ceros en la columna %d\n’.j+1:n) = a(i. Los c´ alculos que hay que hacer.6. i. n 1 x m x2 m · · · xm .3 Aproximaci´ on polinomial por m´ ınimos cuadrados Dados m puntos (x1 . se desea encontrar un polinomio de grado n ≤ m − 1 que pase lo m´ as cerca posible de estos puntos. aij0) escrMatr(a) end for k = 1:m if k ~= i a(k.j) a(i.. y2 ). imax) escrMatr(a) end end aij0 = a(i. en el sentido de m´ ınimos cuadrados.j+1:n) a(k.. son los siguientes:   n 1 x 1 x2 · · · x 1 1   1 x 2 x2 · · · xn 2 2  A= .j+1:n) .j)*a(i.j) = zeros(m+1-i. . tales que xi = xj si i = j (no hay dos xi iguales).6.j+1:n)/a(i.4.j) = 0. (xm .

el polinomio de aproximacion por // minimos cuadrados. ind] = aproxPol(x. y. n) // Dados los vectore x.\n’) return end if m <> my T . PROGRAMAS resolver (AT A) c = AT y. ’c’) yy = [] ind = 0 x = x(:) y = y(:) [m. p(x) = c0 + c1 x + c2 x2 + · · · + cn xn . nx ] = size(x) [my. c = c0 c1 c2 .. y ˜ = Ac. Si n = m − 1. se requiere que m >= n+1 // ind valdra 0 si hubo problemas // 1 si el proceso funciono bien. function [p. y deben ser vectores. ny ] = size(y) if nx > 1 | ny > 1 printf(’x. tal que // p(x(i)) ~ y(i) // Si hay m puntos. se resuelve directamente.38 CAP´ ITULO 4. cn . donde. no hay que resolver el sistema dado por las ecuaciones normales. y. yy. A c = y. ’x’. // yy contendra los valores del polinomio p en los // diferentes puntos x(i) p = poly([0].. se desea // buscar p.

4.\n’) 39 if n < 0 | m < n+1 printf(’ n = %d inadecuado.0e-16*max(abs(x)) for i=1:m-1 for j = i+1:m if abs(x(i)-x(j)) <= eps0 printf(’ x(i) repetidos.n+1) for i=1:m A(i. y return end deben ser del mismo tama~no.\n’. ’x’.1) = 1 xi = x(i) xij = 1 for j =1:n xij = xij*xi A(i.j+1) = xij end end if m == n+1 c = A\y else c = (A’*A)\(A’*y) end p = poly(c.6. EJEMPLOS printf(’x. n) return end // no debe haber xi repetidos eps0 = 1.\n’) return end end end ind = 1 A = zeros(m. ’c’) yy = A*c endfunction .

2.4 Factores primos En el siguiente ejemplo. En este vector fila los factores primos aparecen repetidos seg´ un 3 2 la multiplicidad.6. los factores ser´ an 2. // 1 si el proceso se realizo bien. return.40 CAP´ ITULO 4. se construye un vector fila con los factores primos de n. // Si n es primo. function [p. PROGRAMAS 4. La funci´ on factores hace uso de la funci´ on primerDiv que calcula el divisor m´ as peque˜ no de un entero superior a uno. indic] = factores(n) // Construccion del vector fila p con los factores // primos del entero n >= 2. // indic valdra 0 si n es un dato malo. // 1 si el proceso se realizo bien. return n no es entero. return ind = 1 n1 = floor(sqrt(n)) for p =2:n1 if modulo(n. p = 0 indic = 0 if n < 2 printf(’PRIMERDIV: end if int(n) <> n printf(’PRIMERDIV: end n < 2. Por ejemplo. p = [] indic = 0 . // indic valdra 0 si n es un dato malo. para n = 72 = 2 × 3 . entonces p = n. indic] = primerDiv(n) // calculo del primer divisor (divisor mas peque~no) // de un entero n >= 2. 2. p) == 0.\n’). 3 y 3. end end p = n endfunction //-------------------------------------------------------function [p. // El producto de los elementos de p sera n. para un entero n ≥ 2.\n’).

pero que tambi´ en pueden ser usadas directamente desde el ambiente Scilab. t) // calculo de la altura de un disparo hacia arriba // con velocidad inicial v0 en el tiempo t. MISCELANEA 41 if n < 2 printf(’FACTORES: end if int(n) <> n printf(’FACTORES: end ind = 1 while n > 1 pi = primerDiv(n) p = [p pi] n = n/pi end endfunction n < 2. false ). function h = altura(v0.\n’).´ 4. pero devuelve %T o %F (true. function h = altura(v0. dependiendo de que la variable exista o no exista. if exists(’gravedad’) == 0 gravedad = 9. t) // calculo de la altura de un disparo hacia arriba .8 end h = v0*t . Algunas veces se desea saber. Se puede utilizar la funci´ on exists . El nombre de la variable va entre comillas simples o dobles. return 4. que devuelve 1 o ´ 0. return n no es entero.5*gravedad*t*t endfunction La funci´ on isdef hace el mismo trabajo. dentro de un gui´ on o dentro de una funci´ on. si una variable ya ha sido creada anteriormente (en la misma sesi´ on de Scilab) bien sea directamente en el ambiente Scilab o bien sea en otro gui´ on.\n’). que se pueden usar para hacer programas en Scilab.0.7.7 Miscel´ anea En esta secci´ on hay varias funciones relacionadas con diversos temas.

0e-16 ) dan como resultado el vector ! T T F T ! La orden find permite obtener las posiciones de un vector booleano donde el valor es %T .8 end h = v0*t .0e-10 -1.0e-16 ) dan como resultado el vector ! 1. x = [ -2 -1. correspondientes a 1 o ´ 0). Por ejemplo. las comparaciones dan vectores de variables boolenas (valor %T o %F.0e-10 y = [ 3 3 res = ( x <= y ) da como resultado el vector ! T T T F ! Las o ´rdenes x = [ -2 -1. un vector con las posiciones de x donde hay valores no despreciables (ni nulos ni casi nulos). Cuado se involucran vectores de manera adecuada.42 CAP´ ITULO 4. 4 ] -1. PROGRAMAS // con velocidad inicial v0 en el tiempo if ~isdef(’gravedad’) gravedad = 9.0e-20 3 4] 3] . 4.0e-20 res = ( abs(x) >= 1. las o ´rdenes x = [ -2 -1. ! o sea.0. 2. Por ejemplo.0e-10 -1.0e-20 4 ] p = find( abs(x) >= 1.5*gravedad*t*t endfunction t.

a = -2.0 −2 −1 0 1 2 3 hace la gr´ afica de seno(x) en el intervalo [−2.4 −0. b = 3. basta con construir un vector con valores de x en el intervalo [a.01:b. 43 . y) 1.4 0. y = sin(x).6 −0.0 0. b] y otro vector con los valores de f en los puntos del primer vector. Por ejemplo. x = a:0.1 Dos dimensiones Para hacer la gr´ afica de la funci´ on f : [a.8 −1.Cap´ ıtulo 5 ´ GRAFICAS 5.6 0. 3]. plot2d(x.2 −0.8 0.2 0 −0. b] → R.

*x . pero si el espaciamiento es muy peque˜ no la l´ ınea poligonal se confunde con una curva suave. y = sin(x). b = 3. pero es inoficioso hacerlo muy peque˜ no.5*x. Los valores de x se tomaron con un espaciamiento de 0. plot2d(x. x = a:0.sin(x)) xbasc(). los datos de plot2d deben estar en columnas o en matrices. la primera en el eje x. Si el espaciamiento es muy grande. Esto hace que la gr´ afica se vea. Cuando se da la orden para una segunda gr´ afica.cos(x)) plot2d(x. y. Muy posiblemente despu´ es de la segunda orden plot2d. GRAFICAS Obviamente los vectores x. En resumen. y tienen el mismo tama˜ no. z son vectores columna con el mismo n´ umero de filas. y) En una sesi´ on de Scilab. no s´ olo continua sino tambi´ en suave.2. plot2d(x. en la gr´ afica aparecer´ an las dos “curvas” superpuestas.sin(x)) plot2d(x. y. en la gr´ afica aparecer´ an adem´ as 3 etiquetas (o r´ otulos). Las o ´rdenes siguientes permiten obtener la gr´ afica de una par´ abola: a = -2. Observe la diferencia entre los dos grupos de o ´rdenes siguientes: plot2d(x. ’sen(t)’. la primera vez que se hace una gr´ afica. De hecho siempre Scilab hace l´ ıneas poligonales. esta aparece inmediatamente en la pantalla. x = a:0. mediante un clic. Es necesario. entonces se puede dar la orden . y) dar´ a una gr´ afica continua pero poligonal y no suave. Para esto. a = -2. y = 0. la segunda en el eje y y la tercera ser´ a la etiqueta general de la gr´ afica.44 ´ CAP´ ITULO 5. b = 3. por ejemplo.01. el espaciamiento debe ser peque˜ no. ’t’. plot2d(x. Para limpiar la ventana gr´ afica se utiliza xbasc(). En la misma figura pueden aparecer varias funciones.cos(x)) Si se da la orden plot(x.5:b. Si x. ’Ejemplo 1’).05:b. ´ esta es creada pero no aparece autom´ aticamente en la pantalla. activar la ventana de la gr´ afica.

5. [y z] ) 45 cuyo efecto es tener en la misma figura las gr´ aficas producidas por las o ´rdenes plot2d(x. "x". [y z sin(2*x)]. Por ejemplo xtitle("Funciones trigonometricas". Por ejemplo. a = 0. creciente o decreciente. una de las formas de utilizar plot2d es plot2d(x.14 y la gr´ afica de la tangente entre −1 y 1. En la figura producida por el siguiente ejemplo est´ a la gr´ afica de seno entre 0 y 3. leg="sen(x)@cos(x)@sen(2x)" ) Despu´ es de haber hecho una gr´ afica. DOS DIMENSIONES plot2d(x. el segundo para el eje horizontal y el tercero para el eje vertical. es decir. obtener la gr´ afica de una funci´ on f definida mediante una funci´ on de Scilab. x1 = (a:h:b)’. donde u y v son matrices del mismo tama˜ no. n = 100.z) . s´ olo se necesita el vector de valores de xi . "") En resumen. Se utiliza la opci´ on leg separando los letreros por medio de @. a).05:3)’. Supongamos que se ha definido la siguiente funci´ on function fx = func4(x) fx = sin(x)-tan(x) .1. h = (b-a)/n. b = 1. y = sin(x1). a = -1. usando fplot2d . b = 3. El primero para el letrero general. Entonces en la misma figura aparecer´ an la gr´ afica de la primera columna de u con la primera columna de v. y = sin(x).14. [y z sin(2*x)]) En este caso Scilab asigna colores diferentes a cada una de las curvas. x2 = (a:h:b)’. plot2d([x1 x2]. h = (b-a)/n.y) y plot2d(x. v). z = tan(x2). plot2d(x. En este caso. Una forma m´ as general es plot2d(u. x = (-2:0. En la figura habr´ a tantas gr´ aficas como columnas tenga la matriz a. todos los tres deben ser cadenas. se le pueden agregar letreros. Para conocer la correspondencia entre colores y curvas se pueden colocar letreros (“legend”) para las curvas. Este vector debe ser mon´ otono. que tiene 3 par´ ametros. Tambi´ en se puede. [y z]). la gr´ afica de la segunda columna de u con la segunda columna de v. plot2d(x. donde x es un vector columna y a es una matriz con el mismo n´ umero de filas que x. de m filas y n columnas. Se usa xtitle . z = cos(x). etc.

01:1. cada lista con un s´ ımbolo diferente. Los valores pueden ser 0. Es posible dibujar.2)’. func4b) Algunas veces se desea. es menor o igual a cero. Por ejemplo: xbasc(). −9 El significado de los cinco primeros es el siguiente: 0: -1 : -2 : -3 : -4 : Obviamente en la gr´ afica aparecen reducciones de estos s´ ımbolos. sin que haya “continuidad”.*x + 2. deff("[y] = func4b(x)". que los puntos no est´ en unidos por un segmento de recta.2:3.2)’. Entonces se puede obtener la gr´ afica mediante u = (-1:0. tipo = -1. el estilo.46 endfunction ´ CAP´ ITULO 5. fplot2d(u. xbasc(). x = (-3. −2.. sino dibujar los puntos.5") fplot2d(t. dos listas de puntos (con igual cantidad de puntos). y = sin(x). en la gr´ afica aparecen los puntos representados por un s´ ımbolo. . Las siguientes o ´rdenes muestran un ejemplo.2:0. mediante getf .. Se puede obtener la gr´ afica mediante: t = (-1:0. no obtener la curva. [sin(x) cos(x)].2)’.2:3. func4) Si la funci´ on es sencilla. en este ejemplo la variable tipo. "y = x. plot2d( x. x = (-3. GRAFICAS y que se ha cargado el archivo donde est´ a definida. −1.01:1)’. o sea. Una forma de hacerlo es mediante un argumento adicional. tipo) Si el estilo. [-1 -2] ) + × · .. al mismo tiempo..2:0. plot2d( [x x]. y.. no es necesario crear la funci´ on en un archivo.

Supongamos que se ha definido la siguiente funci´ on function fst = func5(s.2. n = size(v. d].. end end plot3d(u.1).. . zeros(m. i=1:m for j = 1:n w(i.1:3)’.05:2)’.. por ejemplo.v[j]). para este ejemplo. (-3:0.t^2 endfunction y que se ha cargado el archivo donde est´ a definida.).1). mediante getf .5. v. Basta con dar dos vectores. d] y una matriz con los valores f (.05:3)’. De manera an´ aloga a dos dimensiones. func5) Esta funci´ on fplot3d construye la matriz de valores f (u[i]. 161 × 221. de tama˜ no. Para hacer la gr´ afica de la funci´ on restringida al rect´ angulo [a.2 Tres dimensiones Sea f : R2 → R. b] × [c. Entonces se puede obtener la gr´ afica mediante u = (-4:0. w). Adem´ as si u y v son muy grandes. u = v = m = w = for (-2:0. En este caso Scilab muestra un aviso semejante a: stack size exceeded (Use stacksize function to increase it) . v.j) = 5*u(i)^2 .. b]. Esto se demora algunos segundos. fplot3d(u. v = (-5:0.. TRES DIMENSIONES 47 5. basta con construir un vector con valores de la primera variable en el intervalo [a. otro con valores de la segunda variable en el intervalo [c. t) fst = 5*s^2 .n).. uno con las coordenadas de la primera variable y otro con las coordenadas de la segunda variable.v(j)^2.05:4)’. y ) = 5x2 − y 2 . es posible graficar por medio de fplot3d una funci´ on f definida por medio de una funci´ on de Scilab. size(u.. la matriz podr´ ıa ser demasiado grande. Por ejemplo. f (x.

5). Tambi´ en.n). i=1:m for j = 1:n w(i. stacksize(2000000) Se pueden obtener curvas de nivel mediante la funci´ on contour. Este tama˜ no se puede modificar mediante la funci´ on stacksize.48 ´ CAP´ ITULO 5. v. Su uso es muy semejante al de plot3d pero con un par´ ametro adicional que indica el n´ umero de curvas de nivel.1). (-3:0.1:3)’. GRAFICAS indicando que el tama˜ no de la pila no es suficiente para lo solicitado.2:4)’. Su uso es an´ alogo al de fplot3d pero con un par´ ametro adicional que indica el n´ umero de curvas de nivel. w. n = size(v. end end contour(u. Por ejemplo: u = v = m = w = for (-2:0. mediante fcontour. v = (-4:0. Por ejemplo: u = (-4:0.3 Otras funciones La siguiente lista contiene los nombres de la mayor´ ıa de la funciones para gr´ aficas.j) = 5*u(i)^2 + v(j)^2. v. size(u. 7) 5. zeros(m.2:5)’.1). func5. por ejemplo. fcontour(u. addcolor alufunctions black bode champ champ1 chart colormap contour contour2d contour2di contourf dragrect drawaxis driver edit_curv errbar eval3d eval3dp evans fac3d fchamp fcontour fcontour2d fec fgrayplot fplot2d fplot3d fplot3d1 gainplot genfac3d geom3d getcolor getfont getlinestyle getmark getsymbol gr_menu graduate graycolormap grayplot graypolarplot hist3d histplot hotcolormap isoview legends locate m_circle Matplot Matplot1 milk_drop nf3d nyquist param3d param3d1 paramfplot2d plot plot2d plot2d1 plot2d2 plot2d3 plot2d4 plot3d plot3d1 plot3d2 plot3d3 plotframe plzr polarplot printing . se pueden obtener curvas de nivel de una funci´ on definida en una funci´ on de Scilab.05:2)’.

con las opciones File Export Postscript nombre-del-archivo El nombre del archivo debe ser dado sin extensi´ on. la creaci´ on de archivos Postscript o de otros tipos de formato puede ser realizada por medio de la barra de men´ u de la ventana de la gr´ afica.4 Creaci´ on de un archivo Postscript Una vez hecha la gr´ afica. Observe que para exportar hay otras posibilidades: Postscript No Preamble: Postscript-Latex Xfig GIF PPM Otra forma de crear archivos postscript es mediante las o ´rdenes: driver xinit xend.4. Utilice la ayuda de Scilab par obtener informaci´ on sobre su uso. La orden xbasimp permite enviar una gr´ afica a una impresora postscript o a un archivo. CREACION replot rotate scaling sd2sci secto3d Sfgrayplot Sgrayplot sgrid square subplot titlepage winsid xarc xarcs xarrows xaxis xbasc xbasimp xbasr xchange xclea xclear xclick xclip xdel xend xfarc xfarcs xfpoly xfpolys xfrect xget xgetech xgetmouse xgraduate xgrid xinfo xinit xlfont xload xname xnumb xpause xpoly xpolys xrect xrects xrpoly xs2fig xsave xsegs xselect xset xsetech xsetm xstring xstringb xstringl xtape xtitle zgrid 49 5.´ DE UN ARCHIVO POSTSCRIPT 5. .

En cambio.i+1:n)*x(i+1:n) )/u(i. es mediante x = A\b Si la matriz es singular o casi singular. en un computador espec´ ıfico).u(1:i-1. x = zeros(n. Para medir el tiempo se puede puede utilizar la funci´ on timer(). pero es m´ as eficiente resolverlo usando la factorizaci´ on de Cholesky: y = zeros(n.1 Sistemas de ecuaciones lineales Como se vi´ o anteriormente.1). Scilab muestra una advertencia. Por ejemplo. y(1) = b(1)/u(1. 50 .78 segundos. Si la matriz es definida positiva. for i=n-1:-1:1 x(i) = ( y(i) . si n = 1500.1). end La diferencia en el tiempo se nota para valores grandes de n. resolver el sistema por medio de x = A\b funciona bien.33 “segundos” (en realidadson unidades de tiempo. end x(n) = y(n)/u(n.i)’*y(1:i-1) )/u(i. si se tiene un matriz A de tama˜ no n × n y un vector b de tama˜ no n × 1.n). la manera eficiente de reolver el sistema Ax = b.1).i).u(i. la soluci´ on x = A\b gasta 12.Cap´ ıtulo 6 ´ ´ METODOS NUMERICOS 6. for i=2:n y(i) = ( b(i) . no exactamente segundos.i). obtener la soluci´ on utilizando la factorizaci´ on de Cholesky dura 2. u = chol(a).

se puede resolver el sistema Ax = b utilizando A\b. SOLUCION INIMOS CUADRADOS 51 Para economizar memoria se hubiera podido efectuar el c´ alculo de y y de x sobreescribiendo encima de b. Entonces en Scilab se requiere una matriz de dos columnas con los ´ ındices (n´ umeros enteros entre 1 y n) y un vector con los valores: ij = [1 1. es muy probable que el sistema no tenga soluci´ on. 6. Una versi´ on. con menos o ´rdenes. 2 1 . donde A es un matriz m × n. el ´ ındice de la fila el ´ ındice de la columna y el valor. 5 5] v = [-8 1.14 3 20]’ x = A\b Construida de esa manera. para cada entrada no nula. 2 3. 4 4.12 -2 5 0. 1 5.14 4 -1 20]’ A = sparse(ij.2. pero ineficiente. x = u\y.´ POR M´ 6. m ≥ n.12 segundos.12 5 0. dado que hay m´ as ecuaciones que inc´ ognitas. En este caso se busca obtener un x que minimice el cuadrado de la norma euclidiana del error. Una matriz dispersa (sparse ) es aquella que tiene muchos ceros y muy pocos elementos no nulos. v) b = [-6. 2 2. estas tres o ´rdenes duran 15.88 3.14 0   0 0 4 −1  0 0 0 20 basta con almacenar. podr´ ıa ser: u = chol(a). o sea .5 10 3. Si −8  −2  A=  0  0 0   0 0 0 1.3 3. 4 5. Por ejemplo. con n = 1500.5 0 0   0 10 3.5 13. Esta forma de almacenamiento es u ´ til cuando A es muy grande y muy dispersa.2 Soluci´ on por m´ ınimos cuadrados Cuando se tiene el sistema Ax = b. 3 4. y = (u’\b).

1 endfunction Despues de haber cargado esta funci´ on. 6. 5 6] b = [3 7 11. Un par´ ametro opcional. A = [1 2.cos(x) + 0. Por ejemplo para resolver x − ex − cos(x) + 0.3 Una ecuaci´ on no lineal Para resolver f (x) = 0.1 = 0. function fx = func156(x) fx = ( x . se utiliza fsolve d´ andole como par´ ametros.52 ´ ´ CAP´ ITULO 6. donde f es una funci´ on de variable y valor real. . que puede acelerar la obtenci´ on de la soluci´ on. 1 + x2 es necesario definir una funci´ on de Scilab donde est´ e f y despu´ es utilizar fsolve. la aproximaci´ on inicial y la funci´ on: r = fsolve(0. la soluci´ on por m´ ınimos cuadrados se puede obtener mediante x = A\b o mediante x = pinv(A)*b La primera forma es m´ as eficiente. se utiliza fsolve. METODOS NUMERICOS minimizar ||Ax − b||2 2 Por ejemplo. 3 4. es otra funci´ on de Scilab donde est´ e definida la derivada.exp(x) )/( 1 + x*x ) .1]’ En este caso. func156) Con otra aproximaci´ on inicial podr´ ıa dar otra ra´ ız.

4 : el m´ etodo avanza muy lentamente. Una vez escrita la funci´ on y cargado el archivo donde est´ a f . dado un vector columna x. Es un vector con la soluci´ on. La funci´ on f debe estar definida en una funci´ on de Scilab.6. Si se dispone de una funci´ on donde est´ a definida la matriz jacobiana.4. f3) El primer par´ ametro de entrada es la aproximaci´ on inicial de la soluci´ on.10*x(3) + 1 endfunction El llamado de fsolve es de la forma [x. donde. 3 : la tolerancia permitida es muy peque˜ na. se utiliza fsolve . x2 1 + x 1 x2 + x 3 − 3 = 0 . Por ejemplo. si ´ esta fue obtenida. calcule el vector columna f (x). 2 : muchos llamados a la funci´ on. SISTEMA DE ECUACIONES NO LINEALES 53 6.3 fx(2) = 2*x(1) + 3*x(2)*x(3) . Para el ejemplo anterior la funci´ on puede ser function fx = f3(x) n = size(x.5 fx(3) = (x(1) + x(2) + x(3))^2 . Por ejemplo. El par´ ametro info puede tener 5 valores: 0 : n´ umero inadecuado de par´ ametros de entrada. 1 : se obtuvo la soluci´ on con la precisi´ on deseada. info] = fsolve([3 4 5]’. (x1 + x2 + x3 )2 − 10x3 + 1 = 0 . Aqu´ ı 0 es el vector nulo.1) fx(1) = x(1)^2 + x(1)*x(2) + x(3) . 2x1 + 3x2 x3 − 5 = 0 . El vector fx es el vector f (x).4 Sistema de ecuaciones no lineales Dada una funci´ on f : Rn → Rn se desea encontrar un vector x tal que f (x) = 0. function J = jacf3(x) t = 2*(x(1)+x(2)+x(3)) J = [ 2*x(1)+x(2) x(1) 1 . entonces fsolve trabajar´ a mucho mejor.1) fx = zeros(n. Hay tres par´ ametros de salida. El segundo es el ´ nombre de la funci´ on donde est´ a definida f . Unicamente el primero es obligatorio. fx.

f (xi )). x = [0. as´ ı lo requiere Scilab.2 0.25 0. yi )). info] = fsolve([3 4 5]’. por m´ ınimos cuadrados.9778 0. yn ) est´ a ordenada de manera creciente de acuerdo a los xi .9139 0. y utilizar la funci´ on inttrap . o sea. x1 < x2 < · · · < xn .54 2 t endfunction 3*x(3) t ´ ´ CAP´ ITULO 6.1 e−x dx 2 se utiliza intg . Puede ser..sci function fx = f57(x) fx = exp(-x*x) endfunction y despu´ es de cargarla.4 0. Supongamos. pero se conoce una tabla de valores (xi . y) . es necesario tener dos vectores con los valor xi y yi . de la funci´ on f (representada por los valores (xi .5 0.3 0..5 Integraci´ on num´ erica Para obtener una aproximaci´ on del valor de una integral definida. METODOS NUMERICOS 3*x(2) t-10 ] Entonces el llamado de fsolve es de la forma [x. f3. Para eso es necesario definir en Scilab la funci´ on que se va a integrar. . ’y = exp(-x*x)’) I = intg(0..1. 0.5.5. Para obtener el valor aproximado de la integral. directamente en el ambiente Scilab: deff(’[y] = f53(x)’.8521 0. y1 ). yi ). 0.1. que la lista de valores (x1 . 6.5]’ y = [ 0.9394 0. o simplemente una tabla de valores (xi .9608 0. f57) Algunas veces no se conoce una expresi´ on de la funci´ on f .1 0. por ejemplo. f53) Tambi´ en se puede definir una funci´ on en un archivo . dar la orden I = intg(0. jacf3) El problema de encontrar la soluci´ on.15 0. de un sistema de ecuaciones no lineales est´ a en el cap´ ıtulo siguiente. entre x1 y xn . fx.7788]’ I = inttrap(x.9900 0. 0. (xn .

3 ). Por ejemplo. Fx(4) = 10*( x(1) + x(2) + x(3) . 4). DERIVACION 55 6. f2 (x). una vez cargada. . donde n fi : R → R . entonces f (x) = ( f1 (x). 4. debe ser un vector columna. Fx(3) = ( x(1) + x(2) + x(3) )^2 . El segundo par´ ametro. Fx(1) = x(1)^2 + x(1)*x(2) + x(3) .3.6 Derivaci´ on num´ erica Para obtener una aproximaci´ on num´ erica de la derivada de una funci´ on en un punto se puede usar derivative .1). Si se tiene una funci´ on f : Rn → Rm .3. [3 4 5]’) da como resultado la matriz jacobiana de la funci´ on f (definida en f157 ) evaluada en el punto x = (3. function Fx = func157(x) Fx = zeros(4. El segundo par´ ametro. el punto x.. el punto x. .. endfunction entonces la orden derivative(func157. debe ser un vector columna. [3 4]’) da como resultado un vector fila con el gradiente de f en x = (3. function fx = func90(x) // funcion de Rosenbrock t1 = x(2)-x(1)*x(1) t2 = 1-x(1) fx = 10*t1*t1 + t2*t2 + 4 endfunction entonces la orden derivative(func90. 0. La matriz jacobiana es de tama˜ no m × n (en este ejemplo: 4 × 3 ). la orden d = derivative(f57. 5). por ejemplo.3) da una aproximaci´ on num´ erica de la derivada de la funci´ on en x = 0..3. Si se tiene una funci´ on f : Rn → R. fm (x) ). Si f57 es la funci´ on definida anteriormente.5.10*x(3) + 1.6. En la fila i est´ a el gradiente de fi .´ NUMERICA ´ 6. Fx(2) = 2*x(1) + 3*x(2)*x(3) .

x = [0 0. ft) Tambi´ en se puede hacer interpolaci´ on utilizando funciones spline. una funci´ on que pase por esos puntos. ft) 6. n + 1 ≤ m.8 9. y.8]’. ft = interp(t.8 6.4 0. de la funci´ on spline interpolante.8 7. t = (x(1):0.4 0. Para hacer esto en Scilab.8 6. ft = interpln( [x’.. d).2 8. Es necesario construir .2 0. que aproxime por m´ ınimos cuadrados. ym ) se desea obtener un polinomio de grado n.2 0.. y = [4. nx = size(x. (xm .2 7. . (xm . En el primero. La segunda fila tiene los valores yi .4 1.8 2]’.6 0.01:x(nx))’. En el segundo paso se eval´ ua la funci´ on interpolante en una lista de puntos t1 .6 1.2 8.8 9.8 7. (x2 . (x2 . .7 Interpolaci´ on Cuando hay m puntos (x1 .01:x(nx))’. El segundo par´ ametro es un vector donde est´ an los valores x en los que se desea evaluar la funci´ on interpolante (af´ ın por trozos). y2 ). y’]. tp x = [0 0.2 1... en los puntos xi .2 6.8 1 1. La primera fila tiene los valores xi . y2 ).1).8]’. a partir de un lista de puntos (x1 . t = (x(1):0..4 1. Tiene dos par´ ametros... METODOS NUMERICOS 6.8 1 1.2 7.8 9.2 8. se requieren dos pasos. La funci´ on interpln permite hacer interpolaci´ on lineal.2 1.2 8. y = [4. con el objetivo de evaluarla en otros valores x intermedios.2 7. nx = size(x.6 1... (x2 . el primero es una matriz de dos filas.. y1 ).8 9. . t). y). . ym ) se desea obtener la funci´ on interpolante. y1 )..8 2]’.8 9. x.8 9. (xm .2 7. t2 . xbasc() plot2d(t. Deben estar en orden creciente. xbasc() plot2d(t.. y2 ).2 6.56 ´ ´ CAP´ ITULO 6.1). y1 ).8 Aproximaci´ on por m´ ınimos cuadrados Cuando hay m puntos (x1 . ym ) se calculan las derivadas.6 0. d = splin(x.

2 6.8 9. A = zeros(m. ft = horner(p. Cambia simplemente la manera de construir la matriz A y la manera de evaluar la funci´ on en los valores del vector t.2 7. APROXIMACION INIMOS CUADRADOS 57 una matriz de tama˜ no m × (n + 1). Tambi´ en se puede hacer.8]’.1).1). ordenados de manera creciente. y = [4. Generalmente. d] = lsq_splin(x. n+1). 2.8 9.. x = [0 0.2 7.8 1 1.8 2]’. X). X.8 9. xbasc() plot2d(t.2 6.4 0. y. Los datos son: los valores xi . los valores yi .). end cf = A\y. ft) Para la aproximaci´ on no es indispensable que los xi est´ en ordenados de manera creciente.2 8. ft) . X = [0 1 2]’ [Y.2 8. ’x’.2 7.8 1 1.2 1.^i.2 8. nx = size(x. exponenciales.8. t).8 2]’.01:x(m))’.´ POR M´ 6.2 7.8]’.8 7. ft = interp(t.8 9. d).6 1. x y m t n = = = = = [0 0.i+1) = x. y los puntos de ruptura (breakpoint ) ordenados de manera creciente.2 8. pero en este ejemplo es necesario para la gr´ afica. (x(1):0.6 1.01:x(nx))’. [4. de manera an´ aloga. logar´ ıtmicas.8 6.8 6. aproximaci´ on por m´ ınimos cuadrados utilizando una combinaci´ on lineal de otras funciones (trigonom´ etricas..2 1. size(x. Y.8 9. p = poly(cf. t = (x(1):0.6 0.4 1.4 1.2 0. despu´ es se eval´ ua este polinomio en algunos valores (pueden ser los mismos xi u otros).2 0. xbasc() plot2d(t. Scilab tiene la funci´ on lsq_splin que permite aproximaci´ on por m´ ınimos cuadrados con funciones spline. resolver por m´ ınimos cuadrados un sistema de ecuaciones. Con ellos se determina la funci´ on spline.6 0. Despu´ es se eval´ ua en los valores deseados.8 7. ’c’).4 0.8 9. for i=0:n A(:.

y) fxy = ( x + y )/( x*x + y*y ) + 4 endfunction se obtiene la soluci´ on aproximada mediante x0 = 2 y0 = 3 t = [2 2.9 Ecuaciones diferenciales ordinarias Una ecuaci´ on diferencial de primer orden con condici´ on inicial se escribe.. y ). x+y +4. y ). en la forma y = f (x. Por ejemplo. generalmente. func158) 6.. t2 .5 2.58 ´ ´ CAP´ ITULO 6. y = Antes de utilizar la funci´ on ode .1 2. tp . x0. . METODOS NUMERICOS 6. Despues de definir y cargar function fxy = func158(x. y (x0 ) = y0 . x2 + y 2 y (2) = 3. es necesario crear en Scilab la funci´ on f y cargarla. en la forma y = f (x. y (x0 ) = y0 .10 Sistema de ecuaciones diferenciales Un sistema de ecuaciones diferenciales ordinarias de primer orden con condiciones iniciales se escribe.. La funci´ on ode eval´ ua aproximaciones del valor de y en valores t1 .2 2.9]’ yt = ode(y0. generalmente. t. .

yt es un matriz de dos filas. y) fxy = zeros(2. x 3 y2 = − y2 x y1 (1) = −1 y2 (1) = 1. y1 = Despues de definir y cargar function fxy = func43(x. Por ejemplo. f : R1+n → Rn . pero con los par´ ametros de dimensi´ on adecuada.1) fxy(1) = 2*y(1)/x + x^3*y(2) fxy(2) = -3*y(2)/x endfunction se utiliza la misma funci´ on ode . 2y1 + x3 y2 . y . func43) 59 En este caso. . En la fila i est´ an las aproximaciones de los valores de yi (tj ).10. SISTEMA DE ECUACIONES DIFERENCIALES pero ahora. t.2:2)’ yt = ode(y0. x0. y y y0 son vectores en Rn .6. x0 = 1 y0 = [-1 1]’ t = (1:0.

es la siguiente: min z = cT x Ai· x = bi . . . todos los problemas deben ser de minimizaci´ on y las desigualdades.. Entre las de uso m´ as frecuente est´ an la forma can´ onica y la forma est´ andar. La forma que m´ as r´ apidamente se adapta a la soluci´ on en Scilab. v ∈ Rn×1 . m u ≤ x ≤ v.1...1 Desigualdades El problema m´ as sencillo para resolver por medio de linpro es el siguiente: min cT x 60 ..1) Obviamente. mediante la funci´ on linpro . optimizaci´ on lineal (o programaci´ on lineal). diferentes de las restricciones de caja (u ≤ x ≤ v ). Las igualdades. Para el caso de Scilab. b ∈ Rm×1 (todos son vectores columna). en los problemas de OL. u. todas las variables deben ser no negativas. La matriz A es de tama˜ no m × n.. i = 1. los vectores c. 7.1 Optimizaci´ on lineal Hay varias maneras o formas de presentaci´ on de problemas de OL. i = m0 + 1. deben estar antes de las desigualdades. En Scilab esto se debe considerar como restricciones de caja o como restricciones usuales.Cap´ ıtulo 7 ´ OPTIMIZACION 7. (7. si las hay. deben ser de la forma ai1 x1 + ai1 x2 + · · · + ai1 xn ≤ bi . Frecuentemente. siempre se puede pasar de una forma a otra sin dificultad.. si las hay. m0 Ai· x ≤ bi .

2 Desigualdades y restricciones de caja Se usa la orden [x. A. z ] = linpro(c. z] = linpro(c. [ 1 1. c x. b) 61 El significado de los tres resultados es el siguiente : x es el vector soluci´ on.4x2 x1 + x2 ≤ 400 x1 + 2x2 ≤ 580 x1 ≤ 300 x ≥ 0. Para resolver el siguiente problema min −x1 − 1. b. 7.4 ]’. 0 -1]. A. b) (7. es necesario reescribir las restricciones de no negatividad: min −x1 − 1. A. lagr es un vector con los coeficientes de Lagrange. u. OPTIMIZACION Ax ≤ b. [-1 -1. lagr. La orden en Scilab es: [x.´ LINEAL 7. [400 580 300 0 0]’. z ] = linpro(c. lg.1. 1 2.1. lg. v) para resolver min cT x . z es el valor o ´ptimo de la funci´ on objetivo. -1 0 .2) ≤ 400 ≤ 580 ≤ 300 ≤0 ≤ 0.4x2 x1 + x 2 x1 + 2x2 x1 −x1 −x2 Su soluci´ on mediante Scilab: c = A = b = [x. 1 0. es T decir.

[ 300 1. [ 1 1. lg. En el problema (7.1). OPTIMIZACION El problema (7. A.0e90]’. A. [400 580 300]’.1).4 ]’.1. m0) El siguiente problema min −x1 − 1.4x2 x1 + x2 ≤ 400 x1 + 2x2 ≤ 580 x1 ≤ 300 x ≥ 0. b. ´ CAP´ ITULO 7. 1 2]. lg.4x2 x1 + x2 = 400 . z ] = linpro(c. v) 7. [-1 -1. se puede resolver mediante las siguientes o ´rdenes: c = A = b = v = [x. zeros(2. [-1 -1. []) Es interesante observar que como no hay restricciones superiores de caja. As´ ı planteado. [400 580]’. b. desigualdades y restricciones de caja Es el caso general (7. Este problema se resuelve mediante la orden [x. v. b.2) se puede resolver con las siguientes o ´rdenes: c = A = b = [x.1) planteado al comienzo del cap´ ıtulo.4 ]’. z ] = linpro(c.62 Ax ≤ b u ≤ x ≤ v. z ] = linpro(c. entonces se utiliza un vector “vac´ ıo”.2) la restricci´ on x1 ≤ 300 se puede considerar como una restricci´ on de caja.3 Igualdades. A. zeros(2. lg. min −x1 − 1. 1 2. [ 1 1. u. 1 0].

v..2.2 Optimizaci´ on cuadr´ atica El problema general de optimizaci´ on cuadr´ atica es muy parecido al caso general de OL.. .1).0e90]’. lg. [-1 -1. Las restricciones siguen exactamente el mismo esquema. [x.. zeros(2. i = m0 + 1. La matriz H debe ser sim´ etrica.´ CUADRATICA ´ 7. 63 se resuelve mediante: c = A = b = v = [x. [ 1 1. m0) Los casos de desigualdades y. [ 300 1.. qx ] = quapro(H. u. lg. OPTIMIZACION x1 + 2x2 ≤ 580 x1 ≤ 300 x ≥ 0. Se usa la funci´ on quapro . b.. A. Consideremos el siguiente problema: min (x1 − 3)2 + (x2 − 4)2 x1 + 2x2 ≤ 3 3x1 + x2 ≤ 4 x ≥ 0. .4 ]’. Su llamado y uso son muy semejantes a los de la funci´ on linpro. b. A. c. 2 1 min q (x) = xT Hx+cT x 2 Ai· x = bi . i = 1. 1) 7. m0 Ai· x ≤ bi . m u ≤ x ≤ v. La u ´ nica diferencia consiste en que la funci´ on objetivo tiene una parte cuadr´ atica 1 T x Qx. son completamente an´ alogos a los de OL. desigualdades y restricciones de caja. . z ] = linpro(c. 1 2].. v. [400 580]’.

c. zeros(2. no se puede evaluar f (x). Las soluciones de estos problemas son x = (1. [-6. A.1 Optimizaci´ on no lineal Optimizaci´ on no restringida El problema que se trata de resolver es simplemente minimizar una funci´ on f : Rn → R.sci . ind1) Par´ ametros de entrada: x: punto donde se va a evaluar f (x). 4]. min f (x1 . 1) y x = (3. qx ] = quapro(H. min f (x) Para su soluci´ on en Scilab se usa la funci´ on optim. OPTIMIZACION Su soluci´ on se puede obtener mediante las o ´rdenes H = c = A = b = [x. 3 1]. si ind1 = 3. si ind2 = 0.3 7. b. Antes de resolver estos dos problemas de minimizaci´ on mediante optim es necesario construir un archivo. −6 2 0 . -8]. por ejemplo de nombre func. gr: gradiente f (x). c= −8 0 2 [ 2 0. x2 ) = 10(x2 − x2 1 ) + (1 − x1 ) . se eval´ uan f (x) y f (x). se eval´ ua f (x). se eval´ ua f (x). 0 2]. si ind1 = 4. x2 ) = (x1 − 3)2 + (x2 − 4)2 . [ 3 . si ind1 = 2. . el primero est´ a dado por la llamada funci´ on de Rosenbrock. [ 1 2. gr. 4).64 Entonces: H= ´ CAP´ ITULO 7. []) 7. ind2] = f_obj(x. Consideremos dos problemas.3. si ind2 < 0. Par´ ametros de salida: fx: valor f (x). se interrumpe la optimizaci´ on. 2 2 min f (x1 .1). lagr. Esta funci´ on que por el momento llamaremos f_obj debe tener la siguiente forma [fx. Se necesita haber definido previamente una funci´ on en Scilab donde se calcule f (x) y el gradiente f (x).

gr = 0.´ NO LINEAL 7. xopt] = optim(ensayo. end endfunction //-----------------------------------------------function [fx. ind2 = 1.1) = 20*(x(2)-x(1)^2). gr = 0. x]=optim(rosenbr. [5. [0. if ind == 2 | ind == 4 fx = 10*(x(2)-x(1)^2)^2 + (1-x(1))^2.3.\func. ind2 = 1. x] = optim(f_obj.0*x. x]=optim(rosenbr. OPTIMIZACION function [fx.sci [fxopt. end endfunction La funci´ on optim se puede llamar de la siguiente forma: [fx. ind2] = rosenbr(x. ’gc’) [fx. ’qn’) [fx. if ind == 2 | ind == 4 fx = (x(1)-3)^2 + (x(2)-4)^2. gr.2*(1-x(1)). x0. [fx.1) = 2*x(2)-8. x0. ind2] = ensayo(x. 0]) 65 La funci´ on optim admite escoger el m´ etodo de minimizaci´ on entre cuasi Newton.. gr(2. gr. ind) fx = 0. x0.1) = -40*x(1)*(x(2)-x(1)^2) .. end if ind == 3 | ind == 4 gr(1.0*x. end if ind == 3 | ind == 4 gr(1. xopt] = optim(rosenbr. ’nd’) .0. Para ello es necesario utilizar ’qn’ ’gc’ o ’nd’. Por ejemplo.0. x0) Para nuestros dos ejemplos espec´ ıficos. gradiente conjugado y no diferenciable. ind) // funcion de Rosenbrock // f(x) = 10(x2-x1^2) + (1-x1)^2 fx = 0. las o ´rdenes pueden ser getf c:\.1) = 2*x(1)-6. 6]) [fxopt. gr(2. La opci´ on por defecto es ’qn’. x]=optim(rosenbr.

para ello se usa el par´ ametro ’ar’ . . ’b’. [fx. o sea. OPTIMIZACION 7.2 Restricciones de caja La funci´ on optim tambi´ en admite restricciones de caja. ’b’. (x1 + x2 + x3 ) − 10x3 + 1. x3 ) = (x2 1 + x1 x2 + x3 − 3. De manera an´ aloga al caso de sistemas de ecuaciones no lineales. Tambi´ en es posible escoger el criterio de parada. Ver la ayuda de la funci´ on optim. v. (usualmente n ≤ m).4 M´ ınimos cuadrados no lineales Dada una funci´ on f : Rn → Rm . min ||f (x)||2 . u. x0. es necesario escribir una funci´ on de Scilab donde se define f (dado un vector columna x calcula el vector columna f (x) ). Por ejemplo function fx = fmc(x) m = 4. x2 . 10(x1 + x2 + x3 ) − 3. 2x1 + 3x2 x3 − 5. sirve para un problema de la forma 2 2 min f (x1 . La o ´rdenes pueden ser: u = [3.3. x2 ) = 10(x2 − x2 1 ) + (1 − x1 ) 3 ≤ x1 ≤ 5 2 ≤ x2 ≤ 10 . Por ejemplo. ’gc’) El par´ ametro ’b’ (bound ) indica que los dos vectores columna siguientes son las cotas de caja. x] = optim(rosenbr. La soluci´ on se hace mediante leastsq . x0 = [0. u. u. x0. x0) [fx. se desea minimizar el cuadrado de la norma euclidiana de f (x). x] = optim(rosenbr. [fx. v. ’b’. ’qn’) v. 7. 2]. x] = optim(rosenbr.66 ´ CAP´ ITULO 7. 10]. v = [5. 0].3). 2 f (x1 .

1]’. fx(3) = (x(1)+x(2)+x(3))^2-10*x(3)+1.4. u. x] = leastsq(fmc. x] = leastsq(fmc. [fx. [3 5 7]’) 67 Tambi´ en el m´ etodo trabaja mejor si se tiene una funci´ on de Scilab donde se calcula la matriz con las derivadas parciales. 7. fx(2) = 2*x(1)+3*x(2)*x(3)-5. x] = leastsq(fmc. [fx. derfmc. ’b’. [4 5 6]’) o para mayor eficiencia. [4 5 6]’) 1 3*x(2) t-10 10 ]. fx(1) = x(1)^2+x(1)*x(2)+x(3)-3. Por ejemplo. ’b’. [fx.2 0 1. derfmc.3).4. function D = derfmc(x) t = 2*(x(1)+x(2)+x(3)).1). x] = leastsq(fmc. M´ INIMOS CUADRADOS NO LINEALES fx = zeros(m. endfunction El llamado de leastsq es muy parecido al de fsolve. D = [ 2*x(1)+x(2) x(1) 2 3*x(3) t t 10 10 endfunction La o ´rden pueden ser: [fx. v. Las o ´rdenes pueden ser: u = [1.1 M´ ınimos cuadrados con restricciones de caja En Scilab se puede resolver el problema de m´ ınimos cuadrados no lineales con restricciones de caja: min ||f (x)||2 u ≤ x ≤ v. v. fx(4) = 10*(x(1)+x(2)+x(3)-3.7. [4 5 6]’) . u. Por ejemplo. v = [10 10 10]’.

lmitool: linear matrix inequalities. para OL. ´ CAP´ ITULO 7. • karmarkar : m´ etodo de Karmarkar. OPTIMIZACION . • semidef : optimizaci´ on semidefinida.68 Otras herramientas de optimizaci´ on son: • lmisolver.

´ INDICE ANAL´ ITICO
π, 9 ’b’, 66 ’c’, 10 ’coeff’, 10 ’e’, 9 ’gc’, 65 ’nd’, 65 ’qn’, 65 ’r’, 10 ’roots’, 10 ’v’, 9 (:), 15 .sce, 22 .sci, 24 \, 20 %, 9 timer, 50 abort, 31 abs, 6, 9 acos, 6 acosh, 6 aleatorio, 7 algoritmo de Euclides, 31 anidamiento, 29 ans, 5 apropos, 8 aproximaci´ on polinomial por m´ ınimos cuadrados, 37 aproximaci´ on por m´ ınimos cuadrados, 56 archivo Postscript, 49 arcocoseno, 6 arcocoseno hiperb´ olico, 6 arcoseno, 6 arcoseno hiperb´ olico, 6 arcotangente, 6 69 arcotangente hiperb´ olica, 7 asignaci´ on, 3 asin, 6 asinh, 6 atan, 6 atanh, 7 ayuda, 8 ’b’, 66 backslash, 20 barra de men´ u, 8, 23 break, 31 C, 32 c, 10 C++, 24 carpeta actual, 26 por defecto, 26 case, 30 ceil, 7, 8 chdir, 27 chol, 19 Cholesky, 19, 50 coeff, 10 coeficiente, 10 columna, 13, 14 comentarios, 24 comparaciones, 27 complejos, 9 conj, 9 conjugado, 9 constantes predefinidas, 9 contour, 48 control de flujo, 27 cos, 7

70 coseno, 7 coseno hiperb´ olico, 7 cosh, 7 cotangente, 7 cotangente hiperb´ olica, 7 cotg, 7 coth, 7 cuasi Newton,, 65 curvas de nivel, 48 def, 54 derivaci´ on num´ erica, 55 derivadas parciales, 67 derivative, 55 descomposici´ on en valores singulares, 20 desigualdades, 60–62 desigualdades lineales de matrices, 68 desviaci´ on est´ andar, 18 det, 16 determinante, 16 diag, 17 diagonal de una matriz, 17 Dialog, 8 diferente, 27 disp, 32 dispersa, 51 divisi´ on, 6, 9 elemento a elemento, 15 e, 9 ecuaci´ on no lineal, 52 ecuaciones diferenciales ordinarias, 58 ecuaciones no lineales, 53 else, 28, 30 end, 28–30 endfunction, 24 ENPC, 1 enteros, 4 espacios en blanco, 5 espectro, 19 estructuras de control, 26, 27 evaluar un polinomio, 11 Exec, 23

´ INDICE ANAL´ ITICO exec, 23, 24, 27 exists, 41 exp, 7 expm, 17 exponencial de una matriz, 17 Export, 49 eye, 14 factores primos, 40 factorizaci´ on de Cholesky, 19 LU, 20 QR, 20 fcontour, 48 fila, 14 File, 23, 25, 49 find, 42 fix, 7 floor, 7, 8 for, 29 format, 9 formato, 9 formato “variable”, 9 formato por defecto, 9 formato predefinido, 9 fplot2d, 45 fplot3d, 47 fprintf, 32 Frobenius, 19 fsolve, 53 funci´ on (programa), 22, 24 funci´ on exponencial, 7 funciones, 6 funciones elementales, 6 funciones matem´ aticas, 6 function, 24 ’gc’, 65 Getf, 25 getf, 25, 27 GIF, 49 Gomez, 2 gradiente, 55, 64

´ INDICE ANAL´ ITICO gradiente conjugado, 65 gradiente num´ erico, 33 gr´ aficas, 43 en dos dimensiones, 43 en tres dimensiones, 47 gui´ on (programa), 22 Help, 8 help, 8 Help Dialog, 8 horner, 11 i, 9 if, 28 igual, 27 igualdades, 62 imag, 9 incremento, 29 INRIA, 1 int, 7, 8 integraci´ on num´ erica, 54 interpl, 56 interpolaci´ on, 56 linea, 56 intg, 54 inv, 16 inversa de una matriz, 16 inversa generalizada, 20 inverso aditivo, 6 isdef, 41 jacobiana, 53 jacobiana, matriz, 55 Karmarkar, 68 karmarkar, 68 leastsq, 66 leg, 45 libro, 2 l´ ımite inferior, 29 superior, 29 linear matrix inequalities, 68 linpro, 60 LMI, 68 lmisolver, 68 lmitool, 68 log, 7 log10, 7 log2, 7 logaritmo decimal, 7 logaritmo en base dos, 7 logaritmo natural, 7 lu, 20 LU, factorizaci´ on, 20

71

Matlab, 2 matrices, 13 matriz aleatoria, 14 de ceros, 14 de derivadas parciales., 67 de unos, 14 definida positiva, 19 diagonal, 17 dispersa, 51 escalonada reducida por filas, 17, 34 identidad, 14 inversa, 16 jacobiana, 53, 55 sim´ etrica, 19 “vac´ ıa”, 16 max, 7, 17 m´ aximo, 7, 17 m´ aximo com´ un divisor, 31 mayor, 27 mayor o igual, 27 may´ usculas, 4 mean, 18 median, 18 mediana, 18 men´ u, 8 menor, 27 menor o igual, 27 m´ etodos num´ ericos, 50 min, 7, 18 m´ ınimo, 7, 18

11 polynomial. 67 m´ ınimos cuadrados. 60 cuadr´ atica.72 m´ ınimos cuadrados no lineales. 9 multiplicaci´ on... 19 superior. v´ ease multiplicaci´ on . 64 no restringida. 63 . v´ ease optimizaci´ on lineal programas. 18 notaci´ on cient´ ıfica. 20 qr. 6. 58 ones. 4. 10 poly.. 27 no diferenciable.. 7. programaci´ on . 63 lineal. 65 nombres de variables. 20 quapro. 10. 8 Postscrip-Latex. 15. 22 promedio.. 10. 10 de matrices. programaci´ on lineal. 26 ’qn’. 6 operadores l´ ogicos. 49 potencia. 8 parte triangular inferior. 6 parte imaginaria. 35 o. 7 n´ umero de argumentos.. 6 prod. 8 m´ odulo de un complejo. 35 n´ umero de par´ ametros. 49 precedencia. 6. 32 prioridad. 66. 20 plot2d. 60 no lineal. 17 par´ ametro de entrada. 9 real. 65 QR. 18 norma matricial. 9 n´ umero de columnas. 14 operaciones. 65 negaci´ on. 9. 18 pwd. 18 producto de matrices. 8 superior. 19 pegar matrices. 24 de salida. 18 producto de elementos de . 54 min´ usculas. 24 ´ INDICE ANAL´ ITICO par´ entesis. 15 por escalar. 7. 19 n´ umero aleatorio. 18 norma. 27 ode. 9 parte entera inferior.. 15 ’nd’. 27 optim. 32 printf. 19 de filas. 7. 16 pinv. 27 no. 5 norm. 68 ordenamiento. 47 polinomios.. 16 PPM. 15 elemento a elemento. 64 optimizaci´ on. 43 plot3d. v´ ease optimizaci´ on . 49 Postscript. 4 modulo. v´ ease prioridad print.. 49 Postscript No Preamble.. 64 semidefinida.

22 sci. 22 locales. 8 rref. 64 round. 7 then. 18 suma. 20 svd. 15 vectores. 30 semidef. 7 tangente. 14 rango. 7 st deviation. 51 spec.. 66. 6. 7 tanh. 13 vectores propios . 7 tangente hiperb´ olica. 10 ra´ ız de una matriz. v´ ease gui´ on select. 15 vector fila. 4 redondeo. 1 Xfig. 67 return. 19 while. 7. 23 sort. 14 sum. 16 una componente. 7 seno hiperb´ olico. 15 suprimir una columna. 19 soluci´ on de sistemas de ecuaciones. 49 xtitle. 3 variables globales. 4 Windows. 20 tama˜ no de una matriz. 10 de elementos de . 23 who. 57 sqrt. 23 sin. 21. 6. 13. 20 soluci´ on por m´ ınimos cuadrados. 20 seudosoluci´ on. 15 tril. 58 sistema de ecuaciones no lineales. 7.. 16 raiz cuadrada. 45 73 . 19 spline. 48 submatriz. 7.. 51 sparse. 62. 18 de matrices. 17 sce. 9. 19 valor absoluto. 9 valores propios. 18 stacksize. 68 seno. 7. 9. 8 residuo entero. 22 vector columna. 28. 10 de matrices. 50 size. 17 sparse. 9 reales.´ INDICE ANAL´ ITICO r. 30 tiempo. 7 sinh. 10 Rosenbrock. 19 variable. 2 write. 24 script. 32 www. 16 SVD. 19 tan. 7 seudoinversa. 29 who. 16 una fila. 6. 32 roots. 16 real. 16 rank. 8 resta. 56. 53 sistemas de ecuaciones lineales. 7 rand. 31. 50 transpuesta de una matriz. 61. 19 triu. 15 restricciones de caja. 7 sistema de ecuaciones diferenciales.

74 y. 27 zeros. 14 ´ INDICE ANAL´ ITICO .

Sign up to vote on this title
UsefulNot useful