0% encontró este documento útil (0 votos)
197 vistas124 páginas

Curso de Matlab

Cargado por

Rawi Montilla
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
197 vistas124 páginas

Curso de Matlab

Cargado por

Rawi Montilla
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 124

Curso de Matlab

Entorno interactivo de clculo y visualizacin vinculado a un lenguaje de programacin de alto nivel

Dr. Sergio Giner


Profesor Adjunto DE Ctedra de Simulacin de Procesos I rea Departamental Ingeniera Qumica Facultad de Ingeniera-UNLP (2008)

CAPITULO 1. DIAGRAMACION CAPITULO 2. ENTORNO MATLAB CAPITULO 3. NOTAS SOBRE LA MANIPULACION DE MATRICES EN MATLAB CAPITULO 4. GRAFICOS EN MATLAB CAPITULO 5. PROGRAMACIN MATLAB PARTE I. COMPONENTES BSICOS DEL LENGUAJE CAPITULO 6. PROGRAMACION MATLAB II. CONTROL DEL FLUJO DE INFORMACION CAPITULO 7. PROGRAMACIN MATLAB III. CONCEPTOS DE PROGRAMACION ESTRUCTURADA Y MODULAR. FUNCIONES DESARROLLADOS POR EL PROGRAMADOR (FUNCTIONS) CAPITULO 8. OPERACIONES DE ENTRADA Y SALIDA CON FORMATOS CAPITULO 9. NOTAS SOBRE VECTORIZACIN EN MATLAB CAPITULO 10. CAPTULO 10. DIFICULTADES Y ERRORES TPICOS EPILOGO BIBLIOGRAFIA

1 10 23 34 49 73

86 97 111 116 123 124

Diagramacin. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 CAPITULO 1. DIAGRAMACION Introduccin Para resolver problemas de ingeniera, as como de otras disciplinas, siempre es necesario contar con los datos suficientes, y con un mtodo donde procesarlos para hallar lo que se busca, los resultados. Cuando esta prctica se implementa mediante programacin en una computadora, resulta importante bosquejar, esquematizar, diagramar el mtodo de resolucin en forma grfica, antes de pasar a la programacin propiamente dicha, o codificacin en lenguaje de alto nivel. Precisamente la Diagramacin en Bloques, o ms genricamente, la Diagramacin, se define como la representacin grfica del mtodo de resolucin de un problema, empleando smbolos normalizados. En esta clase, se vern ejemplos de Diagramas de Bloques, que representen las estructuras de diagramacin tpicas que pueden aparecer en casi todos los problemas. En algunas bibliografas los diagramas se denominan diagramas de flujo o, en Ingls Flow charts. En esta ctedra, se va a hacer una diferenciacin entre los Diagramas de Bloques, que, correspondiendo a las soluciones a problemas pertenecen al mundo abstracto de los programas, o Software y los Diagramas de Flujo, que estrictamente describen el funcionamiento de dispositivos fsicos, tales como circuitos electrnicos, o la organizacin de los componentes de una computadora, y que por tanto pertenecen al mundo concreto del Hardware. Volviendo al Diagrama de Bloques, stos, en general proveen una organizacin lgica previa, que es til independientemente del lenguaje de programacin en el que se implemente finalmente la resolucin (distintas versiones de C, Pascal, Visual Basic, Fortran o, como en este curso, Matlab).

Diagrama de Bloques generalizado Podramos decir que todos los problemas que pueden implementarse y resolverse en la computadora, responden a este diagrama de Bloques general:

COMENZAR

Entrada de datos

Procesamiento

Salida de los resultados

FIN

Diagramacin. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Por ejemplo, la aplicacin de este concepto al caso simple de la conversin de una Temperatura en F a C, se exhibe a continuacin:
COMENZAR

Leer TF

TC= (TF-32)*5/9 Visualizar Tc

Este diagrama corresponde al caso ms sencillo de la estructura a su vez ms simple, la secuencial. Se define una estructura secuencial, como aquella en la que las instrucciones se ejecutan una despus de la otra, en el mismo orden en que estn escritas

FIN

Estructuras en Diagramacin En general, la solucin de un problema tpico, esto es, un diagrama de bloques (DDB) usual, combina las tres estructuras bsicas que existen en diagramacin.

a) Estructura secuencial b) Estructura alternativa c) Estructura repetitiva

Apelaremos a la estructura secuencial pura, cuando tengamos una secuencia simple de instrucciones, donde el control de la ejecucin del programa pase slo una vez por cada instruccin. Tendremos una estructura alternativa cuando debamos tomar decisiones sobre el camino a seguir entre dos o ms posibilidades, luego de cumplida una cierta instruccin. A su vez, llegaremos a la estructura repetitiva, cuando debamos recorrer muchas veces el conjunto de instrucciones, para distintos valores de determinadas variables.

Resolviendo la ecuacin cuadrtica A X2 + B X + C = 0, podremos dar ejemplos de DDB que incluyan cada tipo de estructura.

Diagramacin. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 a) Resolucin por estructura secuencial

Aqu slo se considera, por defecto, el caso de races reales positivas, con discriminante (B2-4AC) >0.

COMENZAR

Leer A, B, C

1R

B +

B 2 4 AC 2 A

2 R

B 2 4 AC 2 A

X1R, X2R

FIN

Diagramacin. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 b) Resolucin por estructura alternativa.

Para una terna dada de coeficientes A, B, C, este DDB considerar la posibilidad de que el discriminante pueda tener cualquier valor.

COMENZAR

Leer A, B, C

= B2-4AC

SI

NO

1R

B +

B 4 AC 2 A
2

X
X
X

1R

1I

2 R

B 2 A + = 2 A = X 1R

2 R

B 2 4 AC 2 A

2 I

= X

1I

X1I = 0; X2I = 0;

X1R, X2R X1I, X2I

FIN

Diagramacin. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 c) Resolucin por estructura repetitiva: En este caso, se considerarn N ternas de coeficientes, A, B y C.
COMENZAR

Leer N
I=1
Leer A, B, C

= B2-4AC

SI

>0

NO

1R

B +

B 4 AC 2 A
2

1R

X
X

1I

2 R

B 2 A + = 2 A = X 1R

2 R

B 2 4 AC 2 A

2 I

= X

1I

X1I = 0; X2I = 0;

X1R, X2R X1I, X2I

I=I+1

SI

I >N

NO

FIN

Diagramacin. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 SIMBOLOS NORMALIZADOS Aunque de los ejemplos dados se desprende la relacin entre el tipo de smbolo y su funcin, listaremos aqu los smbolos normalizados ms habituales. Los mismos se pueden obtener de la barra de herramientas dibujo del Word de Windows, en el botn Autoformas- Diagramas de Flujo. Para inscribir texto dentro de ellos, apriete el botn derecho y elija agregar texto.

Ingreso de datos

Instruccin en infinitivo, procesamiento de datos

Salida de resultados (a documento, impresora, etc)

Decisin

Funcin o subprograma (procedimiento especfico)

Conector

Estructura repetitiva

LA SUMA EN DIAGRAMACION-PROGRAMACION En el ejemplo de la estructura repetitiva, se observ la instruccin I = I + 1. Esta instruccin, no tiene sentido como ecuacin. No obstante, en programacin significa

I posterior = I anterior + 1
Es decir, el I anterior, es borrado del casillero (direccin) de memoria designado para la variable I, y es reemplazado por un valor igual al anterior + 1. En este sentido, realmente el signo igual en programacin no coincide con su similar matemtico, sino que significa realmente asignacin, es decir, asignar a la variable escrita a la izquerda del signo igual, el resultado de la expresin evaluada a la derecha de ese signo. En consecuencia, aunque se usa el signo igual, la instruccin se entiende mejor as

I posterior I anterior + 1

Diagramacin. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 DIAGRAMAS DE BLOQUES UTILIZANDO VECTORES O MATRICES Los arreglos (vectores, matrices) contienen elementos relacionados, designados con un nombre comn. Por ejemplo, el SMN podra proveer diariamente las temperaturas mnimas y mximas de las Capitales Provinciales y de la Ciudad de Bs As, con dos vectores Tmin, y Tmax, c/u de 24 elementos. Si quisiramos sacar el promedio de esos valores, el DDB sera:
COMENZAR

Leer Tmin (i), Tmax (i), i = 1, 24

i =1 smin =0; smax = 0;

smin =smin + Tmin (i); smax = smax + Tmax (i);

I=I+1

I > 24 SI promin = smin/24; promax = smax/24

NO

Promin, Promax

FIN

Diagramacin. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 DIAGRAMAS DE BLOQUES CON LAZOS REPETITIVOS ANIDADOS Suponga Ud que las temperaturas de cada capital provincial de Argentina vienen dadas en forma horaria. Tendremos entonces la matriz, T(i, j), donde i = 1..24, y j = 1..24. Si se quiere sacar un promedio general, que incorpore todos los datos, podemos programar la siguiente estructura repetitiva.
COMENZAR

T(i, j),i = 1, 24; j = 1, 24

sumT =0; i= 1;

j=1

sumT =sumT + T(i,j)

j=j+1

j >24 SI i=i+1

NO

i >24 SI
Tprom = sumT/(24x 24)

NO

Tprom

FIN 8

Diagramacin. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Ejercicio de Autoevaluacin: desarrollar un diagrama de Bloques que calcule las temperaturas promedio diarias de cada capital provincial, y, como en el Diagrama de Bloques anterior, la media general. Finalmente, se darn aqu las etapas normalmente seguidas para resolver un problema de cierta magnitud y complejidad, mediante la computadora

ETAPAS DE LA RESOLUCION DE UN PROBLEMA MEDIANTE COMPUTADORA

1) Anlisis del Problema 2) Obtencin del mtodo de resolucin 3) Diagramacin del mtodo (DDB) 4) Codificacin en lenguaje de alto nivel (Programacin propiamente dicha) 5) Eliminacin de errores (debugging) 6) Ejecucin del programa y obtencin de resultados. Representacin grfica 7) Anlisis de los resultados. Si hay errores conceptuales, volver a 1) , 2 4) . Si no, seguir en 8) 8) Refinamiento del actualizacin) programa (Mejoras en el diseo, legibilidad, documentacin,

Estos conceptos se irn aclarando a medida que nos introduzcamos en el lenguaje de computadora especfico, en nuestro caso, Matlab.

Entorno MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 CAPITULO 2. ELEMENTOS PARA LA PLATAFORMA COMPUTACIONAL MATLAB

MATLAB es tanto un entorno de clculo interactivo como un lenguaje de programacin de alto nivel, cuya caracterstica principal reside en trabajar en forma completamente matricial. Esta clase se divide en las partes siguientes:

Introduccin Describe los componentes del sistema MATLAB. Entorno de Desarrollo Introduce el entorno de desarrollo de MATLAB.

INTRODUCCIN

MATLAB es un lenguaje de alto rendimiento para computacin en ciencias e ingeniera. Integra clculo, visualizacin y programacin en un entorno amigable donde los problemas y soluciones se expresan en notacin matemtica habitual. Los usos tpicos de Matlab, son:

Matemticas y clculo Algoritmos de desarrollo Modelado, simulacin y desarrollo de prototipos Anlisis de datos, exploracin y visualizacin Graficacin ingenieril y cientfica Desarrollo de aplicaciones (programas propios del usuario), incluyendo la construccin de interfases grficas para el usuario (GUI) para facilitar la entrada de datos y la visualizacin y anlisis de los resultados.

MATLAB es un sistema interactivo, cuyo dato bsico es un arreglo que no requiere dimensionamiento. Permite resolver problemas tcnicos, especialmente aquellos con formulaciones de matriz y vector, en menos tiempo del que demandan otros lenguajes como C o Fortran. El nombre de MATLAB proviene de Matrix Laboratory. La Primera versin de Matlab la escribieron Cleve Moler y Jack Little en EEUU para dar acceso a la biblioteca de subprogramas cientficos Fortran LINPACK y EISPACK (que program Moler) a los alumnos de la Universidad de Nuevo Mxico. Su idea era realizar un entorno integrado de programacin y clculo, poniendo especial nfasis en la productividad. Los dos fundaron la empresa de Matlab (Mathworks) en 1984. MATLAB presenta una familia de programas que resuelven problemas especficos de un campo del conocimiento, llamados Cajas de herramientas (toolboxes). Las toolboxes estn disponibles en reas como estadstica (con ajuste de curvas a datos), resolucin de ecuaciones diferenciales, procesamiento de seal, sistemas de control, procesamiento de imgenes, etc. Nosotros esperamos que la capacidad que adquieran los alumnos en programacin Matlab durante este curso les facilite luego, el uso de esos Toolboxes para eficientizar la programacin de problemas de Ctedras de aos superiores o durante su vida profesional.

10

Entorno MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 El sistema MATLAB consta de cinco partes principales: 1) Entorno de desarrollo. Este representa el conjunto de herramientas y recursos que permiten el uso de las funciones y archivos MATLAB. Muchas de estas herramientas son interfases grficas del usuario (GUI). Incluye el escritorio MATLAB y la ventana de comandos (Command Window), el historial de comandos, y ventanas de visualizacin (browsers) para ver la ayuda (help), la carpeta de trabajo, los archivos, y la ruta de acceso a informacin (search path). 2) La biblioteca de funciones matemticas MATLAB (MATLAB Mathematical Function Library). Es una vasta coleccin de algoritmos matemticos que va desde las funciones elementales como suma, seno, coseno, a funciones ms sofisticadas como determinantes de matrices, autovalores, funciones de Bessel, y transformadas de Fourier. 3) El lenguaje MATLAB. Es un lenguaje de programacin de alto nivel, de tipo matricial, con instrucciones de control de flujo, funciones preprogramadas y diversos tipos de datos. Asimismo, presenta varias alternativas para la entrada y salida de informacin y aspectos de programacin orientada a objetos. Permite tanto la "programacin en chico", para crear programas rpidos y descartables, y "programacin en grande" para desarrollar aplicaciones sobre tareas de gran complejidad. 4) Realizacin de Grficos. Es el sistema grfico de MATLAB. Incluye comandos de alto nivel para visualizacin bi y tri-dimensional, procesamiento de imgenes, animacin, y grficos para presentaciones. Tambin incluye comandos de bajo nivel que le permiten una total personalizacin de la apariencia de los grficos, as como tambin para construir interfases grficas de usuario (GUI) que dan funcionalidad y apariencia de software a los programas que Ud. realiza. 5) La interfase de Programas de Aplicaciones de MATLAB (MATLAB Application Program Interfase (API)). Esta biblioteca permite escribir programas C y Fortran que interacten con MATLAB. Incluye recursos para llamar rutinas desde MATLAB (dynamic linking), llamando a MATLAB como motor computacional (motor de clculos) y para leer y escribir desde o en archivos MAT (generados por la ventana de comandos). ENTORNO DE DESARROLLO INTRODUCCIN Este captulo provee una introduccin breve al ingreso y egreso de MATLAB, y a las herramientas y funciones que ayudan a trabajar con las variables y archivos de MATLAB.

Para ingresar al programa se debe oprimir el cono de Matlab en el escritorio MATLAB 6.1.lnk o bien seleccionarlo en inicio-programas. Irse de Matlab es similar a hacerlo desde cualquier otra aplicacin de Windows. Puede hacerlo con el botn X (cerrar) o bien desde el men File, Exit-Matlab. Necesitar una computadora tipo Pentium II o superior con al menos 64 Mb de Memoria RAM.

11

Entorno MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 ESCRITORIO MATLAB Cuando comience MATLAB, el Escritorio MATLAB aparece, conteniendo herramientas (interfases grficas de usuario) para el manejo de archivos, variables, y aplicaciones asociadas con MATLAB. La primera vez que comienza MATLAB, el escritorio aparece como se muestra en la ilustracin siguiente (Default View, apariencia por defecto), aunque su Launch Pad puede contener distintas entradas.

Se puede cambiar la apariencia del escritorio abriendo, cerrando y cambiando el tamao de las herramientas en l. Las herramientas pueden moverse fuera del escritorio, o retornarlas otra vez dentro del escritorio (docking). Todas las herramientas del escritorio poseen aspectos comunes tales como menes contextuales y atajos de teclado (keyboard shortcuts). Se pueden especificar ciertas caractersticas para las herramientas del escritorio seleccionando Preferences desde el men File. Por ejemplo, se pueden especificar las caractersticas de la fuente (font) para el texto del Command Window.

12

Entorno MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 HERRAMIENTAS DEL ESCRITORIO. Esta seccin provee una introduccin a las herramientas del escritorio de MATLAB. Tales herramientas son:

La ventana de comandos (Command Window) El registro histrico de comandos (Command History Browser) La Plataforma de lanzamiento (Launch Pad ) La ventana de ayuda (Help Browser) El directorio actual (Current Directory Browser) El espacio de trabajo (Workspace Browser) El editor de arreglos (vectores y matrices ) (Array Editor) El editor de archivos y depurador de errores (Editor/Debugger)

VENTANA DE COMANDOS (Command Window) En la siguiente figura se observa el aspecto que posee la ventana de comandos. En esta ventana se realizan clculos, se ejecutan funciones particulares de Matlab y se ejecutan programas escritos por los usuarios (archivos-M).

13

Entorno MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 HISTORIAL DE COMANDOS (Command History)

Las lneas que se ingresan en la Command Window se graban en la ventana de la Command History. All, se pueden ver las funciones utilizadas previamente, y copiar y ejecutar lneas seleccionadas (Reutilizar cdigo previamente escrito).

En esta ventana el registro de fecha y hora marca el comienzo de cada sesin. Otra forma de registrar una sesin de MATLAB es utilizar la funcin Diary, que crea un archivo *.out. Se abre con Diary en el command window, y se cierra con Diary off.

EJECUCIN DE PROGRAMAS EXTERNOS

Una opcin interesante consiste ende correr programas externos desde la ventana de comandos de MATLAB. El signo de exclamacin ! es un shell e indica que el resto de la lnea de entrada es un comando al sistema operativo. Esto resulta til para invocar utilidades o correr otros programas sin salir de matlab. Por ejemplo, en Linux, !emacs magik.m invoca un editor llamado emacs para un archivo nombrado magik.m. Cuando se sale del programa externo, el control vuelve a MATLAB. En el sistema operativo Windows, si se desea abrir un archivo prueba.m que contiene una funcin en lenguaje matlab, no con el editor propio sino con el bloc de notas (notepad), se puede hacer:

14

Entorno MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 !notepad prueba.m

LAUNCH PAD El Launch Pad es un explorador de archivos interno de MATLAB provee fcil acceso a herramientas, demos y documentacin

Las indicaciones en la figura muestran como acceder a documentacin del producto, como acceder a ejecutar demos, como abrir herramientas, o como abrir subdirectorios que contienen informacin especfica.

15

Entorno MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 VENTANA DE VISUALIZACIN/ GESTIN DE AYUDA (Help Browser)

Usar el Help browser (to browse mirar sin modificar) se emplea para buscar y visualizar documentacin para todos los productos Mathworks. El Help browser es un navegador de internet integrado en el escritorio de MATLAB que muestra documentos HTML . Para abrir el Help browser, clickee el men descolgable Help, o tipee helpbrowser en la Command Window.

El help browser consiste de dos paneles, uno de ellas el navegador (explorador interno) de ayuda (a la izquierda), que se puede utilizar para localizar la informacin, y el panel de visualizacin ( a la derecha) , donde se la observa. Se puede cerrar el de la izquierda, ampliar o reducir cada uno. El navegador del help incluye:

Filtro de producto (Product filter) Configura la ayuda slo para los productos que se especifiquen. Es muy conveniente restringir la ayuda a Matlab solamente, si no se usan otros programas asociados. Solapa de Contenidos (Contents) Visualiza los ttulos y tablas de contenidos de la documentacin de los productos. Es el explorador interno de la ayuda. Solapa de Indice (Index) Encuentra entradas especficas (selected keywords) de la documentacin de los productos. Solapa de Bsqueda (Search) Busca una frase especfica en la documentacin. Para hallar la ayuda a una funcin especfica, configure el tipo de bsqueda (Search type) a Function Name. Solapa de Favoritos ( Favorites) Muestra una lista de documentos de la ayuda, seleccionada previamente como favorita. Es muy til irla confeccionando con el tiempo, para seleccionar rpidamente las ayudas ms comnmente solicitadas.

Una vez que encontr la localizacin de la ayuda en el Help Navigator, se puede leer en el cuadro de visualizacin. El mismo contiene distintos elementos que permiten:

Mirar otras pginas - Use las flechas en la parte superior e inferior de las pginas, o los botones forward (hacia adelante) y back (hacia atrs) en la barra de herramientas.

16

Entorno MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008

Sealadores (Bookmarks) Cliquee el botn Add to Favorites de la barra de herramientas. Imprimir pginas Cliquee el botn print en la barra de herramientas.

Si desea buscar alguna palabra o tema en la pgina cargada en el cuadro de visualizacin, se debe tipear en el campo permitido para Find in page de la barra de herramientas. Para cerrar el nivel de ayuda elija el Men File, y luego Close Help". VISUALIZACIN DEL DIRECTORIO ACTUAL (Current Directory Browser) Las operaciones con archivos de MATLAB usan el directorio actual (C:\MATLAB6p1\work) y la ruta de bsqueda ( search path) como puntos de referencia. Cualquier archivo que se quiera ejecutar debe estar o en el directorio actual o en la search path. El path se visualiza en el Command Window luego de tipear path. Para ver o cambiar rpidamente el directorio actual se debe utilizar la solapa del Current Directory en la barra de herramientas del escritorio, como se muestra a continuacin:

Para buscar, ver, abrir o realizar cambios en los directorios y archivos relacionados con MATLAB, se debe usar el visualizador de directorio actual de MATLAB (Current Directory browser). Alternativamente, se pueden utilizar funciones dir, cd, y delete.

(Aqu el directorio de trabajo se llama D:\myfiles) Aqu se observa la ventana del directorio actual (current directory) en forma aislada (undocked). Los archivos m, tanto programas contenidos originalmente en el software como aquellos realizados por el usuario, se abren cliqueando con el ratn. Para integrarla de nuevo (dock) en la default view utilice el men view, dock.

RUTA DE BSQUEDA (Search path) Para ejecutar funciones o archivos m, llamados desde el Command Window en forma automtica, MATLAB debe saber donde estn, para esto utiliza el search path. En general, se utiliza el search path para incorporar archivos de las cajas de herramientas o toolboxes. El usuario puede tambin construir la suya

17

Entorno MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Para ver cuales directorios estn en el search path o para cambiar la ruta de bsqueda, se debe seleccionar Set Path desde el men File en el escritorio de MATLAB y utilizar el cuadro de dilogo Set Path .

Oprimiendo el botn add-folder (agregar carpeta), el Matlab le ofrece un explorador de directorios para encontrar la ruta que desea incorporar. Luego de elegir, apriete aceptar en el cuadro insertado, y a posteriori Save en el cuadro de dilogo grande. Las acciones se pueden desacer con revert y todo puede volverse al estado inicial con default. Seleccin del directorio de trabajo El Matlab trae por defecto el subdirectorio work para alojar los programas y sesiones de command window. Si el usuario desea usar temporariamente otro, sin dejar grabada esa ruta en matlab cuando lo apague (lo que es ms cmodo que el search path para trabajo ocasional), se puede oprimir el botn que contiene tres puntos suspensivos, situado en la parte superior del escritorio de matlab, ligeramente corrido a la derecha.Oprimiendo ese botn, y buscando en el la estructura de directorios, se puede cambiar el directorio work a otro (que puede bien ser un subdirectorio de ste) para trabajar durante una sesin.

...

18

Entorno MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008

VISUALIZADOR DE LA CARPETA DE TRABAJO (Workspace Browser) El espacio de trabajo MATLAB consiste de un conjunto de variables (arreglos con nombre) construidos durante una sesin de MATLAB y almacenados en memoria. Las variables se adicionan al espacio de trabajo a medida que se usan funciones, se corren archivos-M y se cargan espacios de trabajo ya grabados. Para ver el espacio de trabajo y la informacin de cada variable, se emplea el Workspace browser, o bien las funciones who y whos.

Para borrar variables del espacio de trabajo, se selecciona la variable y luego se oprime Delete desde el men Edit. Alternativamente, se puede utilizar la funcin clear . El espacio de trabajo no se mantiene luego de terminarse la sesin MATLAB. Para guardar el workspace a un archivo que puede ser ledo durante una sesin MATLAB posterior, seleccione Save Workspace As desde el men File, o utilice la funcin save en el command window. Esto guarda el espacio de trabajo en un archivo binario, denominado archivo MAT, es decir, que tiene una extensin .mat . Hay opciones para guardar el workspace en distintos formatos. Para leer en un archivo-MAT, seleccione Import Data desde el men File menu, o utilice la funcin load desde el command window.

19

Entorno MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 EDITOR DE ARREGLOS (Array Editor) Haciendo doble-click en una variable del workspace browser aparce la ventana de edicin de arreglos. Este editor permite ver y editar una representacin visual de arreglos numricos de una o dos dimensiones, cadenas alfanumricas (strings), y arreglos de celdas de cadenas que se hallan en el espacio de trabajo (workspace).
Obsrvese que en esta figura se hallan abiertos tres arreglos, m, x y theta, pudiendo pasar de uno a otro arreglo seleccionando la solapa correspondiente. Esta ventana permite cambiar los valores de las variables, como as tambin modificar el formato numrico.

Ejemplo del uso de Matlab en modo interactivo Aqu se da un ejemplo simple, donde se ingresa un valor a = 1, otro b = 2, se calcula c como la suma de ambos, se obtiene d como la raz cuadrada de c, y e como el seno de d. Las variables que se van creando, que en este caso son arreglos de 1 x 1 (para matlab todas las variables son arreglos), se acumulan en el Espacio de trabajo (Workspace) y se visualizan a la izquierda.

20

Entorno MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 El comando format El comando format controla el formato numrico de los valores visualizados por MATLAB. El comando afecta slo la visualizacin de los nmeros, no la forma en que MATLAB los calcula o los almacena. Aqu se muestran los distintos formatos, junto a la salida resultante producida a partir de un vector x con componentes de distintas magnitudes. Nota Para asegurar un adecuado espaciamiento, utilice una fuente de ancho constante (fixed-width font), tal como Fixedsys o Courier. x = [4/3 1.2345e-6] Entre otros, los formatos ms tpicos son format short 1.3333 0.0000 format short e 1.3333e+000 1.2345e-006 format short g 1.3333 1.2345e-006 format long 1.33333333333333 0.00000123450000 Si el elemento ms grande de una matriz es mayor que 103 o menor que 10-3, MATLAB aplica un factor de escala comn para los formatos largos y cortos. Adems de los comandos de formato mostrados ms arriba format compact suprime todas las lneas en blanco que aparecen en la salida. Esto conduce a ver ms informacin sobre la pantalla o ventana.

Entrada de datos y Salida de resultados en Matlab interactivo Suprimiendo la visualizacin de variables Si se tipea una instruccin y se oprime Enter, MATLAB visualiza automticamente los resultados en pantalla. Sin embargo, si se termina la lnea con punto y coma, MATLAB realiza los clculos pero no muestra la salida. Esto es muy til para agilizar la ejecucin de los programas, puesto que la visualizacin continua de resultados toma mucho tiempo de mquina. Grabado de sesiones Si al terminar de trabajar, o en cualquier momento de una sesin, se tipea el comando save en el command window, Matlab grabar la sesin desarrollada hasta ese momento, incluyendo las variables del espacio de trabajo en el archivo Matlab.mat Si quiere cambiar el nombre, puede hacer save nombre, y grabar la sesin en el archivo nombre.mat. Luego, aunque haya apagado la computadora, podr recuperarlos con load, o load nombre, respectivamente Grabado selectivo de variables Se pueden guardar no toda la sesin sino algunas variables en particular en forma selectiva y en archivos con nombre especificado por el usuario. Por ejemplo, el comando (sin comas entre los nombres de variables):

21

Entorno MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 >> save nombre A x y guarda las variables A, x e y en un archivo binario llamado nombre.mat . Para recuperarlas en otra sesin basta teclear: >> load nombre si se especifica, por ejemplo >> load nombre x y no se cargar la matriz A El comando load admite las opciones -ascii y -mat, para obligarle a leer en formato ASCII o binario, respectivamente. El comando save permite guardar el estado de la sesin en formato ASCII utilizndolo de la siguiente forma (lo que va detrs del carcter % es un comentario que es ignorado por MATLAB): >> save -ascii % almacena 8 cifras decimales >> save -ascii -double % almacena 16 cifras decimales >> save -ascii -double -tab % almacena 16 cifras separadas por tabs aunque en formato ASCII slo se guardan los valores y no otra informacin tal como los nombres de las matrices y/o vectores. Cuando se recuperan estos archivos con load.. -ascii toda la informacin se guarda en una nica matriz con el nombre del archivo. Esto produce un error cuando no todas las filas tienen el mismo nmero de elementos. Con la opcin -append en el comando save la informacin se guarda a continuacin de lo que hubiera en el archivo.

22

Notas sobre la manipulacin de matrices en MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 CAPITULO 3. NOTAS SOBRE LA MANIPULACION DE MATRICES EN MATLAB En MATLAB, una matriz es un arreglo rectangular de nmeros. Se le asigna un significado especial a las matrices de 1 x 1, los escalares, y a las matrices con una sola fila o columna, los vectores. MATLAB tiene otras formas de almacenar datos numricos y no numricos, pero siempre es preferible comenzar asumiendo que todo es una matriz. Las operaciones en MATLAB se disean para ser tan naturales como sea posible. Mientras otros lenguajes de programacin trabajan con un nmero a la vez, MATLAB permite trabajar con matrices enteras con facilidad..

INGRESO DE MATRICES Una buena forma de empezar con MATLAB (MATrix LABoratory) es aprendiendo como operar con las matrices. En primera instancia se deben ingresar los valores que contiene las filas y las columnas. Una forma de hacerlos es manual, por ejemplo: >>A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1] Luego, MATLAB muestra la matriz que se ha ingresado. A= 16 3 5 10 9 6 4 15 2 13 11 8 7 12 14 1

Una vez que se ingres la matriz, sta automticamente queda grabada, en el espacio de trabajo (workspace). Para recuperar sus valores, es decir para usarlos, slo tiene que tipear A. La matriz que se ha ingresado previamente se denomina mgica por sus curiosas caractersticas: la suma de los elementos de filas y columnas, y de los de las dos diagonales principales, dar siempre el mismo resultado. Estas propiedades se verifican en la prxima seccin.

SUMA, TRANSPUESTA Y DIAGONAL Matlab posee la funcin sum para realizar sumas. En el caso de las matrices, con la aplicacin de esta funcin se suman los valores contenidos en las columnas. Si aplicamos esta funcin a la matriz A: >>sum (A) MATLAB responde con ans = 34 34 34 34

Cuando no se especifica una variable para asignar el resultado, MATLAB usa la variable ans, abreviatura de answer, para almacenar los resultados de un clculo. Se calcul un vector fila conteniendo las sumas de las columnas de A. Cada una de ellas da la misma suma, 34. Que sucede con las sumas de las filas? MATLAB tiene una preferencia para trabajar con las columnas de una matriz, as que la forma ms fcil de realizar las sumas por fila es obtener la transpuesta de la matriz, calcular la suma de las columnas de la transpuesta, y luego transponer el resultado. La operacin de la transpuesta se representa mediante un apstrofe. En tal operacin, la matriz es reposicionada alrededor de su diagonal principal, y transforma un vector fila en un

23

Notas sobre la manipulacin de matrices en MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 vector columna. As >>A' ans = 16 5 3 10 2 11 13 8 mientras que >>sum(A')' produce un vector columna conteniendo la suma de las filas originales ans = 34 34 34 34 La funcin diag genera un vector con los elementos de la diagonal principal. >>diag(A) dando lugar a ans = 16 10 7 1 En consecuencia, sumando los mismos >>sum(diag(A)) se obtiene ans = 34 9 4 6 15 7 14 12 1

SUBNDICES Los elementos de la fila i y columna j de A se denotan por A(i,j). Por ejemplo, A(4,2) es el nmero de la cuarta fila y segunda columna. En nuestro cuadrado mgico, A(4,2) es 15. Es posible tambin referir los elementos de una matriz con slo subndice, A(k). Esta es la forma usual de referenciar los vectores fila y columna. Pero puede usarse tambin en una matriz bidimensional, en cuyo caso el arreglo se visualiza como un largo vector columna, formado por las columnas de la matriz original. As, en nuestro cuadrado mgico, A(8) es otra forma de nombrar el valor 15 almacenado en el elemento(4,2). Si se usa un valor de elemento fuera de la matriz, es un error >>t = A(4,5) Index exceeds matrix dimensions. Por otro lado, si se almacena un valor en un elemento que est fuera de la matriz, el tamao de la misma se incrementa automticamente para incorporar al recin llegado. X = A;

24

Notas sobre la manipulacin de matrices en MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 X(4,5) = 17 X= 16 5 9 4 3 10 6 15 2 13 0 11 8 0 7 12 0 14 1 17

EL OPERADOR DOS PUNTOS :

Los dos puntos : estn entre los operadores ms importantes de MATLAB. Se emplea para generar variables de intervalo. Aparecen aplicado en situaciones diversas. La expresin >>x=1:10 es un vector fila conteniendo los enteros de 1 a 10 1 2 3 4 5 6 7 8 9 10 para obtener un espaciado no unitario, se puede especificar un incremento. Por ejemplo, >>x=100 : -7 :50 es 100 93 86 79 72 65 58 51 Se puede utilizar un espaciado no entero tambin >>x=0 : pi/4 : pi da lugar a 0 0.7854 1.5708 2.3562 3.1416 Pueden aparecer en expresiones de subndices que indiquen partes de una matriz. Por ejemplo: >>A(1:10,j) Denota los primeros 10 elementos de la columna j-sima de A. As >>sum(A(1:4,4)) calcula la suma de la cuarta columna. El operador dos puntos por s mismo denota todos los elementos en una fila o columna de una matriz , y la palabra clave (keyword) end indica la ultima fila o columna. As: >>sum(A(:,end)) calcula la suma de los elementos de la ltima columna de A, empleando todas las filas. ans = 34

GENERANDO MATRICES

Esta seccin incluye otras formas de crear matrices MATLAB provee cuatro funciones para generar matrices bsicas.

25

Notas sobre la manipulacin de matrices en MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 zeros ones rand randn magic Todos ceros Todos unos Elementos aleatorios uniformemente distribuidos Elementos aleatorios normalmente distribuidos Genera matrices mgicas

Aqu se dan algunos ejemplos. >>Z = zeros(2,4) Z= 0 0 0 0 0 0 0 0

>>F = 5*ones(3,3) F= 5 5 5 5 5 5 5 5 5

>>N = fix(10*rand(1,10)) N= 4 9 4 4 8 5

(genera una matriz de una fila y diez columnas, con nmeros aleatorios entre 0 y 1, multiplica por diez elemento a elemento, y luego trunca la parte entera de cada uno. >>R = randn(4,4) R= 1.0668 0.2944 -0.6918 -1.4410 0.0593 -1.3362 0.8580 0.5711 -0.0956 0.7143 1.2540 -0.3999 -0.8323 1.6236 -1.5937 0.6900 La matriz RANDN(N) es una matriz de N x N con entradas al azar, elegidas de una distribucin normal con promedio cero, y desviacin tpica igual a la unidad.

MATRIZ VACIA

Se pueden borrar filas y columnas a partir de una matriz usando slo un par de corchetes. Comenzar con >>X = A; % A es la matriz mgica de 4 x 4 Luego, para borrar la segunda columna de X, usar >>X(:,2) = [ ] Esto cambia X a

26

Notas sobre la manipulacin de matrices en MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 X= 16 2 13 5 11 8 9 7 12 4 14 1 Si se borra un solo elemento de la matriz, el resultado ser ms una matriz, de manera que las expresiones tales como >>X(1,2) = [ ] Resultan en error. Sin embargo, el uso de un solo subndice borra un elemento individual, o una secuencia de elementos, y da nueva forma al arreglo (reshape) transformndolo en un vector fila. As X(2:2:10) = [ ] resulta en X= 16 9 2 7 13 12 1

LGEBRA LINEAL

Informalmente, los trminos matriz y arreglo se usan a menudo en forma indistinta. Ms precisamente, una matriz es un arreglo numrico bidimensional que representa una transformacin lineal. Las operaciones matemticas que definen matrices son el objeto del lgebra lineal. Sea el cuadrado mgico de Drer A= 16 3 5 10 9 6 4 15 2 13 11 8 7 12 14 1

provee varios ejemplos que dan una buena muestra de las operaciones matriciales que realiza MATLAB. El smbolo de multiplicacin, *, denota la multiplicacin de matrices que se lleva a cabo entre filas y columnas. Por ejemplo: >>A'*A ans = 378 212 206 360 212 370 368 206 206 368 370 212 360 206 212 378

El determinante de esta matriz particular es cero en este caso, indicando que la matriz es singular. >>d = det(ans) d= 0

27

Notas sobre la manipulacin de matrices en MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Volviendo al cuadrado mgico A, sus autovalores son interesantes. >>e = eig(A) e= 34.0000 8.0000 0.0000 -8.0000 Uno de los autovalores es cero, lo cual es otra consecuencia de la singularidad. El mximo autovalor es 34, la suma mgica. Esto es as porque el vector de todos los unos es un autovector. El polinomio caracterstico del cuadrado mgico es >> poly (A) ans = 1.0e+003 * 0.0010 -0.0340 -0.0800 2.7200 -0.0000

Para realizar el producto de matrices elemento a elemento se debe colocar un punto a una de las matrices, por ejemplo: A .* A >>el resultado es un arreglo conteniendo los cuadrados de los enteros de 1 a 16 en un orden inusual.

ans = 256 9 4 169 25 100 121 64 81 36 49 144 16 225 196 1 Dentro de las operaciones que se realizan entre matrices se debe incluir la divisn izquierda \. Esta operacin merece una explicacin especial. Supongamos el siguiente sistema de ecuaciones lineales: >>A X=B Donde x y b son vectores columna y A es una matriz cuadrada invertible. La solucin de este sistema de ecuaciones lineales se puede escribir as:

Esto significa que el operador barra invertida premultiplica por la inversa de la matriz A. Este operador constituye una excelente herramienta para resolver rpidamente sistemas de ecuaciones lineales. >>X=inv(A)*B X=A\B

28

Notas sobre la manipulacin de matrices en MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 CONSTRUYENDO TABLAS Las operaciones con arreglos son tiles para construir tablas. Supone que n es el vector columna >>n = (0:9)'; Luego >>pows = [n n.^2 2.^n] construye una tabla de cuadrados con potencias de dos. pows = 0 0 1 1 1 2 2 4 4 3 9 8 4 16 16 5 25 32 6 36 64 7 49 128 8 64 256 9 81 512 Las funciones matemticas elementales operan con arreglos elemento a elemento, de forma que: format short g >>x = (1: 0.1: 1.6)'; l>>ogs = [x log10(x)] construye una tabla de logaritmos. logs = 1.0 1.1 1.2 1.3 1.4 1.5 1.6 0 0.04139 0.07918 0.11394 0.14613 0.17609 0.20412

OTRAS ESTRUCTURAS DE DATOS Esta seccin lo introduce en algunas estructuras de datos en MATLAB, incluyendo: Arreglos multidimensionales Arreglos de celdas Caracteres y texto Estructuras ARREGLOS MULTIDIMENSIONALES Los arreglos multidimensionales en MATLAB son arreglos con ms de dos subndices. Se pueden crear llamando a zeros, ones, rand, o randn con ms de dos argumentos, por ejemplo, >>R = randn(3,4,5);

29

Notas sobre la manipulacin de matrices en MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Crea un arreglo de 3x 4x 5 es decir, con 60 elementos aleatorios normalmente distribuidos. Un arreglo tridimensional podra representar datos fsicos tridimensionales, por ejemplo la temperatura en un saln, muestreada segn una grilla. O bien podra representar una secuencia de matrices, A(k), o muestras de una matriz dependiente del tiempo, A(t). En estos ltimos casos, el elemento (i, j) de la matriz kth , or la matriz tk, se denota con A(i,j,k).

ARREGLO DE CELDAS Los arreglos de celdas en MATLAB (cell arrays ) son arreglos multidimensionales cuyos elementos son copias de otros arreglos. Se puede crear un arreglo de celdas de matrices vacas con la funcin cell . Pero, con mayor frecuencia, se crean arreglos de celdas delimitando una coleccin miscelnea de cosas entre llaves, {}. Las llaves se usan, asimismo, con subndices para acceder los contenidos de varios arreglos. Por ejemplo, >>C = {A sum(A) prod(prod(A))} Produce un arreglo de celdas de 1 x 3. Estas tres celdas contienen el cuadrado mgico, el vector fila de la suma de los elementos de las columnas, y el producto de los productos de los elementos de las columnas, que en definitiva es un nmero. Cuando se muestra C, se observa C= [4x4 double] [1x4 double] [20922789888000]

Como las primeras dos celdas son muy grandes para imprimirlas en este espacio limitado, se las representa con nomenclatura. La tercer celda se puede incluir porque incluye un slo nmero (16!) que se puede mostrar. Aqu se observan dos puntos importantes para recordar. Primeramente, para recuperar los contenidos de alguna de las celdas, se pueden utilizar subndices entre llaves. Por ejemplo, C{1} trae el valor del cuadrado mgico y C{3}vale 16!. Segundo, los arreglos de celdas contienen copias de otros arreglos, no punteros de otros arreglos. Si se cambia A, por ejemplo, nada sucede con C (mientras no se calcule ex profeso otra vez, no hay actualizacin automtica, en este caso el mecanismo no es como el de una planilla de clculo) . Se pueden emplear arreglos tridimensionales para almacenar una secuencia de matrices del mismo tamao, y arreglos de celdas para guardar una secuencia de matrices de distinto tamao. Por ejemplo, >>M = cell(8,1); for n = 1:8 M{n} = magic(n); end M Produce una secuencia de cuadrados mgicos de distinto orden. M=

30

Notas sobre la manipulacin de matrices en MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 [ [ 2x2 [ 3x3 [ 4x4 [ 5x5 [ 6x6 [ 7x7 [ 8x8 1] double] double] double] double] double] double] double]

Se puede recuperar, el cuadrado mgico de 4 x 4, haciendo >>M{4} Para obtener ans = 16 2 5 11 9 7 4 14 3 13 10 8 6 12 15 1

CARACTERES Y TEXTO Se puede ingresar texto en MATLAB utilizando apstrofes. Por ejemplo, s = 'Hola' El resultado no es del mismo tipo de arreglo numrico que hemos tratado hasta ahora. Es un arreglo de caracteres de 1x 5. Internamente, los caracteres se almacenan como nmeros.

31

Notas sobre la manipulacin de matrices en MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 La instruccin a = double(s) convierte el arreglo de caracteres en una matriz numrica que contiene representaciones de los cdigos ASCII de cada carcter. El resultado es a= 104 111 108 97 s = char(a) revierte la conversin. El convertir nmeros en caracteres permite investigar las distintas fuentes disponibles en su computadora. Los caracteres imprimibles se representan en el conjunto bsico de caracteres ASCII por los enteros 32:127. Los enteros menores de 32 representan caracteres no imprimibles. Estos caracteres se pueden ordenar apropiadamente en un arreglo de 6 x 16 mediante la funcin F = reshape(32:127,16,6)'; Que da nueva forma (reshape) a una lista de nmeros de 32 a 127 como una matriz de 16 x 6. Los caracteres imprimibles en el conjunto extendido de caracteres ASCII (American Standard Code for Information Interchange) se representan por F+128. Cuando estos enteros se interpretan como caracteres, el resultado depende de la fuente (font) particular que est siendo utilizada. Si se tipean las sentencias >>char (F) ans = !"#$%&'()*+,-./ 0123456789:;<=>? @ABCDEFGHIJKLMNO PQRSTUVWXYZ[\]^_ `abcdefghijklmno pqrstuvwxyz{|}~ >> char (F+128) ans = - 141234 La concatenacin con corchetes combina variables de texto para formar cadenas ms grandes. La sentencia >>h = [s, ' mundo'] combina las cadenas horizontalmente y produce h= Hola mundo Obsrvese si ahora se los quiere poner en columna

32

Notas sobre la manipulacin de matrices en MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 >> v = [s; 'mundo'] ??? Error using ==> vertcat All rows in the bracketed expression must have the same number of columns. >> s= 'hola ' s= hola >> v = [s; 'mundo'] v= hola mundo

33

Graficacin de resultados en MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 CAPITULO 4. GRFICOS EN MATLAB. REPRESENTACION BSICA MATLAB posee excelentes recursos para visualizar vectores y matrices como grficos, as como para editar, documentar, e imprimir estos grficos. Esta seccin describe algunas funciones importantes y provee ejemplos de algunas aplicaciones tpicas. GRAFICOS BIDIMENSIONALES CREACIN DE UN GRFICO Para crear un grfico bidimensional se dispone de la funcin plot. La funcin plot tiene distintas formas, dependiendo de los argumentos de entrada. Si y es un vector, plot(y) produce un grfico de segmentos de lneas uniendo los valores de los elementos de y versus el ndice de los elementos de y. Si se especifican dos vectores como argumentos, plot(x,y) produce un grfico de y versus x. Por ejemplo, las siguientes instrucciones utilizan el operador dos puntos (colon) para crear un vector de los valores de x variando desde cero hasta 2 , para calcular el seno de estos valores y graficar el resultado.

>>x = 0: pi/100 : 2*pi; >>y = sin(x); >>plot(x,y)


En el command window se pueden escribir a continuacin las instrucciones para colocar un nombre a los ejes y adicionar un ttulo. Los caracteres \pi crean el smbolo . >>xlabel('x= 0:2\pi') >>ylabel('Seno de x') >>title('Grfico de la function seno','FontSize',12)

34

Graficacin de resultados en MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 MLTIPLE JUEGO DE DATOS EN UN MISMO GRFICO Mltiples pares de vectores x-y crean mltiples grficos con una simple llamada a la sentencia plot. MATLAB cicla automticamente a travs de una lista de colores predefinida (pero configurable por el usuario) para permitir la discriminacin entre cada conjunto de datos. Por ejemplo, estas instrucciones grafican tres funciones de x, cada una con un color separado que las distingue. >>y2 = sin(x-.25); >>y3 = sin(x-.5); >>plot(x,y,x,y2,x,y3)

(vase que aqu el vector x es el mismo para las tres curvas, pero podra ser distinto, como x1,y x2,y2 x3, y3) El comando legend provee una forma clara de identificar los grficos individuales. legend('sin(x)','sin(x-.25)','sin(x-.5)')

Matlab otorga colores por defecto: a la primera curva representada, x,y, se la dibuja en azul; a la segunda, verde y a la tercera, roja.

35

Graficacin de resultados en MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 ESPECIFICANDO ESTILOS DE LNEAS Y COLORES Es posible, sin embargo, especificar color, estilos de lnea, y smbolos cuando represente sus datos usando el comando plot: plot(x,y,'marcador de estilo de color'). Las cualidades del grfico se pueden generar mediante instrucciones dadas desde el command window o desde el editor de archivos *.m previamente a la generacin del grfico (lo que siempre es ms conveniente para automatizar) o desde la interfase de usuario, una vez terminado el grfico. Se describir a continuacin como se escriben las instrucciones programando a priori el aspecto del grfico. El marcador de estilo de color es una cadena que contiene de uno a cuatro caracteres (encerrados entre apstrofes) construdos de un color, un estilo de lnea, un tipo de marcador:

LNEAS DE GRAFICACIN Y SIMBOLOS Lneas En el caso de desearse una graficacin destinada a ser observada en blanco y negro, como por ejemplo en fotocopias, conviene trazar lneas distintas en lugar de un tipo de lnea y distintos colores. Por ejemplo, si la sentencia de graficacin es

sin(x) sin(x-0.25) sin(x-0.5)

0.8

>>y = sin(x) >>y1 = sin(x-0.25) >>y2 = sin(x-0.5) >>plot (x,y,x,y1,':', x,y2,'--')

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1

36

Graficacin de resultados en MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Smbolos Si se especifica un tipo de smbolo pero no un estilo de lnea, MATLAB exhibir slo el primero. Por ejemplo, clear >>x=0:0.02:2; >>y = 1 ./ ((x-.3).^2 + .01) + 1 ./ ((x-.9).^2 + .04) - 6; >>plot(x,y,'ks')

Obsrvese que la instruccin plot(x,y,'ks') grafica cuadrados negros en cada punto de datos, sin conectar los marcadores con una lnea.

100

80

60

40

20

-20

0.2

0.4

0.6

0.8

1.2

1.4

1.6

1.8

Si deseamos que aparezcan lneas con smbolos, se puede escribir, por ejemplo plot(x,y,'r: +') que grafica una lnea roja de puntos y coloca marcadores de signo ms en cada punto.
100

80

60

40

20

-20

0.2

0.4

0.6

0.8

1.2

1.4

1.6

1.8

37

Graficacin de resultados en MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Comandos hold on, hold off

Normalmente, si se ejecuta una sentencia plot, y luego otra, en el curso de una sesin o programa, la ultima es la nica que puede verse pues cada sentencia plot borra las anteriores. Por ejemplo >>alfa = 0:0.02:2*pi; >>y = sin(alfa); >>plot (x,y) >>z = cos(alfa) >>plot(x,z) permitira visualizar slo el grfico del coseno, pero no el del seno. Una opcin sera, como ya se vi, graficar conjuntamente las dos funciones, pero por distintas razones, surge a veces la necesidad de realizar una construccin secuencial de un grfico para adicionar curvas gradualmente. Esto se puede hacer mediante el uso de la sentencia hold on (sostener o mantener activo): Aqu la graficacin del coseno se personaliz en lnea de puntos debido a que la nueva sentencia plot en realidad produce otro grfico pero transparente, que se superpone con el anterior, mantienendo las propiedades de la ventana de grficos del anterior, pero no la memoria de las curvas, de manera que el coseno se graficara en lnea continua azul otra vez como una primera curva. El comando hold on permite entonces la superposicin de varios grficos que en la prctica se ven como uno. La configuracin por defecto (cierre del grfico) se reestablece utilizando la instruccin hold off.

>>x=0:0.02:2*pi; >>y = sin(x) >>plot(x,y) >>hold on >>z = cos(x) >>plot(x,z,':') >>hold off

1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1

38

Graficacin de resultados en MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Comando figure (n) El comando figure permite mantener simultneamente varias figuras para su observacin, lo que resulta sumamente til para evaluar los resultados de un programa. Por ejemplo: >>x = 0:0.02:2*pi; >>y = cos(x) >>z = exp(-x).*cos(x); >>plot(x,y) >>figure(2) >>plot(x,z)

Si bien directamente se observa la figura 2, minimizando sta se puede observar detrs la figura 1. El procedimiento es vlido para exhibir numerosas figuras que se solapan como resultado de la ejecucin de un programa.

39

Graficacin de resultados en MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 SUBDIVISIN DE LA VENTANA DE GRFICOS A efectos de exhibir simultaneamente varias figuras sin solapamientos, se puede subdividir la ventana grfica con la funcin subplot() en m particiones horizontales y n verticales. Cada una de esas particiones se puede llamar subgrfico. El subndice i identifica la subdivisin que se convierte en activa.

Forma general: subplot(m,n,i)

Ejemplo de subdivision en dos filas y una columna: >>x=0:0.1:10; subplot(2,1,1), plot(x,sin(x)); subplot (2,1,2), plot(x,log(x)) Warning: Log of zero.

40

Graficacin de resultados en MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Ejemplo de subdivision en dos filas y dos columnas

x=0: pi/25: 6*pi; y= cos(x); z= abs(cos(x))+1; w=exp(-0.2.*x).*y+ 2; v= exp(+0.2.*x).*y +2; subplot(2,2,1), plot(x,y); xlabel ('x', 'Fontsize', 18);ylabel('y','Fontsize', 18) subplot(2,2,2), plot(x,z); xlabel ('x', 'Fontsize', 18);ylabel('z', 'Fontsize', 18) subplot(2,2,3), plot(x,w);xlabel ('x', 'Fontsize', 18');ylabel('w','Fontsize', 18) subplot(2,2,4), plot(x,v); xlabel ('x', 'Fontsize', 18);ylabel('v', 'Fontsize', 18)

1 0.5

2 1.8 1.6

-0.5

-1

z
1.4 1.2 1 0 5 10 15 20 0

10

15

20

3 2.5

60 40 20

v
0 -20 -40 0 5 10 15 20 0

1.5

10

15

20

Como se advierte en la figura, las subventanas de grficos se llenan por filas, primero y, luego z, luego w, y finalmente, v.

41

Graficacin de resultados en MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Graficacin conjunta de observaciones y predicciones Es muy frecuente en ingeniera comparar las observaciones medidas (por ejemplo la temperatura ambiente) con los clculos realizados mediante un modelo matemtico (sea ste meramente una funcin algebraica ajustada previamente a los datos, o un modelo terico que interprete la fsica del sistema). El siguiente programa ilustra un ejercicio, donde se comparan datos de un da lluvioso de abril en La Plata, con un polinomio de grado 5 ajustado a ellos. Incidentalmente se muestran las tiles funciones preprogramadas de Matlab, polyfit que devuelve el vector de coeficientes del polinomio ajustado segn el mtodo de los cuadrados mnimos y polyvalque calcula los valores del polinomio dado el vector de coeficientes y el vector de la variable independiente, t. clear t = 0:1:23; T = [12 11.5 10.9 9.8 9.4 8.7 8.5 8.9 10.1 11.3 12.1 13 14 14.5 14.8 15.1 15.4 15.2... 15.1 14.7 14.2 13.9 13.6 12.8 ]; p = polyfit (t, T,5) Tp = polyval(p,t) plot (t,T, 'o', t, Tp, 'Linewidth', 1); Title ('DIA LLUVIOSO DE OTOO EN LA PLATA', 'Fontsize', 25) xlabel ('Hora del dia', 'Fontsize', 20) ylabel ('Temperatura, C', 'Fontsize', 20) legend ('Datos del SMN', 'Polynomio grado 5') Los datos de T, estn indicadas por smbolos, mientras que los de Tp, que son clculados, se los representa mediante el modo automtico de Matlab (puntos unidos con lneas rectas, que se ven como una curva)

DIA LLUVIOSO DE OTOO EN LA PLATA


16 15 Datos del SMN Polynomio grado 5

14

Temperatura, C

13

12

11

10

Hora del dia

10

15

20

25

42

Graficacin de resultados en MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 GRFICOS TRIDIMENSIONALES Grficos de lnea La funcin plot3(x,y,z) es el anlogo tridimensional de la funcin plot,. Permite dibujar puntos en un espacio 3-D cuyas coordenadas estn contenidas en tres vectores fila (de 1 x n). Por defecto, plot3 une los puntos con lneas continuas al igual que plot, pero se puede configurar para que represente solamente los smbolos. Se puede utilizar para grficos paramtricos. Ejemplo Si se grafica cos() en funcin de sen() por medio de la sentencia plot 2D ya estudiada tendramos >> alfa = 0:0.01:10*pi; >> y = sin(alfa); >> z = cos(alfa); >> plot(y,z); xlabel ('coseno de alfa', 'Fontsize', 18); ylabel ('coseno de alfa', 'Fontsize', 18); >> plot(y,z); xlabel ('seno de alfa', 'Fontsize', 18); ylabel ('coseno de alfa', 'Fontsize', 18);

El grfico, si tuviera una relacin de aspecto 1:1 producira una circunferencia por cada 2 de manera tal que la figura es en realidad la superposicin de 5 circunferencias

43

Graficacin de resultados en MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Si ubicramos el vector alfa en el eje vertical, las circunferencias iran ascendiendo, dando lugar a un grfico tridimensional tipo resorte. >plot3(y,z,alfa, 'LineWidth',1);xlabel ('seno de alfa', 'Fontsize', 18); (contina debajo) ylabel ('coseno de alfa', 'Fontsize', 18);zlabel ('alfa', 'Fontsize', 18)

SUPERFICIES En los grficos de superficie, se pueden representar valores de z como funciones de x e y. No obstante, la diferencia con el plot3 radica en que los vectores x e y deben ser transformados en matrices X e Y, por medio de la funcin meshgrid. [X,Y]= meshgrid (x,y) Por ejemplo, si x = -1:1; e y = -2:2:2 >> x = [-1,0,1] x= -1 0 1

>> y = [-2,0,2] y= -2 0 2

44

Graficacin de resultados en MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 >> [X,Y]= meshgrid (x,y) X= -1 0 1 -1 0 1 -1 0 1 Y= -2 -2 -2 0 0 0 2 2 2 Es decir, La matriz X contiene 3 filas iguales , cuyos valores son los del vector original x. El hecho de que sean 3 filas corresponde a que el vector original y tiene 3 valores. La matriz Y, en cambio, contiene 3 columnas iguales, cada una de ellas con los valores originales del vector y. En este caso, el hecho de que sean 3 columnas corresponde a que el vector original x tiene 3 valores. Las matrices X e Y conforman los puntos del dominio, en el plano x-y, donde se van a calcular los valores de la funcin Z = f (X,Y)

-2 0 y 2 -1 0

1 x

si por ejemplo, se calculan los valores de la matriz Z >> Z = X.^2 + Y.^2 y luego se representan en 3 dimensiones como una superficie, usando la funcin mesh >>mesh (X,Y,Z) se obtiene

45

Graficacin de resultados en MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 As como la funcin mesh grafica la retcula en 3 dimensiones, uniendo los puntos de Z con lneas, la funcin surf colorea la forma 3D siguiendo un cdigo de colores aclarado en colorbar. La funcin surf puede usarse directamente, luego de meshgrid, no se necesita ejecutar la funcin mesh primero. >> surf(X,Y,Z)

La superficies se pueden observar de varias maneras. Para controlar la direccin de observacin se emplea funcin view(az, el). Los ngulos se definen en grados. Por defecto: az = 37.5, el = 30. Se ver otro ejemplo de mayor complejidad >>[X,Y] = meshgrid (-pi:pi/10:pi, -pi:pi/10:pi); >>Z = cos (X).* cos(Y) >>surf(X,Y,Z) >>view (30, 60) >>colorbar

46

Graficacin de resultados en MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Las interfases entre zonas de distintos colores pueden suavizarse haciendo >>shading interp

Las caractersticas particulares de este grfico se pueden cambiar tambin desde la ventana de la Figura (Edit-Figure properties-Axes properties-Current object properties). GRFICOS DE CONTORNO O CURVAS DE NIVEL Los grficos de contorno se utilizan para visualizar un grfico de 3D en un sistema de coordenadas 2D. Un contorno se produce la superficie 3D es intersectada por un plano paralelo al X Y, a una dada altura Z. La repeticin de este procedimiento a distintas alturas Z permite proyectar las curvas de nivel o grficos de contorno sobre el plano XY de base. Siguiendo el ejemplo anterior, si se escribe >>Contour (X,Y,Z) se obtiene

47

Graficacin de resultados en MATLAB. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Pero este grfico no permite observar a que valores de Z corresponden las curvas. Con este fin se guarda informacin del grfico en las variables c y h, y luego se suministra sta a label a efectos de que aparezcan los valores sobre las curvas. La sentencia colorbar permite asignar colores a las curvas de nivel, segn sus valores de Z. >> [c,h] = contour(X,Y,Z); clabel(c,h), colorbar

Es posible mostrar slo los niveles requeridos de la variable Z, por ejemplo entre -0.9 y 0.9 variando de a 0.3, mediante >>[c,h]= contour (X,Y,Z, [-0.9:0.3:0.9]); >>clabel(c,h);

48

Programacin en Matlab. Parte I. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 CAPITULO 5. PROGRAMACIN MATLAB PARTE I. COMPONENTES BSICOS DEL LENGUAJE. Introduccin. Parte general El command window de Matlab opera con smbolo, el prompt >>, que espera instrucciones de la lnea de comandos. En esa lnea se pueden ejecutar instrucciones del usuario, funciones preprogramadas, introducir datos, y visualizar resultados. Estos clculos utilizan la sintaxis y reglas de formacin de expresiones del Lenguaje Matlab y conforman lo que podra denominarse operacin en modo interactivo (instruccin enter-instruccin) comparable a la utilizacin de una moderna calculadora grfica. Hasta ahora nos hemos concentrado en este aspecto interactivo del entorno Matlab. Matlab es adems, un lenguaje de programacin de muy alto nivel. Los lenguajes de programacin de mayor dificultad de uso, pero que permiten sacar mximo provecho de las posibilidades de los sistemas de cmputo se denominan de bajo nivel, como el lenguaje binario; estn tambin los de nivel intermedio como el Assembler (Ensamblador), que fueron empleados por programadores, especialmente durante los inicios de la computacin digital (dcadas de 1940-50). La familia de lenguajes C es de nivel intermedio-alto, muy utilizado en ingeniera electrnica para comandar la operacin de dispositivos. Los lenguajes clsicos de alto nivel, que han sido usados por estudiantes de ingeniera qumica son Fortran (Formula Translator), Basic (Beginners all-purpose symbolic instruction code) y Pascal, entre otros. Son lenguajes donde el programador escribe casi todo el programa, puesto que las opciones de funciones preprogramadas no son muy variadas. El lenguaje Matlab, en cambio, facilita la utilizacin de las funciones que ya trae incorporadas en el entorno por lo que constituye realmente un Centro de Cmputos en una computadora personal. El programador Matlab, podr seleccionar las partes a programar, y aquellos segmentos de programa donde utilizar recursos ya disponibles del sistema. Para eso, adems de conocer las caractersticas del lenguaje, deber conocer el entorno y el sistema de ayuda, a efectos de estar capacitado para emplear los recursos disponibles en forma eficiente. En este curso se ensear Matlab desde la ptica del programador clsico, como medio para aprender a programar. En otras asignaturas, y especialmente en la vida profesional, podr utilizar el sistema en la forma que desee. Archivos *.m Cuando una serie de instrucciones dadas por el usuario se repite en Matlab puede ser agrupada y transformada en un programa propio del usuario (ya devenido programador). Se la copia al editor de archivos, se le da un nombredearchivo.m y se la ejecuta desde el command window invocando su nombre como si fuera una funcin ms del entorno Matlab. A menudo, los primeros programas suelen tener una estructura secuencial; no obstante, en otros casos, es necesario programar la toma de decisiones con la introduccin de estructuras alternativas, y considerar la repeticin de la ejecucin de ciertos grupos de sentencias para distintos valores de determinadas variables, por medio de lazos repetitivos. As es que surgen entonces los verdaderos programas Matlab (las aplicaciones desarrolladas por el usuario). Cualquier archivo *.m se ejecuta desde el command window, escribiendo su nombre, o desde otro archivo *.m que se considera programa llamador, el que a su vez, se ejecuta desde el command window. En otros lenguajes de alto nivel, el programa escrito en tal lenguaje se denomina cdigo fuente o programa fuente y se traduce al lenguaje de mquina, antes de ejecutarlo. Esa traduccin se denomina compilacin. Los programas compilados pueden correrse para distintos juegos de datos, que se tipean en archivos para texto ASCII o plano (plain text) (como los del bloc de notas). En Matlab, el usuario no detecta la compilacin puesto que ejecuta el cdigo fuente directamente desde el command window. Un programador Matlab puede asignar todos los datos en un archivo *.m mediante asignaciones directas, y llamarlo desde otro archivo *.m, simplemente intercalando su nombre como si fuera una instruccin ms del segundo programa. As, se desdibujan los lmites entre programa fuente y archivo de datos. Esta potente caracterstica Matlab simplifica enormemente la entrada de datos. Si bien la sintaxis y las reglas de formacin de expresiones se deben conocer ya para la utilizacin interactiva del entorno, vamos a estudiarlas con mayor atencin en este captulo.

49

Programacin en Matlab. Parte I. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 EDITOR DE MATLAB, para la realizacin de programas, nombredearchivo.m En el escritorio de Matlab, llevamos el puntero del ratn a la esquina superior izquierda, men File. Elegimos New para un programa nuevo (o botn con pgina en blanco), u open si queremos trabajar con un programa existente

Ejemplo de uso Grfica de una funcin F() = tg Bi, que tiene gran inters en la resolucin de ecuaciones diferenciales parciales de transferencia de calor y materia El editor maneja texto plano, pero agrega color verde a los comentarios (precedidos por %) que son instrucciones que sirven para hacer ms legible el programa, pero que no tienen efecto computacional alguno. Las cadenas de caracteres en ejes y ttulos de grficos se colorean automticamente de un color rojizo. Para ejecutar o correr el programa, se usa el men debug y all se oprime run, o bien se activa el. Una funcin muy til del editor es en el men desplegable edit, es find and replace, es decir, bsqueda y reemplazo. Es muy til para corregir errores. La conocida funcin cut o copy and paste (cortar o copiar y pegar) es sumamente prctica a la hora de evitar retipear demasiado cdigo. La funcin del ejemplo tiene infinitas races. Aqu se ampli el grfico para mostrar la primera, partiendo de =0, que es de alrededor de 1,57.

50

Programacin en Matlab. Parte I. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Aspectos bsicos del Lenguaje MATLAB Tipos de datos Como se ha dicho, cuando Matlab trabaja con datos numricos, utiliza matrices, que son tipos de datos formados por elementos. Como caso particular de una matriz de 1x1 Matlab trabaja con escalares, y el lenguaje siempre opera en doble precisin, otorgando 8 bytes (64 bits) de memoria a cada elemento de la matriz. De los 64 bits, emplea 53 para la mantisa, lo que implica tratar 15 cifras decimales exactas y deja 11 para el exponente de 2. Matlab tambin puede trabajar con cadenas de caracteres, y con otros tipos de datos como matrices de ms de dos dimensiones (hipermatrices), matrices dispersas, vectores, matrices de celdas, estructuras, clases y objetos. Nmeros Para nmeros, MATLAB usa notacin decimal convencional, con un punto decimal opcional y un signo opcional negativo o positivo. La notacin cientfica utiliza la letra e para especificar un factor de escala de potencias de 10. Los nmeros imaginarios usan tanto i como j como sufijo. Algunos ejemplos correctos de nmeros se muestran en el recuadro.

-99

0.0001 1.60210e-20 6.02252e23 1i -3.14159j 3e5i

9.6397238

Todos los nmeros se almacenan internamente usando el formato largo estndar para operaciones de punto flotante. Los nmeros de punto flotante, tienen una precisin finita de aproximadamente 16 dgitos significativos y un rango de aproximadamente 10-308 a 10+308. Nmeros complejos Matlab permite ingresar nmeros complejos en la notacin matemtica usual >> 2 + 5 j ans = 2.000 + 5.000 i Si se coloca una expresin cuyo resultado es imaginario, Matlab lo visualiza como tal a= sqrt(-2) a= 0 + 1.4142i Matlab permite generar matrices de nmeros complejos >> A = [1+2i 2+3i; -1+i 2-3i] A= 1.0000 + 2.0000i 2.0000 + 3.0000i -1.0000 + 1.0000i 2.0000 - 3.0000i Asimismo, Matlab dispone de la funcin COMPLEX que genera un nmero complejo a partir de sus argumentos reales e imaginarios Ej: >> complex (1, 2) ans = 1.0000 + 2.0000i Como se ha visto cualquier cadena de caracteres puede asignarse a una variable, sin declaraciones previas ni dimensionamiento >>m = cadena de caracteres

51

Programacin en Matlab. Parte I. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 EXPRESIONES ARITMETICAS: Como otros lenguajes de programacin, MATLAB provee expresiones aritmticas, pero a diferencia de aquellos lenguajes, involucran matrices enteras. Las expresiones estn compuestas de:

Variables aritmticas Nmeros o constantes Operadores Funciones

Variables o identificadores del usuario Son cantidades que puede variar durante el desarrollo de un programa o durante una sesin del command window. Para nombrarlas, se pueden usar combinaciones de letras, nmeros y el guin bajo, hasta 31 caracteres. Debe comenzar por una letra. Matlab diferencia entre maysculas y minsculas, as que PianO y piaNo no son lo mismo. Como norma inicial de ayuda nemotcnica, se sugiere nombrar las matrices con maysculas, y vectores o escalares con minsculas. Las expresiones se escriben en una lnea, similarmente a los otros lenguajes. Por ejemplo, la expresin cinemtica para el espacio recorrido por un objeto uniformemente acelerado

1 x0 + v0 t + at 2 2

se puede escribir >> x0 + v0.*t + 0.5.*a.*t.^2 que, de estar definidos x0, v0, t, y a, va a dar un resultado que Matlab, asigna a una variable ans (por answer, respuesta)

Si se dividiera esta expresin por el tiempo transcurrido se obtendra la velocidad promedio, >> v = (x0 + v0*t + 0.5*a*t^2)./t En este caso tenemos una asignacin deliberada, a la variable (ver captulo diagramacin). A la derecha del signo igual, puede haber una expresin, a la izquierda slo una variable. Si existiera un mvil cuya velocidad fuera en todo momento 1 m/s menor que la del previo, se podra hacer >>u = v-1 Operadores aritmticos matriciales Las expresiones usan los operadores aritmticos y reglas de precedencia habituales. + * / \ ^ ' () Suma (adicin) Resta (Sustraccin) Multiplicacin Divisin Divisin izquierda (Operacin del lgebra lineal) Potenciacin Transposicin conjugada compleja Especificacin del orden de evaluacin

52

Programacin en Matlab. Parte I. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Operadores de arreglos. Cuando se las lleva fuera del lgebra lineal, las matrices se consideran arreglos numricos bidimensionales y las operaciones aritmticas se realizan elemento a elemento. Esto implica que la suma y resta son iguales para arreglos y matrices, pero para operaciones multiplicativas es diferente. MATLAB usa un punto como parte de la notacin para operaciones multiplicativas con arreglos. La lista de operadores incluye:

+ .* ./ .\ .^ .'

Suma Resta Multiplicacin elemento por elemento Divisin elemento por elemento Divisin izquierda elemento por elemento Potenciacin elemento por elemento Transposicin de arreglos no conjugada

Ejemplos de asignaciones Se han visto ya varios ejemplos de expresiones MATLAB. Aqu tenemos unos pocos ejemplos adicionales, y los valores resultantes. Fuerza = masa .* aceleracion; Fuerza_grav= k.*m1.*m2./d.^2; hipot = sqrt (cat1.^2+cat2.^2) intensidad = voltaje./resistencia a = abs(3+4i) a= 5 (recuerde que calcula la raz cuadrada de la suma de los cuadrados de los argumentos) z = sqrt(besselk(3,1)) z= 7.1013 Las expresiones pueden incluir tambin los valores que pueden accederse a travs de subndices. b = sqrt(a(2)) + 2*c(1) b= 7 c(2,1) = a(2,1) + b(2,1)

53

Programacin en Matlab. Parte I. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Cuando usar operadores multiplicativos de elemento a elemento o matriciales? Con este fin, podemos hacer la tabla siguiente, considerando dos cantidades a y b a escalar ( 1 x 1) b escalar ( 1 x 1) axb

a b

ab

* *

equivalentes

y y

.* / .*

equivalentes

./ ^ y .^
slo

equivalentes

escalar ( 1 x 1)

Matriz o vector

equivalentes

slo ./

.^

Matriz o vector

Matriz o vector

* para algebra / para algebra lineal y .* para lineal y ./ para


operaciones elemento a elemento operaciones elemento a elemento

slo con.^

Matriz o vector

Escalar (1 x 1)

mismo

.*

da lo

mismo

./

dan lo

^ y .^

dan distinto

Conclusin: dado que entre dos escalares, los operadores matriciales y elemento a elemento son equivalentes, y teniendo en cuenta que la mayora de los arreglos se procesan elemento a elemento, se sugiere trabajar con operadores excepto cuando deliberadamente quiera trabajar en operaciones matriciales o del algebra lineal, tales como multiplicacin de matrices.

.*, ./ y .^,

54

Programacin en Matlab. Parte I. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Ingreso de largas lneas de comandos Si una instruccin no cabe en una sola lnea, o le parece que queda mal una expresin demasiado larga, predefina grupos de variables y/o utilice tres puntos, seguidos por Enter para indicar que la instruccin contina en la lnea siguiente. Por ejemplo, consideremos la expresin que permite calcular el rea superficial de un elipsoide de ejes l1, l2 y l3

1 l 2 + l 3 l 2 + l 3 Agp = l1 + 2 2 2 2l1 l 2 + l3 l2 1 2 l1
La expresin Matlab quedara: 11=10;l2=3; l3=2.5;

2 l 2 + l3 l2 1 2 arcsin l1

agp = (pi./2).*l1.*0.5.*(l2+l3)*( 0.5 .*(l2+l3)./l1+ 1./(sqrt ( l1.^2 - (0.5.*(l2+l3)).^2 )./l1 ).*asin ( sqrt ( l1.^2- (0.5.*(l2+l3) ).^2 ) ./l1 )) se podra separar en dos lneas as agp = (pi./2).*l1.*0.5.*(l2+l3)*( 0.5 .*(l2+l3)./l1+ ... 1./(sqrt ( l1.^2 - (0.5.*(l2+l3)).^2 )./l1 ).*asin ( sqrt ( l1.^2- (0.5.*(l2+l3) ).^2 ) ./l1 )) O mejor, se podran predefinir grupos de variables U, y lm
2 l12 lm l +l y lm = 2 3 U= l1 2

As la expresin del rea superficial geomtrica quedara:


Agp = lm 1 l1lm + arcsin U 2 l1 U

permitiendo escribir en Matlab una expresin de asignacin mucho ms compacta agp = (pi./2).*l1.*lm.*( lm./l1 + (1./U).*asin(U));

55

Programacin en Matlab. Parte I. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Optimizacin del uso de parntesis en expresiones aritmticas Se va a escribir la ec. de Ergun, conocida en la ingeniera qumica, que calcula la prdida de presin que experimenta un fluido al atravesar, con velocidad superficial V, un lecho relleno de altura o longitud L, caracterizado por una porosidad y un tamao de partcula Dp. La viscosidad y densidad del fluido son y , respectivametne

(1 ) p (1 ) 2 = 150 2 3 V + 1,75 V L d p d p 3
2

eps = 0.4; mu= 1.8e-5; dp=3e-3; rho= 1.2; v= 0.5; Deltap_L= (150*(1-eps)^2 *mu) /((dp^2)*(eps^3))*v +(1.75* rho*(1-eps))/ (dp*(eps^3))*v^2

Deltap_L = 2.4844e+003 Comentarios 1) Obsrvese que la expresin Matlab escrita tiene un nmero mayor de parntesis que los necesarios. El ejercicio propuesto es minimizar el nmero de parntesis. 2) Como crtica a la expresin escrita de Ergun en Matlab, se puede decir que es muy larga, lo que la hace ms proclive a incorporar errores. Imagnense que hubiramos tipeado 175 en lugar de 1,75. Matlab se hubiera dado cuenta?. Y si hubiramos omitido escribir (es decir, mu)?. Escriba la ecuacin de una forma ms compacta y minimice el nmero de parntesis. Ejercicio escriba en Matlab la ecuacin de GAB (Guggenheim, Anderson, De Boer) de la adsorcin

W=

Wm C k a (1 k a )(1 k a + C k a )

donde W es la cantidad de adsorbato depositado, por unidad de masa de adsorbente, y a es la actividad del adsorbato en la atmsfera que rodea al adsorbente. C, k y Wm son coeficientes de la ecuacin, que deben determinarse para cada par adsorbente-adsorbato utilizando datos experimentales. Haga un ejemplo en el command window, calculando W vs a, para a variando entre 0,01 y 0,99. Utilice los coeficientes siguientes: Wm = 0,07; C = 20 y k = 0.94. Represntelos mediante la sentencia plot.

56

Programacin en Matlab. Parte I. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Edicin de la lnea de comandos Las teclas de flecha o control en su teclado permiten recordar, editar y reutilizar comandos tipeados con anterioridad. Por ejemplo, suponga que, equivocadamente, Ud. ingresa u = squrt (l1.^2 lm.^2); habiendo escrito mal sqrt. MATLAB responde con Undefined function or variable 'squrt'. En lugar de retipear la lnea entera, simplemente presione la tecla . El comando para mover el cursor hacia la zona a equivocado se muestra nuevamente. Use la tecla corregir. El uso repetido de la flecha recuerda lneas previas. Tipeando unos pocos caracteres, y luego la tecla encuentra una lnea previa que comienza con esos caracteres. Asimismo, se pueden copiar comandos previamente ejecutados del historial de comandos (Command History). La lista de las distintas teclas disponibles para la edicin de lneas de comando es Ctrl+p Recupera la lnea previa Ctrl+n Ctrl+b Ctrl+f Ctrl+r Ctrl+l Recupera la lnea siguiente Mueve atrs un carcter Mueve un carcter hacia delante Mueve una palabra hacia la derecha Mueve una palabra hacia la izquierda Va hasta el comienzo de la lnea Va hasta el final de la lnea Borra la lnea Borra el carcter en la posicin del cursor Borra el carcter anterior al cursor Borra al final de la lnea

Ctrl+ Ctrl+ Home End Esc Del Backspace

Ctrl+a Ctrl+e Ctrl+u Ctrl+d Ctrl+h Ctrl+k EXPRESIONES LOGICAS Operadores relacionales

Hasta ahora, hemos tratado con operadores aritmticos matriciales o elemento a elemento, pero no hemos tomado decisiones dependiendo de alguna comparacin. Considrese el clculo del discriminante del polinomio de segundo grado a x2 + bx + c = 0, para averiguar si se calcularn races complejas o reales

NO

b2 4 a c 0

SI Calcula races reales

Calcula races complejas

la expresin b2 4 a c 0 tiene slo dos resultados posibles: verdadero o falso, y constituye, por lo tanto, una expresin lgica. El smbolo (mayor o igual, o greater equal than) es un operador relacional. Las variables lgicas se pueden crear asigndoles el valor de una expresin lgica como por ejemplo: V_L = b2 4 a c 0, que valdr 1 si es verdadera la expresin y cero si es falsa.

57

Programacin en Matlab. Parte I. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 El lenguaje de programacin de MATLAB dispone de los siguientes operadores relacionales:

< menor que > mayor que <= menor o igual que >= mayor o igual que == igual que ~= distinto que*
*
El smbolo ~ se obtiene escribiendo char(126) en el command window

Si bien la utilizacin efectiva de estos operadores, como de los operadores lgicos, se realizar en el captulo siguiente, resulta importante indicar que en Matlab los operadores relacionales pueden aplicarse a valores individuales (escalares de 1 x 1) o, quizs con menos frecuencia en ingeniera qumica, a vectores y matrices. Eso hace que tengan un significado especial. Al igual que en C o Fortran, si una comparacin se cumple el resultado es 1 (true o verdadero), mientras que si no se cumple es 0 (false o falso). Recprocamente, cualquier valor distinto de cero es considerado como true y el cero como false. La diferencia con los otros lenguajes est en que cuando los operadores relacionales de MATLAB se aplican a dos matrices o vectores del mismo tamao, la comparacin se realiza elemento a elemento, y el resultado es otra matriz de unos y ceros del mismo tamao, que recoge el resultado de cada comparacin entre elementos. Considrese el siguiente ejemplo como ilustracin de lo que se acaba de decir: >> A=[1 2;0 3]; B=[4 2;1 5]; >> A==B ans = 01 00 >> A~=B ans = 10 11

Al comparar matrices con operadores relacionales en Matlab, se obtienen matrices de resultados lgicos, que tiene elementos verdaderos (unos) y falsos (ceros). Resultados totalmente verdaderos implicaran unos en todos los elementos, mientras que los totalmente falsos incluirn ceros en todos los elementos

LOS OPERADORES RELACIONALES COMPARAN VALORES NUMERICOS PARA DAR RESULTADOS LOGICOS

58

Programacin en Matlab. Parte I. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Operadores lgicos Supngase que al resolver la raz de una ecuacin no lineal, (fx= x 3 + 2x 2 + 2x +2=0, cuya nica raz real es -1,544) debe programar un algoritmo de prueba y error que, para continuar calculando, deba satisfacer que el valor absoluto de la funcin (fx) sea mayor o igual que una tolerancia(por ej, 0.01), y que el nmero de iteraciones, nit (es decir, de pruebas realizadas), sea menor o igual que un mximo predeterminado, nitmax (porque algunos mtodos en ocasiones no convergen). Tal expresin debera vincular dos expresiones lgicas que incluyen operadores relacionales 1) abs (fx) tol 2) nit nitmax Como los resultados de ambas comparaciones son valores lgicos, necesitamos un operador que compare valores lgicos, es decir un Operador lgico. Los operadores lgicos de MATLAB son los siguientes: Los operadores lgicos se combinan con los relacionales para comprobar el cumplimiento de condiciones mltiples Por ejemplo, la condicin mltiple 1)-2) ser entonces, abs (fx) tol & nit nitmax Entonces, los operadores lgicos vinculan expresiones lgicas para entregar resultados lgicos. Si el valor absoluto de fx es mayor o igual que la tolerancia (verdad), y el nmero de iteraciones es menor o igual que el mximo (verdad), entonces, el resultado global vinculado por el & resulta verdadero.

& and | or ~ not (negacin lgica)

Se vio un ejemplo escalar, veamos ahora ejemplos de tipo matricial Se ver un ejemplo >> A= zeros (2) + 1.5 A= 1.5000 1.5000 1.5000 1.5000 >> B= ones(2) B= 1 1 1 1 A>1.2 & A>B ans = 1 1 1 1

Es decir, los elementos de la matriz A son todos mayores que 1.2, y a su vez mayores que todos los de la matriz B, entonces, tenemos dos resultados lgicos verdaderos producidos por expresiones lgicas de operadores relacionales. El operador lgico & (and) combina dos resultados verdaderos, de manera que la expresin lgica global resulta verdadera tambin.

59

Programacin en Matlab. Parte I. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008

LOS OPERADORES LOGICOS VINCULAN ENTREGAR RESULTADOS LOGICOS

EXPRESIONES

LOGICAS

PARA

Tabla de verdad Resultados de expresiones lgicas dependiendo del valor de los datos Datos a F F T T b F T F T Resultado de las expresiones lgicas ~a (not a) a&b (a and b) T F T F F F F T a |b (a or b) F T T determinar

determinar si a or b es true cuando ambos son true. Implica determinar si el or es inclusivo o exclusivo. Por ejemplo considrese los siguientes datos y expresin lgica >> a=1; b=2; a >0 |a < b ans = 1 Prioridad de los operadores Se pueden construir expresiones con cualquier combinacin de operadores aritmticos, de relacin y lgicos. Los niveles de prioridad determinan el orden de evaluacin de una expresin. Dentro de un mismo nivel de prioridad, la evaluacin se realiza de izquierda a derecha. Las reglas de prioridad para los operadores MATLAB se muestran en este recuadro.

1. Parntesis () 2. Transposicin(.'), potenciacin (.^), transposicin compleja conjugada('), potenciacin de matrices(^) 3. signo ms (+), signo menos (-), Operador Lgico de negacin NOT (~) 4. Multiplicacin (.*), divisin derecha (./), divisin izquierda(.\), multiplicacin matricial (*), divisin matricial (/), divisin matricial izquierda (\) 5. suma (+), resta (-) 6. operador dos puntos (:) 7. Menor que (<), menor o igual que (<=), mayor que (>), mayor o igual que (>=), igual que (==), distinto (~=) 8. Operador lgico de conjuncin AND (&) y el Operador lgico de decisin alternativa OR (|) tienen igual prioridad establecindose sta de izquierda a derecha. FUNCIONES DE BIBLIOTECA (LIBRERAS) MATLAB tiene un gran nmero de funciones incorporadas. Algunas son funciones propias (built-in functions),esto es, funciones incorporadas en el propio cdigo ejecutable del programa. Estas funciones son particularmente rpidas y eficientes. Existen adems funciones definidas en ficheros *.m que vienen con el propio programa o que han sido aportadas por usuarios de Matlab. Estas funciones extienden en gran manera las posibilidades del entorno para el desarrollo de aplicaciones.

60

Programacin en Matlab. Parte I. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Las funciones tienen nombre, argumentos y valores de retorno. Obsrvese que [maximo, imax] = max(x); Esta funcin, aplicada a una matriz genrica da el valor del elemento mximo y su posicin. En matrices da los mximos de las columnas, as como el ndice de su posicin en ellas. En los ejemplos que siguen, hay tantos valores de retorno como elementos de arreglo tengan x, y, y alfa. r = sqrt(x^2+y^2); a = cos(alfa) - sin(alfa); Estas funciones trabajan con arreglos, elemento a elemento. MATLAB tiene diversos tipos de funciones. A continuacin se enumeran los tipos de funciones ms importantes, clasificadas segn su finalidad: 1.- Funciones matemticas elementales. 2.- Funciones especiales. 3.- Funciones matriciales elementales. 4.- Funciones matriciales especficas. 5.- Funciones para la descomposicin y/o factorizacin de matrices. 6.- Funciones para anlisis estadstico de datos. 7.- Funciones para anlisis de polinomios. 8.- Funciones para integracin de ecuaciones diferenciales ordinarias. 9.- Resolucin de ecuaciones no-lineales y optimizacin. 10.- Integracin numrica. 11.- Funciones para procesamiento de seal. Los argumentos verdaderos de estas funciones pueden ser expresiones y tambin llamadas a otra funcin. MATLAB provee un gran nmero de funciones matemticas estndar elementales, incluyendo abs (valor absoluto), sqrt (raz cuadrada), exp, y sin. Tomar la raz cuadrada o el logaritmo de un nmero negativo no es un error como en los otros lenguajes; en MATLAB se obtendr el resultado complejo en forma automtica. MATLAB tambin ofrece muchas ms funciones matemticas avanzadas, incluyendo las de Bessel y gamma. La mayora de estas funciones aceptan argumentos complejos. Para disponer de una lista de las funciones elementales, se tipea, en el Command Window. >>help elfun Se dan unos pocos ejemplos de funciones elementales que operan sobre en modo de arreglos (elemento a elemento), lo que incluye valores individuales, como sin(x), cos (x), etc. Trigonomtricas sin(x), seno; cos(x), coseno; tan(x), tangente; asin(x), arco seno; acos(x), arco coseno; asinh(x), arco seno hiperblico; acosh(x), arco coseno hiperblico; atanh(x), arco tangente hiperblica. Exponenciales log(x), logaritmo natural; log10(x), logaritmo decimal; exp(x), funcin exponencial; sqrt(x), raz cuadrada Funciones de operacin algebraica sign(x) devuelve -1 si x<0; 0 si x=0 y 1 si x>0. Aplicada a un nmero complejo, devuelve un vector unitario en la misma direccin.

61

Programacin en Matlab. Parte I. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 rem(x,y) (de remainder) provee el resto de la divisin (2 argumentos, dividendo y divisor); round(x) redondeo hacia el entero ms prximo; fix(x) trunca los decimales dejando la cifra entera; gcd(x) mximo comn divisor; lcm(x) mnimo comn mltiplo Funciones que actan sobre vectores Las siguientes funciones actan sobre vectores (no sobre matrices ni sobre escalares) [xm,im]=max(x) mximo elemento de un vector. Devuelve el valor mximo xm y la posicin que ocupa im; min(x) mnimo elemento de un vector. Devuelve el valor mnimo y la posicin que ocupa; sum(x) suma de los elementos de un vector; mean(x) valor medio de los elementos de un vector; std(x) desviacin tpica; prod(x) producto de los elementos de un vector; n = length(x), provee el nmero de elementos del vector x. [y,i]=sort(x) ordenacin de menor a mayor de los elementos de un vector x. Devuelve el vector ordenado y, y un vector i con las posiciones iniciales en x de los elementos en el vector ordenado y. En realidad estas funciones se pueden aplicar tambin a matrices, pero en ese caso se aplican por separado a cada columna de la matriz, dando como valor de retorno un vector resultado de aplicar la funcin a cada columna de la matriz considerada como vector. Si estas funciones se quieren aplicar a las filas de la matriz basta aplicar dichas funciones a la matriz traspuesta. Funciones que actan sobre matrices Se dieron en el captulo de manejo matricial. No obstante, se muestra aqu una funcin sumamente til para realizar estructuras repetitivas [m,n] = size(A) devuelve el nmero de filas m y de columnas n de una matriz n = length( A) provee el nmero de elementos de la mayor dimensin de la matriz, sea sta fila o columna (por ejemplo en una matriz de 2 x 5 devuelve 5, mientras que en una de 3 x 2 devuelve 3)

Para tener una lista completa de las funciones ms avanzadas y de las funciones matriciales, se tipea >> help specfun o >> help elmat
Existen funciones especiales que proveen constantes tiles. pi 3.14159265... i Unidad imaginaria , -1 j eps realmin realmax Inf NaN Igual que i Precisin relativa en punto flotante, 2-52 Valor mnimo de punto flotante, 2-1022 Valor mximo de punto flotante, (2- )21023 Infinito No es un nmero (Not-a-number)

Infinito es generado dividiendo un nmero distinto de cero por un nmero igual a cero, or al evaluar expresiones matemticas definidas que den overflow, esto es, que excedan realmax. NaN se genera al tratar de evaluar expresiones como 0/0 or Inf-Inf que no tienen valores matemticos definidos.

62

Programacin en Matlab. Parte I. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Entrada y salida de datos (bsico) Import Wizard Una forma sencilla de leer datos desde MATLAB en muchos formatos, incluyendo planillas de Excel, es utilizar el Import Wizard (Asistente de la importacin de datos) Archivo Ascii En File, import data, se elige el archivo, por ejemplo un archivo ASCII datos.txt, y luego el asistente va guiando al usuario. Al oprimirse import data,se descuelga un cuadro de dilogo que muestra una vista previa del archivo a importar, y de cmo Matlab est interpretando los informacin a leer. Por ejemplo, si el archivo es numrico, se muestran stos a efectos de que el usuario verifique si la separacin entre los nmeros es correcta, o no, o bien, si asigna todos los nmeros a una sla matriz o si el usuario prefiere asignar las variables por columna, a vectores. Veamos primero un ejemplo, de un archivo de datos hecho con un bloc de notas, que contiene dos lneas de 4 nmeros cada una.

Los nmeros en el archivo haban sido separados por espacios. El Import Wizard interpreta (ver opcin tildada), pero da la opcin para que el usuario lo defina tambin.

lo

63

Programacin en Matlab. Parte I. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008

Planilla de clculo En el caso de una simple planilla de clculo Excel con nmeros, supongamos que tenemos una columna con valores de x, otra con sus cuadrados, llamada y1, y una tercera con las races cuadradas, llamado y2. Si la primera fila contiene los ttulos de las columnas, es decir x, y1, e y2, respectivamente, veamos que hace el Import Wizard en este caso.

el asistente detecta una matriz de nmeros, a la que llama por defecto data de 15 filas por 3 columnas (obsrvese que muestra slo 10 filas), y dos arreglos de celdas, que en realidad son coincidentes, uno de ellos textdata de 1 fila por tres columnas, conteniendo los nombres x, y1 e y2, como todo texto que encuentra en el archivo. El otro arreglo de celdas, colheaders, corresponde al encabezamiento de las columnas. Es decir, si hubiera habido ms texto en el archivo, el arreglo textdata resultara ms grande que el colheaders. Obsrvese tambin que permite elegir entre aceptar la organizacin de variables propuesta por Matlab, o bien, crear variables con el contenido de cada columna. Si elegimos esta ltima opcin

la propuesta conlleva a tres vectores columna, de 15 filas. Como est marcado x, se es el vector que muestra en el preview, pero slo 10 elementos.

64

Programacin en Matlab. Parte I. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008

La desventaja del Import Wizard es que no puede usarse directamente desde un programa Matlab tipo nombredearchivo.m, ni desde el command window sino solamente desde el men. En consecuencia, su utilizacin implicar importar manualmente los datos, antes de la ejecucin del programa

Ingreso de datos con el editor de arreglos de Matlab Se generan los moldes, matrices con el mismo tamao que las que queremos ingresar, simplememente para luego tipear los datos. Por ejemplo, si debemos ingresar una matriz de 4 x 4, se puede prearmar la estructura, con una matriz de ceros >> A=zeros(4); >> Luego se va al editor de arreglos para abrir la matriz A creada

Con el editor de arreglos a la vista, se pueden retipear como se desee los elementos de la matriz con los datos verdaderos.

65

Programacin en Matlab. Parte I. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Otras posibilidades -Se puede utilizar el Copy y Paste del portapapeles para traerlos a un archivo *.m. En esta forma los datos se pueden editar y se pueden asignar a variables. -Se puede crear cargar un archivo ASCII con filas de longitud constante separadas por Enter, y varios datos por fila separados por blancos. Los mismos, en un archivo *.txt se leen desde Un programa de MATLAB (*.m) o desde la lnea de comandos,empleando una comando load. Supongamos que el archivo flatfile.txt se va a leer de esta manera.

>>load ('flatfile.txt'); >> flatfile flatfile = 112.3400 134.7600 -123.1200 89.9500 12.5600 -1.8700 90.1000 0.8900 11.1100 111.3300 -111.0000 9.5900 Guardar sesin y copiar salidas: Comando diary Los comandos save y load crean y cargan archivos binarios o ASCII con el estado de la sesin. Existe otra forma ms sencilla de almacenar en un archivo un texto que describa lo que el programa va haciendo (la entrada y salida de los comandos utilizados). Esto se hace con el comando diary (agenda) en la forma siguiente: >> diary nombredearchivo.txt ... >> diary off El comando diary off suspende la ejecucin y diary on la reanuda. El simple comando diary pasa de on a off y viceversa. Para poder acceder al archivo filename.txt con Bloc de Notas o Word es necesario que diary est en off. Si en el comando diary no se incluye el nombre del archivo se utiliza por defecto un archivo llamado diary (sin extensin).

66

Programacin en Matlab. Parte I. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Como generar un archivo *.m a partir de otro archivo *.txt generado con el comando diary. Para generar un pequeo programa Matlab archivo *.m, luego de usar los comandos diary, podemos leer el archivo registro.txt en el Bloc de Notas. Vemos que, para producir un grfico con las tres funciones juntas, deberamos borrar la visualizacin automtica de y2, poner ; luego de esta variable justamente para que no se visualice, borrar la sentencia plot(x,y), y la instruccin diary off. As, seleccionamos todos los contenidos de registro.txt, abrimos un archivo registro.m, copiamos y luego borramos lo mencionado previamente. As, saliendo del bloc de notas, yendo al Matlab (hay que mantener todos los programas abiertos), haciendo File, New, M-file, copiando la informacin y procediendo de la manera planeada, se obtiene el archivo registro.m siguiente:

La ejecucin en el Command Window permite obtener

67

Programacin en Matlab. Parte I. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Ejecutar un archivo *.m que incluye el nombre de otro archivo *.m que contiene los datos Para crear matrices, se puede usar tambin archivos *. m . Por ejemplo, se puede crear un archivo que contenga estas lneas. dosarreglos.m
A = [ ... 1.0 3.0 -2.0 5.0 -10.0 1.0 2.0 6.0 -7.0 4.0 -1.5 1.0 b = [9; 4; -3; 2];

13.0; 8.0; 1.0; 2.0 ];

Guarde este archivo con el nombre dosarreglos.m . Se puede crear otro programita *.m que, si A es la matriz de los coeficientes de un sistema de ecuaciones lineales y B el vector de los trminos independientes, calcule las incgnitas del sistema. Lo llamaremos incognitas.m

incognitas.m % programa que calcula incgnitas de un sistema de ecuaciones lineales dosarreglos; % lee las matrices A y B del archivo dosmatrices.m ink= A\b % calcula las incognitas del sistema lineal

Al ejecutar el nuevo programa >> incognitas >>ink= 0.0388 0.2946 0.7984 0.7442 que nos da las cuatro incgnitas del problema. Ingreso y Salida de datos interactivo para programas Matlab *.m Este tipo de instrucciones son muy utilizadas para crear programas donde el usuario interacta con el programa al tiempo de ejecucin. Sentencias Input y Disp. >> No = input('Ingrese el nmero de Avogadro ') Ingrese el nmero de Avogadro 6.02e23 No = 6.0200e+023 >> disp ('Numero de Avogrado = '), No Numero de Avogrado = No = 6.0200e+023

68

Programacin en Matlab. Parte I. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Integracin de conceptos Se realizarn dos archivos *.m, uno para convertir temperaturas en grados Farenheit a centgrados conversion.m y el otro ergun.m para calcular la prdida de carga de un gas a travs de un lecho relleno, un rango de velocidades. % Programa para convertir F a C TF =input(ingrese la temperatura en grados Farenheit); TC = (TF-32)*5/9; Disp (para una temperatura en grados Farenheit de), TF Disp (la temperatura en grados centgrados es), TC

% Programa para la ecuacin de Ergun dp =input('ingrese el dimetro de partcula '); epsi =input('ingrese la fraccin de huecos del lecho '); Tc = input ('ingrese la temperatura de operacin en grados centgrados '); p= input ('ingrese la presin atmosfrica media en pascales '); M= input('ingrese el peso molecular del gas, en kg/kmol '); Tk = Tc + 273.16; Rg = 8314; % clculo de la densidad del gas rho = p*M/(Rg*Tk) % Calcule la viscosidad del gas (aire) vis = 1.735e-5 + 4.138e-8*Tc; % defino el rango de velocidades en el vector v v = 0:0.01:0.5; coef_L = 150.*vis.*(1-epsi).^2/(dp.^2*epsi.^3); coef_T = 1.75.*rho.*(1-epsi)/(dp*epsi.^3); %calcula la prdida de carga por unidad de longitud de lecho relleno Deltap_L= coef_L .*v + coef_T.*v.^2; plot (v, Deltap_L) title ('Ecuacion de Ergun. Aireacion de lecho relleno de partculas ') xlabel('velocidad del gas, m/s') ylabel('perdida de carga, Pa/m')

Otr o eje mp lo de int egr a ci n de co

69

Programacin en Matlab. Parte I. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Otro ejemplo de integracin de conceptos: Clculo de la temperatura de ebullicin en La Paz, Bolivia, a 3650 m de altitud s.n.m. Ecuaciones

(29 kg/kg mol), R la constante de los gases (8314 J/kg mol K) As, se llega a

pM p = p0 gh donde es la densidad del aire, p la presin baromtrica a altitud = RT h, p0 la presin baromtrica s.n.m, M el peso molecular del aire

p=

p0 M gh 1+ RT

Por otra parte, la ecuacion de presion de vapor de sustancias puras de Antoine, se expresa as B log10 p s = A T +C donde ps es la presin de vapor del agua en mmHg, y T la temperatura en C. Los coeficientes para el agua, se obtuvieron en el rango de 60 a 150 C (Felder, R M y Rousseau, R W Principios Elementales de los Procesos Qumicos, 3 Edicin, Limusa Wiley, 2004, pgina 644). El programa realizado y los resultados son los siguientes

% Programa para calcular el punto de ebullicion del agua en La Paz, Bolivia % a 3650 m de altitud s.n.m clear % constantes de la ec. de presion de vapor del agua de Antoine, %Log10 ps = A - B/(T + C) % donde ps esta en mmHg, y T en C A = 7.96681; B= 1668.210; C = 228.00; Ma = 29; g = 9.81; R = 8314; Tamb_m = 15; h = 3650; p0 = 101325; % Pascales % Calculo de la presion atmosferica en la paz, utiliizando densidad variable % y una temperatura media de 15C p = p0/(1+Ma*g*h/(R*(Tamb_m+273.16))); disp ('presion barometrica en La Paz, en atmosferas'), p./p0 x=1 pmmHg = p.*760./101325; Teb = B/(A- log10 (pmmHg)) -C; y1 = p./p0; y2 = Teb./100; plot (x, y2,'o', x, y1,'s' ) xlabel ('coordenada formal ', 'Fontsize', 14) ylabel ('Teb/100 o p/p0', 'Fontsize',14 ) Title ('Presion barometrica y punto de ebullicion relativo en La Paz', 'Fontsize', 16) legend ('Punto de ebullicion relativo', 'presion barometrica relativa' )

70

Programacin en Matlab. Parte I. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008

Los resulados fueron p/p0 = 0.6976, y Teb = 90.2C, de manera que Teb/100 es 0.902. Es decir, la presin baromtrica se reduce un 30%, mientras que el punto de ebullicin, slo un

10%. A que se debe la diferencia entre ambos valores relativos? Ejercicio de autoevaluacin Resuelva la ecuacin cuadrtica en Matlab, ax2 + bx + c = 0, ingresando la terna de datos de coeficientes mediante la sentencia interactiva input. Aclare los resultados obtenidos con la sentencia disp. Utilice archivos *.m. ANEXO Funciones preprogramadas para clculos con polinomios Para MATLAB un polinomio se puede definir mediante un vector de coeficientes. Por ejemplo, el polinomio: se puede representar mediante el vector [1, 0, -8, 6, -10]. MATLAB puede realizar diversas operaciones sobre l, como por ejemplo evaluarlo para un determinado valor de x (funcin polyval()) y calcular las races (funcin roots()): >> pol=[1 0 -8 6 -10] pol = 1 0 -8 6 -10 >> roots(pol) ans = -3.2800 2.6748 0.3026 + 1.0238i 0.3026 - 1.0238i >> polyval(pol,1) ans = -11

x 4 8 x 2 + 6 x 10 = 0

71

Programacin en Matlab. Parte I. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Para calcular producto de polinomios, se utiliza la funcin conv() (de producto de convolucin). Se va a ver ahora cmo se multiplica un polinomio de segundo grado por otro de tercero: >> pol1=[1 -2 4] pol1 = 1 -2 4 >> pol2=[1 0 3 -4] pol2 = 1 0 3 -4 >> pol3=conv(pol1,pol2) pol3 = 1 -2 7 -10 20 -16 Para dividir polinomios existe otra funcin llamada deconv(). Las funciones orientadas al clculo con polinomios son las siguientes: -poly(A) polinomio caracterstico de la matriz A -roots(pol) races del polinomio pol -polyval(pol,x) evaluacin del polinomio pol para el valor de x. Si x es un vector, pol se evala para cada elemento de x -polyvalm(pol,A) evaluacin del polinomio pol de la matriz A -conv(p1,p2) producto de convolucin de dos polinomios p1 y p2 [-c,r]=deconv(p,q) divisin del polinomio p por el polinomio q. En c se devuelve el cociente y en r el resto de la divisin -residue(p1,p2) descompone el cociente entre p1 y p2 en suma de fracciones simples (ver >>help residue) -polyder(pol) calcula la derivada de un polinomio -polyder(p1,p2) calcula la derivada de producto de polinomios -polyfit(x,y,n) calcula los coeficientes de un polinomio p(x) de grado n que se ajusta a los datos p(x(i)) y(i), utilizando el criterio de cuadrados mnimos (no el de interpolacin). -interp1(xp,yp,x) calcula el valor interpolado para la abscisa x a partir de un conjunto de puntos dado por los vectores xp e yp. interp1(xp,yp,x,'m') como el anterior, pero permitiendo especificar tambin el mtodo de interpolacin.

72

Programacin Matlab II. Control del flujo de informacin. Simulacin de Procesos I. rea Departamental Ingeniera Qumica, Facultad de Ingeniera, UNLP, 2008 CAPITULO 6. PROGRAMACION MATLAB II. Control del flujo de informacin. PROGRAMAS DE ESTRUCTURA SECUENCIAL EN MATLAB Estructura secuencial pura Hacia el final de la clase Programacin I, hemos visto dos archivos *.m, realizados por el usuario en el editor de programas de Matlab, uno de ellos converta temperaturas de una escala a otra, muy simple y con estructura secuencial. Esta estructura es la ms sencilla de programacin y consiste en ejecutar las instrucciones en el mismo orden en que estn escritas, pasando el flujo de informacin una sola vez por cada instruccin. Aqu va otro ejemplo de estructura secuencial pura, que calcula el sueldo de un empleado, en funcin de las horas trabajadas y la paga horaria.

% Programa que calcula el sueldo mensual de un empleado Nombre = input(' Ingrese Nombre del empleado '); Horas = input('Ingrese horas trabajadas por semana '); Pagahor= input('Ingrese paga horaria '); %{Se calcular el sueldo mensual} Sueldo = Horas * Pagahor*4.5; %{ Se visualiza el sueldo} disp (' se visualizara el nombre del empleado y su sueldo'), Nombre, Sueldo

Una particularidad de Matlab: las estructuras pseudosecuenciales Tambin vimos un programa para calcular la ecuacin de Ergun de los lechos rellenos, que predice la prdida de carga de un fludo por unidad de longitud de un dado lecho relleno en funcin de la velocidad, y de las caractersticas del lecho y del fludo, como porosidad, dimetro de partcula, densidad y viscosidad. Ese programa pareca estar hecho en estructura secuencial, dado que no tena decisiones que tomar, pero, era realmente un programa puramente secuencial, o Matlab, en su estilo de ocultar complejidad, disimulaba una estructura repetitiva?. Se ver una fraccin del mismo nuevamente

v = 0:0.01:0.5; coef_L = 150.*vis.*(1-epsi).^2/(dp.^2.*epsi.^3); coef_T = 1.75.*rho.*(1-epsi)/(dp.*epsi.^3); %calcula la prdida de carga en el lecho relleno Deltap_L= coef_L .*v + coef_T.*v.^2; plot (v, Deltap_L)
Las sentencias en negrita nos muestran en realidad estructuras repetitivas, de variables vectorizadas, v y Deltap_L. No obstante, la naturaleza matricial de Matlab disimula su complejidad a tal punto que la ecuacin de Ergun parece calcular slo escalares. Se puede considerar entonces que Matlab dispone de un nuevo tipo de estructuras: las pseudosecuenciales, que son en realidad estructuras secuenciales puras mezcladas con estructuras repetitivas totalmente vectorizadas. No son estructuras secuenciales puras por que el control del flujo de informacin pasa tantas veces por las instrucciones en negrita como valores tengan los elementos del vector v.

74

Programacin Matlab II. Control del flujo de informacin. Simulacin de Procesos I. rea Departamental Ingeniera Qumica, Facultad de Ingeniera, UNLP, 2008 Controlando el Flujo de Ejecucin de las Instrucciones El tipo de programa ms elemental es aquel con Estructura Secuencial como sueldo.m. Estos programas, como tales, no son de gran utilidad, debido a que el flujo de la informacin pasa una vez sola por cada instruccin, y no se toman decisiones en el programa. Como se ha visto en la parte de Diagramacin, se pueden programar estructuras para decidir entre entre una, dos o ms alternativas, y estructuras repetitivas, para mtodos de prueba y error (bsqueda de races) u operaciones de arreglos. Las estructuras repetitivas pueden tener control numrico o lgico. MATLAB tiene varias estructuras (constructs) de control del flujo de informacin

if (estructura alternativa) switch (estructura alternativa) for (lazo o bucle repetitivo, con control numrico) while (lazo o bucle repetitivo, con control lgico) continue (instruccin) break (instruccin)

IF La instruccin if evala una expresin lgica y ejecuta un grupo de sentencias cuando la expresin es verdadera ( true). Las palabras claves opcionales elseif y else permiten la ejecucin de grupos alternativos de sentencias. La palabra clave end, que guarda correspondencia con el if, termina el ltimo grupo de sentencias. Los grupos de instrucciones estn delineados por las cuatro palabras claves indicadas. No aparecen corchetes ni llaves. En la figura se muestran los casos de seleccin simple (izquierda), doble (centro) y mltiple (derecha)

Seleccin Simple

Seleccin doble

Seleccin mltiple

Condicin

Condicin

Cond.1

F V
Cond. 2 Bloque 2 Bloque1 F

V
Bloque

V
Bloque 1

Bloque3

Bloque2

75

Programacin Matlab II. Control del flujo de informacin. Simulacin de Procesos I. rea Departamental Ingeniera Qumica, Facultad de Ingeniera, UNLP, 2008 La seleccin simple Como ejemplo, veamos un segmento de programa para identificar una situacin de flujo laminar Re= input (' numero de Reynolds') if Re <= 2100 fanning = 64./Re disp ('flujo laminar, factor = '), fanning end La estructura alternativa de seleccin simple implica que si la expresin lgica es falsa, el programa sigue su curso como si no existiera el if La seleccin doble Si se desea diferenciar los flujos laminares de los no laminares, entonces se puede usar el ifthen-else Re= input (' numero de Reynolds') if Re <= 2100 fanning= 64./Re disp ('flujo laminar, factor = '), fanning else fanning = 0.0791./Re.^0.25 disp ('flujo no laminar, factor = '), fanning end La seleccin mltiple Cuando existen ms de dos posibilidades, cobra mayor utilidad la regla de que el nmero de preguntas que se hacen es n-1, donde n es el nmero de posibilidades. Para esto se emplea la cadena if-elseif- else- end Re= input (' numero de Reynolds') if Re <= 2100 fanning= 64/Re disp ('flujo laminar, factor = '), fanning elseif Re <= 1e5 fanning = 0.0791/Re.^0.25 disp ('flujo de transicin, factor = '), fanning else fanning = 0.0044 disp ('flujo turbulento, factor constante =), fanning end los tres casos son alternativos, uno slo de ellos se cumple

EJERCICIO. REALICE EL PROGRAMA DEL CALCULO DEL SUELDO DEL EMPLEADO. Considere que si trabaja menos de 140 horas mensuales, el sueldo se factura igual que antes, multiplicando directamente la paga horaria por el nmero de horas trabajadas. En cambio, si supera las 140 horas semanales, la diferencia entre el total y 140 se factura con un 30% de aumento.

76

Programacin Matlab II. Control del flujo de informacin. Simulacin de Procesos I. rea Departamental Ingeniera Qumica, Facultad de Ingeniera, UNLP, 2008 Ejemplo programado de estructura alternativa: Resolucin de una ecuacin cuadrtica clear, clc; % Programa para resolver una ecuacion cuadratica ax^2 + bx +c = 0 % Mediante metodo analitico % Lee coeficientes de la ecuacion a = input ('ingrese coeficiente a '); b = input ('ingrese coeficiente b '); c = input ('ingrese coeficiente c '); disc = b.^2 -4.*a.*c; if disc >=0 x1r = (-b + sqrt (disc))./(2.*a); x2r = (-b - sqrt (disc))./(2.*a); else x1r = -b./(2.*a); x1i = sqrt (-disc)/(2.*a); x2r = x1r; x2i = -x1i; end disp ('las raices son x1r, x1i, x2r, x2i '), x1r, x1i, x2r, x2i;

Otros ejemplos con el uso del bloque de If Ejemplo: determinacin de la divisibilidad por dos y por tres clear clear numero = input('Ingrese un nmero entero: ' ); resto2 = rem(numero,2); resto3 = rem(numero,3); if resto2==0 & resto3==0 disp ('su nmero es divisible por 2 y 3') else if resto2==0 disp (su numero es divisible por 2, pero no por 3) else if resto3==0 disp ('su number is divisible por 3 pero no por 2') else disp ('su numero no es divisible ni por 2 ni por 3') end end end

77

Programacin Matlab II. Control del flujo de informacin. Simulacin de Procesos I. rea Departamental Ingeniera Qumica, Facultad de Ingeniera, UNLP, 2008 Ms casos de seleccin mltiple Ejemplo de registro de conductor En algunos pases, se extiende un permiso para manejar autos a partir de los 16 aos, y a partir de 18, el registro de conductor, que deber renovar cada 5 aos hasta los 70 de edad. A partir de los 70 aos, necesitar una licencia especial, teniendo que aprobar nuevamente un examen de manejo, y revisiones de vista y audicin. Se le pide a un programador que haga un programa interactivo, a efectos de que los ciudadanos de un determinado pas, y los extranjeros legalizados puedan conocer como es el sistema de registros de conductor. El mismo, luego de haber sido organizado en un diagrama de bloque puede ser como sigue: edad = input (Ingrese edad del postulante ) if edad < 16 disp ( Deber esperar a cumplir los 16 aos para pedir el permiso) else if < 18 disp ( Puede solicitar un permiso inicial para manejar) else if < 70 disp( Puede solicitar el registro de conductor clsico) else disp ( Deber solicitar un permiso especial) end Este programa funciona bien, pero muchas situaciones de programarse con la estructura switch. seleccin mltiple pueden

switch La proposicin switch ejecuta grupos de instrucciones basados en el valor de una variable o expresin, cuyo resultado debe ser un escalar o una cadena de caracteres. Las palabras clave case y otherwise delimitan los grupos. Se ejecuta solamente el primer caso de coincidencia. Siempre debe haber un end para corresponder un switch. Diagrama de bloques de una sentencia switch en seleccin mltiple Valor 1 Condicin Valor 2
Valor n-1

Valor n

Instrucciones 1

Instrucciones 2

Instrucciones n-1

Instrucciones n

Salida normal del switch, sigue el programa

Instrucciones que se ejecutan si no se cumple la condicion

78

Programacin Matlab II. Control del flujo de informacin. Simulacin de Procesos I. rea Departamental Ingeniera Qumica, Facultad de Ingeniera, UNLP, 2008 Ejemplo: Supngase que un empleado, de acuerdo a su situacin familiar, recibe un ingreso diferente, siendo ste igual al sueldo de la categora del escalafn si es soltero sin hijos (0 personas a cargo), de un 30% mayor si es casado o vive en pareja (1 persona a cargo), 40% mayor si tiene un hijo menor de 21 aos (2 personas a cargo), 50% mayor si tiene dos hijos menores (3 personas a cargo), 60% mayor si tiene tres hijos menores (4 personas a cargo) y que debe plantear su caso si tiene ms de tres hijos. Realice un programa que calcule el sueldo a recibir, recibiendo como dato el sueldo del escalafn

sueldo_esc = input (ingrese sueldo del escalafn para su categora ) Numero_a_cargo = input ( ingrese el nmero de personas a cargo ) switch (Numero_a_cargo) case 0 Sueldo_corregido = sueldo_esc; case 1 Sueldo_corregido = 1.3.* sueldo_esc; case 2 Sueldo_corregido = 1.4.*sueldo_esc; case 3 Sueldo_corregido = 1.5.*sueldo_esc case 4 Sueldo_corregido = 1.6*sueldo_esc otherwise If Numero_a_cargo > 4 disp('Inicie un expediente planteando su caso) else disp (dato equivocado, ingrese otra vez el nmero) end end
ESTRUCTURAS REPETITIVAS Como se ha visto en diagramacin, las estructuras repetitivas permiten ejecutar varias veces un determinado bloque de instrucciones, para distintos valores de determinadas variables. Realmente le dan sentido a la programacin, y permiten escribir programas concisos que realizan muchos clculos. En Matlab, se tiene la estructura ya vista tipo rango para asignar valores a vectores, que es muy concisa y oculta complejidad, por ejemplo: x = 0: 0.01: 10; % esta sentencia asigna 1001 elementos al vector x. Matlab ejecuta estas instrucciones vectorizadas con gran eficiencia, y deben usrselas toda vez que se pueda. No obstante, en los casos donde haya que procesar algunos elementos del arreglo o matriz, y no todos, o bien en casos donde la vectorizacin pueda resultar dificultosa, se utilizan los lazos for.

79

Programacin Matlab II. Control del flujo de informacin. Simulacin de Procesos I. rea Departamental Ingeniera Qumica, Facultad de Ingeniera, UNLP, 2008 Estructura repetitiva con control numrico for Formas alternativas de representarla en diagramas de bloques

i=1

i = 1 n Comandos y sentencias del lazo Instrucciones del lazo i= i+1

i<=n No

Si

for El lazo for repite un grupo de instrucciones un nmero fijo, predeterminado de veces. La estructura se delimita con el end correspondiente. En este caso la proposicin for repite las sentencias para valores de i desde 1 hasta n, variando de a uno. for i=1:n sentencias end Es una buena idea dejar sangra en los lazos para mejorar la legibilidad, especialmente cuando estn anidados. En este caso que sigue, el ndice va tomando los valores de un vector valoresdevector = [1, 3, 4, 5, -4, 10] for i=valoresdevector sentencias end

80

Programacin Matlab II. Control del flujo de informacin. Simulacin de Procesos I. rea Departamental Ingeniera Qumica, Facultad de Ingeniera, UNLP, 2008 La sintaxis general es for i=valor_inicial : incremento : valor_final sentencias end

El ejemplo de vectorizacin dado antes, hecho con un for, es algo ms difcil debido a que hay que saber cuantos valores va a tener el vector que todava no se arm. Como va de 0 a 10 de a 0.01, se supone que tendra 101 hasta 1, y finalmente, 1001 valores hasta 10. for i = 1:1001 x(i)= (i-1)*0.01 end Obsrvese que siempre es preferible trabajar con valores enteros, los subindices del arreglo, y no con los valors de los elementos del arreglo como ndices del for Por ejemplo, para el ejemplo anterior, si usramos x como ndice del for for x =0:0.01:10 disp (genero un vector x usando sus valores como ndice del for ?) end Esa pregunta, formulada 1001 veces en el programa, nos lleva a una respuesta: no, el valor de x que se obtiene al final es 10, un escalar. Si se persiste en usar los valores de los elementos y no los ndices, se puede nombrar otra variable (valor, por ejemplo) con esos datos, y hacer i=1 for valor = 0:0.01:10; x(i) = valor; i = i+1 end con lo que usaremos for y no necesitaremos de antemano saber cuantos elementos tendr el vector a generar. Ejemplo con valores decrecientes Ejemplo, for i = n: -0.2:1 sentencias end el lazo se ejecuta la primera vez con i = n, y luego i se va reduciendo de 0.2 en 0.2 hasta que llega a ser menor que 1, donde se termina el ciclo. Otro ejemplo Genere un vector a partir de otro, cuyos ndices sern calculados en base a los del vector previo for i = 1:n j = i.^2 10 if j >0 Y(j) = x(i) else j disp ( para ese valor de j no hay asignacin posible) end end

81

Programacin Matlab II. Control del flujo de informacin. Simulacin de Procesos I. rea Departamental Ingeniera Qumica, Facultad de Ingeniera, UNLP, 2008 Lazos anidados Por ejemplo, si se asume que, por ejemplo, m = 5 y n = 4, crear la matriz de Hilbert, usando zeros para preasignar la matriz: % matriz de Hilbert A = zeros(m,n) % Preasignar la matriz acelera los clculos for i = 1:m for j = 1:n A(i,j) = 1/(i+j-1); end end A Sin preasignacin de A con la matriz zeros, Matlab hubiera debido estirar la matriz al calcular cada elemento nuevo, lo cual le hubiese demandado tiempo. los resultados son. A= 1.0000 0.5000 0.3333 0.2500 0.5000 0.3333 0.2500 0.2000 0.3333 0.2500 0.2000 0.1667 0.2500 0.2000 0.1667 0.1429 0.2000 0.1667 0.1429 0.1250 No se podra crear la matriz de Hilbert con clculos vectorizados, dado que hay que manejar los subndices uno por uno, y no el arreglo entero.

Los lazos anidados de for no pueden cruzarse, siempre debe estar el mas interno totalmente contenido en el mas externo. El anidamiento puede incluir incluso mas de dos lazos

EJEMPLOS PERMITIDOS

EJEMPLOS NO PERMITIDOS

Cuando la velocidad sea importante, sin embargo, siempre se deben contemplar las posibilidades de vectorizar sus algoritmos.

82

Programacin Matlab II. Control del flujo de informacin. Simulacin de Procesos I. rea Departamental Ingeniera Qumica, Facultad de Ingeniera, UNLP, 2008 Ejemplo de integracin de conceptos. Resolucin analtica de ecuaciones de segundo grado, para varias ternas de valores a, b, c. Estructura repetitiva alternativa y secuencial.

% Programa para resolver una ecuacion cuadratica ax^2 + bx +c = 0. % Mediante metodo analitico % Lee coeficientes de la ecuacion % Se leen las ternas de una planilla de calculo coeficientes = xlsread ('coeficientescuadraticos'); % se asignan a vectores, la primer columna es a, la segunda % es b y la tercera es c a = coeficientes (:, 1); b = coeficientes (:, 2); c = coeficientes (:, 3); % calcula el numero de ternas nter = length(a); %Lazo repetitivo exterior, para controlar las ternas a utilizar for k = 1:nter; % Se calcula el discriminante disc(k) = b(k).^2 -4.*a(k).*c(k); % se fuerza al programa a distinguir entre races reales y complejas % conjugadas mediante una estructura alternativa de decisin doble if disc (k) >=0 x1r(k) = (-b(k) + sqrt (disc (k)))./(2.*a (k)); x1i(k) = 0; x2r(k) = (-b(k) - sqrt (disc (k)))/(2.*a (k)); x2i(k) = 0 else x1r(k)= -b (k)./(2.*a(k)); x1i (k)= sqrt (-disc (k))./(2.*a (k)); x2r (k)= x1r (k); x2i (k)=-x1i (k); end % bloque if-then-else end % lazo for % el programa almacena todos los resultados en los vectores x1r, x1i, x2r y x2i save salidamuchascuadraticas x1r x1i x2r x2i -ascii

83

Programacin Matlab II. Control del flujo de informacin. Simulacin de Procesos I. rea Departamental Ingeniera Qumica, Facultad de Ingeniera, UNLP, 2008 LAZO repetitivo con control lgico while En la programacin moderna, el lazo repetitivo FOR, con control numrico, resulta muy limitado. Puede usarse en matrices, trabajando elemento a elemento cuando es imprescindible, pero hay que conocer el tamao del arreglo. En ingeniera qumica, es muy usual resolver problemas por mtodos iterativos (secuencias de prueba y error para determinar un valor que no puede calcularse analticamente) que converjan a una tolerancia (por ej. El mtodo del punto medio) donde no puede estimarse a priori el nmero de repeticiones, como lo requiere el lazo FOR. As, resulta ms flexible introducir un tipo de lazo que se ejecute, mientras se cumpla una condicin (generalmente una expresin lgica) while condicin sentencias end El lazo while repite un grupo de sentencias un nmero indefinido de veces bajo el control de una condicin. La construccin termina con un end. Las sentencias se siguen ejecutando mientras la condicin sea verdadera, es decir, mientras el resultado de la evaluacin lgica de la condicin sea distinto que cero. Sea el ejemplo siguiente: un investigador debe deshidratar una muestra a una temperatura moderada, pero debe hacerlo en una estufa con un vaco de 700 mmHg. Cual es la mayor temperatura que podr utilizar si se desea evitar la ebullicin del agua durante el proceso? Con este fin, se debe calcular el punto de ebullicin del agua a la presin reinante en la estufa de vaco. Procedimiento: si el vaco es de 700 mmHg, la presin reinante en la estufa ser p= 760-700 = 60 mmHg. La ecuacin de presin de vapor del agua, que se dispone es la siguiente:

Ln p s = A

B C Ln (T + 273 .16) (T + 273 .16)

donde ps es la presin de saturacin del agua en Pa, y T es la temperatura en C. Para determinar el punto de ebullicin, se debe considerar ps = p = 60 x 101325/760 = 8000 Pa. Los coeficientes de la ecuacin son: A = 54.119; B = 6547.1; C = 4.23. Si se despeja T, se puede obtener la ecuacin de recurrencia para el mtodo de prueba y error Tc = f (Ts), es decir, se supone un valor de T, se calcula la expresin que sigue a la derecha del signo igual.

Tc =

B 273 .16 ( A C. * Ln (Ts + 273.16 ) Ln p )

y se asigna el resultado a la variable que est a la izquierda del signo igual. La coincidencia de un valor supuesto con el calculado, dentro de una tolerancia, har que el clculo se termine. En consecuencia, se puede establecer una CONDICION, que consista en verificar si la diferencia en valor absoluto entre Tc y Ts es mayor que 0,1C.

84

Programacin Matlab II. Control del flujo de informacin. Simulacin de Procesos I. rea Departamental Ingeniera Qumica, Facultad de Ingeniera, UNLP, 2008 El programa escrito fue: clear, clc A = 54.119; B = 6547.1; C = 4.23; vac = 700; pmmHg = 760 -vac; p = pmmHg.*101325/760; difer = 1; % este valor se coloca a propsito para entrar al ciclo while Ts = 30; % valor inicial supuesto niter = 1; % inicializacin del contador de iteraciones while difer >= 0.1 Tc = B./(A - C.*log(Ts +273.16) - log (p))-273.16; niter = niter +1; difer = abs (Tc-Ts); Ts = Tc; end niter Tc >> niter = 5 Tc = 41.5527 El punto de ebullicin del agua a una presin absoluta de 60 mm Hg, es de 41,6C. En consecuencia, al investigador le conviene deshidratar a una temperatura menor que esa para evitar la ebullicin del agua en la muestra. Obsrvese que el ciclo while puede ejecutar un nmero de repeticiones desconocido de antemano, siendo as muy adecuado para el clculo numrico iterativo. Sentencias break y continue La instruccin break termina la ejecucin de un lazo while o for. En lazos anidados, termina la ejecucin del lazo interior solamente. Si se usa break fuera de un lazo for o while in un programa matlab, se termina la ejecucin del programa en este punto. Tambin se termina el programa si el break se ejecuta dentro de una estructura if o switch-case Por su parte, la instruccin continue pasa el control a la siguiente iteracin de un lazo for o while en la cual aparece, permitiendo saltar las instrucciones que faltan terminar en ese lazo for o while. En lazos anidados, continue pasa el control a la siguiente repeticin de los lazos for o while dentro de los cuales est escrito.
clear n = 0; while n < 10 n = n+1 a = input ('Ingrese un valor mayor que 0: '); if (a<0) disp ('debe ingresar un nmero positivo ') disp (' este programa terminar ') break end disp ('el log natural de este nmero es ') disp (log(a)) clear n = 0; while n < 10 n = n+1 a = input ('Ingrese un valor mayor que 0: '); if (a<0) disp ('debe ingresar un nmero positivo ') disp (' este programa terminar ') continue end disp ('el log natural de este nmero es ') disp (log(a)) end

end

Ensaye en Matlab estos programas, y encuentre sus resultados, a efectos de comprobar las descripciones precedentes de las instrucciones break y continue

85

Programacin MATLAB III. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 CAPITULO 7.CONCEPTOS DE PROGRAMACIN ESTRUCTURADA Y MODULAR

Modularizacion de Programas Hasta ahora, trabajamos con programas tipo script en archivos *.m (programas desarrollados en lenguaje Matlab) que alojan las variables en el mismo espacio de trabajo que el utilizado por el command window. Sin embargo, cuando los programas son largos, se dificulta su revisin y la deteccin de errores, incluyendo, los errores de tipeo que no violan las reglas del lenguaje Matlab, como por ejemplo Fuerza = masa .*acel.^2 en lugar de Fuerza = masa.*acel Para reducir el nmero de errores, conviene considerar que un programa largo (una pgina o ms) es una tarea compleja que puede dividirse en un nmero de tareas ms simples vinculadas entre s. Con este fin, el programa total debe partirse en tareas bien definidas, especficas. Cada parte puede llamarse mdulo de programa. Generalmente el programa total consta de un programa principal que coordina las tareas y llama a los otros mdulos de programa. Incluso puede haber mdulos que llamen a su vez a otros mdulos. Las modularizacin de las tareas suele seguir un orden jerrquico que puede planificarse desde lo ms general a lo ms especfico (diseo descendente, o Top-down), o bien desde lo ms especfico a lo ms general (diseo ascendente). Por ejemplo, una estructura diseada en forma descendente, puede tener el aspecto siguiente:

Programa principal (Modulo 1)

Mdulo 2

Mdulo 3

Mdulo i

Mdulo n

Mdulo 2.1

Mdulo 2.2

Se puede considerar que excepto el programa principal, los restantes mdulos de programa son subprogramas. El seguimiento de este mtodo, se denomina programacin modular y es la tendencia que ha seguido la programacin desde la introduccin de estos conceptos en la dcada de 1980.

86

Programacin MATLAB III. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Ventajas de la modularizacin de programas

-Permiten descomponer problemas complejos en varias tareas ms simples -Los mdulos pueden reutilizarse en distintos programas

Programacin estructurada en cada mdulo de programa Es lo que hemos estado viendo desde que comenz el curso, pero ahora se van a enfatizar estos conceptos. La programacin estructurada es una serie de tcnicas que -Promueve una programacin clara, ordenada y documentada (con comentarios) , que facilita el trabajo en equipo, lo que es clave para los trabajos de ingeniera. -Utiliza las estructuras secuenciales, alternativas y repetitivas, tratando de evitar, en lo posible, saltos incondicionales en el control del flujo de la informacin, como los que realizan las instrucciones break y continue.

Recursos abstractos de la programacin estructurada de cada mdulo de programa -En programacin estructurada, la primera tarea que se realiza debe aparecer primero, y la ltima, en ltimo lugar, de manera que se pueda seguir el flujo de informacin a lo largo del programa sin esfuerzos innecesarios. -Se recomienda utilizar nombres de variables relacionados con su significado, que no sean innecesariamente largos - Se recomienda la utilizacin de comentarios para aclarar el significado de algunas instrucciones -Se recomienda utilizar maysculas para las matrices y minsculas para los vectores a efectos de reconocerlos inmediatamente. -Se sugiere dejar espacios entre trminos de una ecuacin, e incluso entre variables y operadores de multiplicacin, divisin y potenciacin, a efectos de mejorar la legibilidad del programa. -Las instrucciones largas, por ejemplo aquellas que resultan de codificar ecuaciones complicadas, pueden dividirse en varios grupos de trminos y/o factores, definidos previamente a la expresin final. Obsrvese que este recurso abstracto es, conceptualmente, el mismo que conduce a dividir un programa total largo en un programa principal y varios subprogramas relacionados

Se considera que la observacin de estas reglas de estilo, lejos de inhibir la creatividad del programador, la favorecen pues vuelven la programacin ms eficaz. Los subprogramas de matlab se construyen mediante la instruccin function

87

Programacin MATLAB III. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Subprogramas realizados por el programador Matlab Matlab permite escribir subprogramas o mdulos de programa como funciones, realizadas por el programador, denominadas functions. Definicion general de function

datos
function [res1, res2]=nombre(arg1,arg2,arg3,..) ... res1=... Resultados ... res2=...

Tanto arg1 ... arg n, los datos recibidos por la function, como res1 ... resn, los resultados que calcula, pueden ser, cada uno de ellos, escalares (matrices de 1x1), o arreglos (vectores o matrices), de manera que la complejiad de las functions es altamente variable dependiendo del caso. Los resultados deben calcularse explcitamente antes de terminar el cdigo de la function. Tipos de archivo *.m Como se ha indicado, hay dos tipos de archivo *.m. Archivo *.m tipo Function Puede aceptar argumentos de entrada y retornar argumentos de salida Por defecto, las variables internas son locales de la funcin Utiles para extender el lenguaje MATLAB a su aplicacin especfica

Archivo *. m de comandos (Script) No acepta argumentos de entrada ni retorna argumentos de salida Opera sobre datos del espacio de trabajo (workspace) Utiles para automatizar una serie de pasos que necesita realizar muchas veces Como se llama a las functions?

Se ver un ejemplo donde se calcula la prdida de presin p que experimenta un fluido al pasar por una caera de longitud L y dimetro D, mediante la ecuacinde Fanning

Fluido D

88

Programacin MATLAB III. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 La ecuacin de Fanning es:

2 p = f 1 2 v

L D

En un archivo llamado Deltap.m, se escribe el programa siguiente: d = input (ingrese el dimetro de la caera ); long = input (ingrese la longitud de la caera ); rhof = input (ingrese la densidad del fluido ); vis = input (ingrese la viscosidad del fluido ); v = input (ingrese la velocidad superficial del fluido ); % se calcular el nmero de Reynolds Re = rhof .*v.*d./vis % se llamar a la funcin que calcular el factor de friccin de Fanning f = Fanning (Re) % se calcular la prdida de presin por friccin en caeras rectas Deltap = f .* 0.5 .* rhof .* v .^2 .*long ./ d ; Disp ( La velocidad y prdida de presin son ), v, Deltap

y en otro archivo, Fanning.m (el nombre del archivo que contiene la function debe coincidir con el nombre de la misma) function fric = Fanning (Reynolds) %subprograma que calcula el factor de friccin de Fanning % Util para el calculo de perdida de carga en caerias rectas if Reynolds <= 2100 fric= 64/Re; elseif Reynolds <= 1e5 deno = Re.^0.25; fric = 0.0791./deno else fric = 0.0044 end Obsrvese que el resultado de la funcin no fue encerrado entre corchetes por ser una sola variable (sea escalar o arreglo). Pruebe esta ecuacin en Matlab para distintos fluidos. Si tiene dudas acerca de la velocidad a ingresar, imagine un caudal volumtrico y divdalo por la seccin transversal de la caera.

89

Programacin MATLAB III. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008

Partes bsicas de un archivo M de Function Un archivo M de function consiste de:


La lnea de definicin La lnea H1 Texto de ayuda El cuerpo de la Function Comentarios

function fric = Fanning (Reynolds) %subprograma que calcula el factor de friccin de Fanning % Util para el calculo de perdida de carga en caerias rectas if Reynolds <= 2100 fric= 64/Re; elseif Reynolds <= 1e5 deno = Re.^0.25; % expresion para tubos lisos fric = 0.0791./deno else end % expresion para tubos lisos fric = 0.0044

Lnea H1

Texto de ayuda Cuerpo de la funcin Comentarios

90

Programacin MATLAB III. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Variables locales y globales Las variables de una function (de ahora en adelante, funcin, excepto en la declaracin de la misma) son siempre variables locales, y por tanto no pertenecen al espacio de trabajo del command window y los archivos *.m que no son funciones. En el caso del factor de friccin, se hizo lo que se recomienda: que los argumentos y resultados de la funcin no se llamen igual que los valores correspondientes en la llamada. Los valores deben corresponderse por ser datos del mismo tipo, por guardar el mismo orden en que se envan como argumentos, y se reciben como resultados, slo que se llaman diferente en funcin y programa. Hay dos fuertes razones por las cuales conviene que los nombres no coincidan en llamada y funcin 1) Las variables de funcin son locales a la funcin y ocupan por tanto espacios de memoria diferentes que los del workspace, no siendo visibles desde este espacio de trabajo. 2) Las funciones pueden usarse junto a distintos programas principales, o pueden ser llamadas desde el command window en casos diferentes. Una nomenclatura igual a la de algn programa principal especfico les puede quitar generalidad.

A efectos de dar un ejemplo para 1), vamos a ver que sucede cuando hay nombres de variables iguales en llamada y funcin repitamos el segmento del programa principal donde se llama a la funcin f = Fanning (Re) y ahora escribamos la funcin con igual nomenclatura que en el programa aqu aparentemente, las variables argumento (Re) y resultado (f) son las mismas en programa y funcin. Sin embargo no es as: como la funcin guarda las variables en su propio espacio de trabajo, la f de la funcin es una variable distinta de aquella del programa, y lo mismo pasa con Re. Si bien es posible, y se admite que ms intuitivo y natural usar el mismo nombre de variables para programa y funcin, se recomienda no hacerlo, sobre todo cuando el programador es principiante, a efectos de enfatizar el hecho de que las variables se guardan en distintos lugares y por tanto son distintas, aunque puedan tener valores

function f = Fanning (Re) %subprograma que calcula %factor de friccin de Fanning if Re <= 2100 f= 64/Re; elseif Re <= 1e5 deno = Re.^0.25; f = 0.0791./deno else f = 0.0044 end numricos iguales.

el

Aunque es posible, no resulta conveniente modificar en una funcin las variables que se reciben como argumentos. Si las variables se llaman igual en programa y subprograma, Matlab slo modificar la variable local en el subprograma, y su variable homnima del programa principal quedar sin modificar. De hecho, en las funciones propias de Matlab (y=sin(x),etc), el valor de x no se modifica en la funcin, sino que se usa como dato para calcular el valor de y.

91

Programacin MATLAB III. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 se va a dar un ejemplo para el caso 2): 2.1) Supngase que un alumno tiene un ejercicio puramente trigonomtrico donde debe calcular un cateto opuesto (op), dados el cateto adyacente (ad) y el ngulo considerado (ngulo)

ngulo op

ad
la llamada podra ser op =triang_rect(ad, angulo) Mientras que la funcin podra escribirse as function opuesto = triang_rect(adyacente, alfa) % subprograma que calcula el cateto opuesto, dados el adyacente y el ngulo hipotenusa = adyacente./cos(alfa) opuesto = hipotenusa.*sin(alfa)

2.2. Suponga ahora que, por triangulacin, debe estimar la altura de una torre de telefona inalmbrica, dada la distancia horizontal entre el observador y la misma, y el angulo de inclinacin de la visin, que llamar beta.La funcin ser la misma, pero la llamada podr escribirse alt_torre = triang_rect(dist_horiz, beta)

92

Programacin MATLAB III. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Variables globales Una variable global es verdaderamente la misma en el programa llamador y en la funcin, ocupando un lugar en el espacio de trabajo (workspace). Siendo la misma, si se la modifica en la funcin, queda modificada inmediatamente en el espacio de trabajo para todos los mdulos de programa que pueden acceder a ella. Por tanto, no se pasa como argumento a la funcin, sino que debe declararse en el programa llamador y en la funcin Supngase que el ngulo beta de triangulacin para el clculo de la torre se considera variable global. La llamada sera ahora global beta alt_torre = triang_rect(dist_horiz) y la funcin ahora deber escribirse as function opuesto = triang_rect(adyacente) % subprograma que calcula el cateto opuesto, dados el adyacente y el angulo global beta hipotenusa = adyacente./cos(beta) opuesto = hipotenusa.*sin(beta)

Si bien, como se ha visto, el uso de la declaracin global parece simplificar la programacin, su utilizacin constituye una mala idea puesto que expone a ciertas variables a una modificacin no controlada en las funciones, que luego se mantienen modificadas al regresar el control al programa llamador. Esto puede resultar muy problemtico cuando los programas son grandes. Otro ejemplo de function. Clculo de un promedio y longitud de arreglo si la entrada es un vector Se pueden ingresar estos comandos en un archivo M llamado prom.m. La function prom acepta un slo arreglo como argumento de entrada y devuelve dos valores como argumentos de salida.

function [prome, long]=prom(variable) % prom, calcula promedio de vectores fila o columna [m,n] = size(variable); if (m == 1 & n == 1) error('la entrada es un escalar'); else if (m==1|n==1) long = length(variable); prome = sum(variable)./long; else error('la entrada es una matriz'); end end 93

Programacin MATLAB III. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008

Se ver la operacin de llamada desde el command window >> clear >> x = 1; >> [promedio, longitud]=prom(x) ??? Error using ==> prom la entrada es un escalar >> clear >> x = [1 1 2; 2 1 1; 3 1 2]; >> [promedio, longitud]=prom(x) ??? Error using ==> prom la entrada es una matriz
>> x = 0:1:10; >> [promedio, longitud]=prom(x) promedio = 5 longitud = 11

Ejemplo de function que devuelve varios resultados por llamada Clculo de parmetros geomtricos de un Elipsoide

%Programa principal D= xlsread('dimens_elip'); l1= D(:1); l2= D(:,2); l3= D(:, 3); n = length (1); for i = 1:n % llama a funcion para calcular el volumen y el area superficial [vol_elip (i), area_sup(i), diameq(i), esf(i)]= elipsoide (l1(i),l2(i), l3(i)) end plot (vol_elip) figure(2) function [ve, ase, de, fe] = elipsoide (long1, long2, long3) plot (area_sup) % Calcula volumen del elipsoide figure(3) ve = pi./6.*long1.*long2.*long3; % Calcula area del elipsoide plot (diameq) longmed = (long2+long3)./2; figure(4) U = sqrt (long1.^2-longmed.^2)./long1; plot (esf)

ase = pi./2.*long1.*longm.*(longm./long1 + 1./U.*asin(U)) % calcula el diametro equivalente de = (6.*ve./pi).^(1./3) % calcula factor de esfericidad fe = pi.*de.^2./ase

94

Programacin MATLAB III. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Funciones de Funcin Existe un tipo de funciones, generalmente preprogramadas,que opera con funciones como argumentos, denominadas "funcin de funciones" Las funciones de funcin incluyen: Bsqueda de races Optimizacin Cuadratura (Determinacin numrica del rea bajo la curva de una Integral definida) Ecuaciones Diferenciales Ordinarias MATLAB representa la funcin no lineal mediante una function de archivo-M. Por ejemplo, aqu tenemos una versin simplificada de la funcin giba del directorio matlab/demos . clear x = 0:0.002:1; y = giba(x); plot (x,y) grid xlabel ('x', 'Fontsize', 18) ylabel ('y', 'Fontsize', 18) Title ('Funcion "Joroba" de Camello ', 'Fontsize', 20) function ord = giba(absc) ord = 1./((absc-.3).^2 + .045) + 1./((absc-.9).^2 + .05) - 6;

95

Programacin MATLAB III. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 El grfico muestra que la funcin tiene un mnimo local cercano a x = 0.6. La funcin fminsearch encuentra el minimizador, que es el valor de x donde la funcin adquiere su valor mnimo. El primer argumento para fminsearch es un function handle (@) o manipulador para la funcin que est siendo minimizada. Esto permite utilizarla como argumento de otra funcin y el segundo argumento es una estimacin de la posicin del mnimo.
p= fminsearch(@giba, 0.5) p= 0.6067

Para evaluar la funcin en el minimizador, giba(p) ans = 8.5425 En anlisis numrico, se utilizan los trminos cuadratura e integracin para distinguir entre la valuacin numrica de integrales definidas (area bajo la curva) y la integracin numrica de ecuaciones diferenciales ordinarias. Las rutinas MATLAB de cuadratura son quad (Mtodo de Simpson adaptativo) y quadl (Mtodo adaptativo de Lobatto). La instruccin Q = quad (@giba,0,1) Calcula el rea bajo la curva en el grfico y produce Q= 12.3376 Finalmente el grfico muestra que la funcin nunca se anula en este intervalo. As, si Ud. buscara una raz en l, con una estimacin inicial en el centro del intervalo raiz = fzero(@giba, 0.5) encontrar el resultado afuera del intervalo z= -0.0920

96

Programacin Matlab IV. Instrucciones de Entrada/Salida con formatos. Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera, UNLP, 2008 CAPITULO 8. INSTRUCCIONES DE ENTRADA Y SALIDA CON FORMATOS.

Diagrama conceptual del uso de archivos de entrada o salida con formato

COMENZAR

Abrir un archivo de datos (archivo 1) asignando cdigo identificatorio f1

Abrir un archivo de resultados (archivo 2, vaco en esta parte del programa) , asignndole un cdigo f2 Leer datos del archivo 1

Cuerpo del programa


Guardar resultados formateados en archivo 2

Fin

97

Programacin Matlab IV. Instrucciones de Entrada/Salida con formatos. Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera, UNLP, 2008 APERTURA DE ARCHIVOS Asignacin de codigo identificador

FOPEN
FID = FOPEN(Nombre de archivo) abre el archivo FILENAME para acceso a lectura. Si el archivo se abre para lectura y no se lo encuentra en el directorio de trabajo, FOPEN busca en la ruta de bsqueda (search path) de MATLAB. FID es un escalar entero de MATLAB denominado, identificador de archivo. Se puede usar fid como primer argumento para otras rutinas de entrada/salida. Si FOPEN no puede abrir el archivo, devuelve -1. FID = FOPEN(Nombre de archivo, PERMISO) abre el archivo Nombre de archivo en el modo especificado por PERMISO. PERMISO puede ser: 'r' read (lectura, archivo previamente existente) 'w' write ( Escritura, lo crea si es necesario) 'a' append (agregar datos a un archivo existente( si no existe lo crea)) Existen dos identificadores de archivo que estn disponibles automticamente y no necesitan ser abiertos. Ellos son FID=1 (salida normal) y FID=2 (error normal). [FID, MENSAJE] = FOPEN(NOMBREDEARCHIVO, PERMISO) devuelve un mensaje de error dependiente del sistema si la apertura del archivo no es exitosa.

fprintf
Escribe datos formateados a un archivo Sintaxis count = fprintf(fid,format,A,...) Imprime resultados formateados en la parte real de la matriz A (y de cualquier argumento adicional) bajo el control de una cadena de conversores de formato. Estos resultados se escriben a un archivo identificado con el cdigo fid. fprintf devuelve un recuento del nmero de bytes escrito a la variable count. (ESTA PUEDE NO USARSE) El argumento fid es un identificador entero obtenido con un fopen. La omisin de fid enva la salida a la pantalla.

98

Programacin Matlab IV. Instrucciones de Entrada/Salida con formatos. Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera, UNLP, 2008 Ejemplo 1. Como imprime naturalmente el fprintf? Supngase que se genera una matriz de nmeros aleatorios de 5 x 2, es decir, de 5 filas por dos columnas. Sabiendo que fprintf imprime la matriz entera, vamos a ver el la disposicin que establece en el archivo de salida si el formato permite escribir dos valores por lnea. Escribir las filas correctamente?

clear, clc fid = fopen('salen.txt', 'w') MATIMP = rand (5,2) % 5 filas x 2 columnas fprintf (fid, '%6.2f % 6.2f\n', MATIMP) fclose(fid)
>>fid = 5 MATIMP = 0.5692 0.6318 0.2344 0.5488 0.9316

Al ejectuar el programa (por ejemplo efeprintefe.m), el command window muestra lo siguiente:

0.3352 0.6555 0.3919 0.6273 0.6991

es decir, la matriz se visualizada por no suprimir la salida, se presenta como uno lo esperaba, de 5 filas x 2 columnas. Se ver que sucede con el archivo salen.txt, que es lo que nos importa aqu se observa que la primera fila de los resultados en este archivo son los elementos MATIMP(1,1) y MATIMP (2,1), y que la segunda fila est compuesta por MATIMP (3,1) y MATIMP (4,1). La tercera fila est compuesta por los elementos MATIMP(5,1) Y MATIMP (1,2), porque recurre ya a la segunda columna. Las filas que siguen en el archivo visualizado estn formadas slo por elementos de la segunda columna originales, MATIMP (2,2), MATIMP (3,2) (cuarta fila del archivo), y MATIMP (4,2) y MATIMP (5,2) (quinta fila). En consecuencia, la matriz se imprime por columna. Estas instrucciones de Matlab para la impresin con formatos provienen, del lenguaje C. La especificacin de formato 6.2f implica campos de 6 posiciones totales, y entre ellas el punto decimal y dos dgitos decimales. Esto permite, en este caso, que sobren 2 espacios a la izquierda de cada campo. La precisin decimal sale por redondeo.

99

Programacin Matlab IV. Instrucciones de Entrada/Salida con formatos. Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera, UNLP, 2008 Ejemplo 2. Como imprimir una Tabla x-y? 2.1. Forma incorrecta En este programa no se leen datos, se genera un vector de valores de x, se calcula la variable dependiente y, se abre un archivo para guardar los resultados, y se graban los mismos con una determinada especificacin de formato. Supngase que se quiere imprimir una tabla x,y.

x = 0:.1:1; % vector fila 1 x 11 y = exp(x); % vector fila 1 x 11 fid=fopen('salidaxy.txt','w'); fprintf(fid, ' %6.2f %12.8f\n',x,y); fclose(fid);

-La instruccin fprintf imprime (visualiza) en el archivo salidaxy.txt todos los valores del arreglo x primero, de a dos por lnea, y luego todos los de y, de a dos por lnea tambin. El carcter \n es lo que permite pasar a la lnea siguiente (linefeed). De todas maneras, esto no permite obtener la tabla buscada.
2.2. Forma correcta Una manera de lograrlo sera mediante la construccin de una matriz bidimensional, donde la primera fila contuviera los valores de x, y la segunda, los de y. Si al fprintf se le indica escribir dos valores por lnea, Matlab buscara los datos por columna y escribira un valor de x y otro de y por fila del archivo de resultados. Es decir, dado que el nmero de variables a visualizar por lnea (por fila del archivo de resultados), coincide con el nmero de columnas de la matriz original, lo que hara fprintf es trasponer la matriz y presentarla en el archivo. 0 1
*

0.1 1.11

0.2 1.22

0.3 1.35

0.4 1.49

0.5 1.65

0.6 1.82

0.7 2.01

0.8 2.23

0.9 2.46

1 2.72

(los valores se escribieron en esta tabla con dos decimales slo para ilustrar la disposicin de los nmeros y no su precisin)

x = 0:.1:1; % vector fila 1 x 11 col y = exp(x); % vector fila 1 x 11 col IMP = [x;y] % matriz de 2 filas x 11 col fid=fopen('salidamat.txt','w'); fprintf(fid, ' %6.2f %12.8f\n',IMP ); fclose(fid);
Como se observa en el archivo salidamat.txt ahora s se obtiene el tipo de salida que esperado.

100

Programacin Matlab IV. Instrucciones de Entrada/Salida con formatos. Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera, UNLP, 2008 -La instruccin fopen asigna un cdigo fid al archivo salidamat.txt que se utiliza para escribir (w por write) resultados. La instruccin fclose cierra el archivo. -Cada elemento de la primera columna se visualiza con especificacin de conversin (conversor) real f de 6 espacios totales, de los cuales 2 son decimales -Cada nmero de la segunda columna se visualiza con un conversor real f de 12 espacios totales, de los cuales 8 son decimales. -Esta conversin 12.8f excede lo necesario para la segunda columna y como por defecto MATLAB justifica el valor a la derecha del campo, parte del ancho de campo se emplea para separar sus valores de aquellos de la primera columna. Argumento de Formato Es una cadena de caracteres con conversores de formato. Dato en el formato interno de la mquina
Conversin del dato mediante especificacin de formato Los datos se almacenan internamente con muchos decimales (cada dato ocupa normalmente 8 bytes), muchos de los cuales exceden la precisin verdadera de variables fsicas. As, uno puede querer expresar el dato con una determinada cantidad de decimales, de all es que puede surgir la necesidad de convertirlos.

Dato en el formato visualizado

Un conversor de formato controla la notacin, alineacin, dgitos significativos, ancho de campo, y otros aspectos del formato de salida. -La cadena de formato puede contener caracteres de escape para representar caracteres no impresos como los caracteres de lnea nueva y tabuladores. Las especificaciones de conversin comienzan con un carcter % y contienen estos elementos opcionales y requeridos

Flags (carteles identificatorios, opcional) Ancho de campo (Field width) y precisin (opcional) Un especificador de subtipo (opcional)

Un carcter de conversin (requerido)

Usted puede especificar estos elementos en el orden siguiente

Comienzo de la especificacin de conversin, indicador, ancho de campo, precisin, carcter de conversin

101

Programacin Matlab IV. Instrucciones de Entrada/Salida con formatos. Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera, UNLP, 2008 Flags (indicador) Se puede controlar la alineacin de la salida usando cualquiera de estos indicadores opcionales. Character Un signo menos (-) Un signo ms (+) Cero (0) Description Justifica a la izquierda el argumento convertido en este campo Siempre imprime el signo (+ o -) Incorpora ceros en lugar de espacios Ejemplo %-5.2d %+5.2d %05.2d

Especificacin de ancho de campo y precisin Se puede controlar el ancho y la precisin de la salida incluyendo estas opciones en la cadena del format Carcter Ancho de campo Precisin Descripcin Ejemplo

Una cadena de dgitos que especifica el nmero mnimo de dgitos %6f a ser impreso Una cadena de dgitos con (.) que indica el nmero de dgitos impreso a la derecha del punto decimal %6.2f

Caracteres de Conversin: especifican la notacin de la salida Especificador Descripcin %c %d %e %E %f %g %G %s Carcter individual Notacin decimal entera (con signo) Notacin exponencial (e significa 10 y lo que est a la derecha, el exponente) (usando minsculas e como en 3.1415e+00) Notacin exponencial (usando maysculas E como en 3.1415E+00) Notacin de punto flotante Versin compacta de %e o %f . Los ceros no significativos no se imprimen. Igual que %g, pero usando mayscula E Cadena de caracteres

102

Programacin Matlab IV. Instrucciones de Entrada/Salida con formatos. Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera, UNLP, 2008 Caracteres de Escape: Esta tabla lista la secuencia de caracteres de escape, es decir, caracteres no imprimibles de un formato. Carcter \b \f \n \r \t \\ Descripcin Backspace (retroceso) Alimenta pgina Nueva lnea Retorno de carro Tabulacin horizontal Barra invertida

\'' or '' Indicador de carcter dentro de la especificacin de formato (Dos apostrofes) %% Carcter de porcentaje

Impresin de una constante en pantalla fprintf('un crculo unitario tiene una circunferencia %g radianes.\n',2*pi) muestra una lnea sobre la pantalla Un crculo unitario tiene una circunferencia 6.283186 radianes. Ejemplo elemental de tabla, con mensaje de error % abrir el archivo fid = fopen ('miarchivo.txt', 'w'); if (fid < 0) error ('no pude abrir el archivo "miarchivo.txt" '); end % escriba algo al archivo fprintf(fid, 'number Square\n') for (i = 1:10) fprintf(fid, '%3d %6d\n', i,i.^2); end %cerrar el archivo fclose (fid);

103

Programacin Matlab IV. Instrucciones de Entrada/Salida con formatos. Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera, UNLP, 2008 Tablas con fprintf y for Tabla x-y Supngase que para el ejemplo inicial, en lugar de crear la matriz de impresin IMP, deseamos imprimir los vectores x e y, en forma de tabla, es decir 0 1 0.1 1.11 0.2 1.22 0.3 1.35 0.4 1.49 0.5 1.65 0.6 1.82 0.7 2.01 0.8 2.23 0.9 2.46 1 2.72

Como se ha mencionado dentro del archivo y en la parte inicial de esta clase, MATLAB imprime un arreglo completo, y luego otro. Para evitar esto, se introduce la sentencia fprintf en un lazo repetitivo for que la ejecuta tantas veces como elementos tenga el vector, imprimiendo un elemento de cada arreglo por vez. Podemos decir que del x(i) pasa al y(i) porque no tiene ms que un valor de cada arreglo cada vez que imprime.

x = 0:.1:1; y = exp(x); n= length(y); fid=fopen('salidaxyfor.txt','w'); for i = 1:n fprintf(fid,'%6.2f %12.8f\n',x(i), y(i)); end fclose(fid);

Problema de la ecuacin cuadrtica Se recordar que en un ejemplo anterior, se resolvieron una ecuacin cuadrtica ax2 +bx +c=0 para n ternas de valores a, b, y c, generando dos races por terna, cada una con una componente real y otra imaginaria, esto es, los vectores x1r, x1i, x2r y x2i, cada uno de n valores. Si se deseara construir una tabla del tipo x1r x1i ------------------. . . . . . -------

x2r ---------. . . ----

x2i ---------. . . ----

104

Programacin Matlab IV. Instrucciones de Entrada/Salida con formatos. Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera, UNLP, 2008 se puede escribir el segmento de programa siguiente, asumiendo que ya estn definidos los vectores de races % se abre el archivo de salida salidaraices.txt fid = fopen('salidaraices.txt','w');

% se imprimen los valores del vector. Al tener cada vez Matlab un elemento %de cada arreglo, pasa al otro, y al otro hasta escribirlos todos en una lnea for k = 1:n fprintf (fid, %8.4f %8.4f %8.4f %8.4f\n, x1r(k), x1i(k), x2r(k), x2i(k) ) end LEER DATOS DESDE PLANILLAS DE CALCULO EXCEL, DESDE UN PROGRAMA xlsread Lee planillas de Microsoft Excel (.xls) Sintaxis A = xlsread('nombre de archivo') devuelve datos numricos en el arreglo A a partir de la primera pgina en la planilla Microsoft Excel denominada Nombre de archivo. xlsread ignora los encabezamientos de texto en filas o columnas. Pero si una celda no es cabeza de fila o columna, est vaca o contiene texto, xlsread coloca un NaN en esa posicin de A. Como traer los encabezamientos de las columnas de la planilla Excel a MATLAB [A, B ] = xlsread('nombre de archivo') devuelve datos en un arreglo numrico A, y datos de texto en un arreglo de celdas B. Si la planilla contiene encabezamientos de filas o columnas con texto, xlsread devuelve solo esas celdas en B. Ejemplos Ejemplo 1 Leyendo datos numricos El archivo de planilla de clculo Microsoft, testdata1.xls, contiene estos datos: 1 6 2 7 3 8 4 9 5 10 Para leer este dato en MATLAB, utilice este comando: A = xlsread('testdata1.xls') A= 1 6 2 7 3 8 4 9 5 10

%se imprime el encabezamiento de la tabla (cadena de caracteres) %una sola vez fprintf(fid, x1r x1i x2r x2i\n)

105

Programacin Matlab IV. Instrucciones de Entrada/Salida con formatos. Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera, UNLP, 2008 Ejemplo 2 Manejo de datos de texto La planilla testdatos2.xls, contiene datos numricos y de texto. 1 6 2 7 3 8 4 9 5 Text la sentencia xlsread inserta un NaN (Not-a-number) en lugar del texto en el resultado. A = xlsread('testdata2.xls') A= 1 6 2 7 3 8 4 9 5 NaN Ejemplo 3 Manejo de archivos con encabezamientos de filas y columnas La planilla tempdata.xls, contiene dos columnas de datos numricos con encabezamiento de texto para cada columna: Tiempo 12 13 14 Temperatura 98 99 97

Si se desea solamente importar los datos numricos, utilice xlsread con un slo argumento de retorno. As, xlsread ignorar las celdas de texto en el resultado numrico. ndatos = xlsread('tempdata.xls') ndatos = 12 98 13 99 14 97 Para importar tanto los datos numricos como los de texto, se especifican dos datos de retonro para xlsread. [ndatos, encabezamientos] = xlsread('tempdata.xls') ndatos = 12 98 13 99 14 97 encabezamientos = 'tiempo' 'temperatura'

Leyendo archivos ASCII de texto con formato

fscanf

106

Programacin Matlab IV. Instrucciones de Entrada/Salida con formatos. Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera, UNLP, 2008 Lee datos formateados desde un archivo de datos ASCII Sintaxis A = fscanf(fid,formato) [A,count] = fscanf(fid,formato, tamao) Descripcin A = fscanf(fid,formato) lee todos los datos de un archivo especificado por fid, convirtindolo de acuerdo a una cadena especificadora de formato, y asignndolo a la matriz A. El argumento fid es un archivo identificador entero, obtenido mediante una instruccin fopen. Formato, es una cadena de caracteres que especifica el formato de los datos a ser ledos [A,count] = fscanf(fid,formato,tamao) lee los datos especificados por tamao, y los convierte de acuerdo a la cadena de caracteres de formato y los asigna a una matriz, junto al recuento de elementos ledos existosamente (count). El argumento size, determina la cantidad de datos que deben leerse. Opciones vlidas para tamao, son
n inf
Lee hasta n nmeros, caracteres o cadenas de caracteres. Lee hasta el final del archivo.

[m,n] Lee hasta(m*n) nmeros, caracteres o cadenas de caracteres. Llena, en orden de columna, una matriz de hasta m filas. El smbolo n puede ser inf, pero m no.

como se ha dicho, fscanf es una instruccin vectorizada, de manera que la cadena de formato se usa una y otra vez hasta encontrar un final de archivo, o se alcanza la cantidad de datos a leer especificada por tamao. Comentarios Cuando MATLAB lee un archivo especificado, intenta establecer la correspondencia entre los datos del archivo y la cadena de formato. Si se da tal situacin, los datos se escriben en la matriz en forma de columna. Si se da una correspondencia parcial, slo los datos que coincidan se escriben en la matriz, y la operacin de lectura se detiene. La cadena de formato consiste en caracteres comunes y especificaciones de conversin. Estas ltimas indican el tipo de datos que debe corresponderse con los del archivo ledo e involucran el carcter %, campos de ancho opcional y caracteres de conversin, organizados como se indica abajo:

Carcter inicial, indicador, ancho de campo carcter de conversin Obsrvese que no es necesario establecer precisin al leer con fscanf

107

Programacin Matlab IV. Instrucciones de Entrada/Salida con formatos. Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera, UNLP, 2008 Ejemplo: supongamos que tenemos una matriz de 4 x 3, por ejemplo, generada con una funcin randomize.

clear, clc A = rand(4,3) %se asigna un identificador al archivo donde se va a escribir la matriz A fi = fopen ('mifichero.txt', 'w') % Matlab recorre la matriz A por columna % En la instruccion fprintf se indican los valores que se despliegan por fila del archivo % Para guardar la matriz original, hay que generar la transpuesta At = A' % y escribir la transpuesta, de 3 filas por 4 columnas. Es decir, cada columna tiene %tres valores si se le indica a Matlab que despliegue tres valores por linea, va a %escribir las columnas de la transpuesta como filas, recuperando en el archivo la %matriz original fprintf(fi, '%8.5f %8.5f %8.5f\n', At) fclose(fi) % se abre el archivo para lectura fm = fopen ('mifichero.txt', 'r') %como fscanf va a recorrer el archivo por filas y lo asigna a una matriz por columnas, se le va a decir que la matriz que asigne tenga tres filas.Ese mecanismo va a volver a generar la transpuesta de la matriz A, llamada Afs Afs=fscanf(fm, '%f',[3,Inf]) % el 3 corresponde al numero de valores que tendr cada columna % se arma nuevamente la matriz, que se llama ahora "matriz recuperada", Ar Ar = Afs' %finalmente, se va a leer el archivo directamente para generar un vector columna fv = fopen('mifichero.txt','r') Av=fscanf(fv, '%f ', Inf)

108

Programacin Matlab IV. Instrucciones de Entrada/Salida con formatos. Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera, UNLP, 2008 Esta sera la visualizacin del command window >> A = 0.1389 0.2028 0.1987 0.6038 0.2722 0.1988 0.0153 0.7468 0.4451 0.9318 0.4660 0.4186

Se genera la traspuesta At = 0.1389 0.2722 0.4451 0.2028 0.1988 0.9318 0.1987 0.0153 0.4660 0.6038 0.7468 0.4186

fprintf va a recorrer por columna y desplegar los valores en filas de tres valores

que nos devuelve la matriz original, guardada en mifichero.txt A veces es muy til utilizar la instruccin fscanf para leer de archivos que fueron creados previamente con fprintf Afs=fscanf(fm, '%f',[3,Inf]) % el 3 corresponde al numero de valores que tendr cada columna, es decir, el nmero de filas Afs = 0.1389 0.2722 0.4451 0.2028 0.1988 0.9318 0.1987 0.0153 0.4660 0.6038 0.7468 0.4187

Es decir, nos dara la traspuesta del contenido del archivo. Entonces, trasponindola, se recupera la matriz original Ar = 0.1389 0.2028 0.1987 0.6038 0.2722 0.1988 0.0153 0.7468 0.4451 0.9318 0.4660 0.4187

109

Programacin Matlab IV. Instrucciones de Entrada/Salida con formatos. Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera, UNLP, 2008 A su vez, si dejamos que fscanf asigne sin indicarle ms que el carcter de conversin, se tendr un vector columna Av = 0.1389 0.2722 0.4451 0.2028 0.1988 0.9318 0.1987 0.0153 0.4660 0.6038 0.7468 0.4187

110

Vectorizacin. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008
CAPITULO 9. VECTORIZACION DE CDIGO EN MATLAB. Sandro M. Goi

En MATLAB los lazos repetitivos pueden ser reemplazados por estructuras pseudosecuenciales (vectorizadas), siempre y cuando se pueda encontrar o desarrollar una expresin vectorizada equivalente (y simple!) que resuelva satisfactoriamente el problema particular. Algunas razones para realizar la vectorizacin: Programacin mas simple y concisa. Menos tiempo de procesamiento. Indexacin automtica. En estas notas se dan algunos ejemplos de vectorizacin. Se sugiere tipearlos y reproducir los resultados, observando la respuesta de cada instruccin. Como punto de partida, la vectorizacin consiste bsicamente en la sentencia o instruccin de operaciones, en forma directa o con un solo comando simple (o una serie de ellos), sobre variables tpicamente no escalares (vectores y matrices), para dar un resultado escalar o no escalar. La vectorizacin es, en este sentido, una estructura pseudosecuencial, que puede involucrar una gran cantidad de operaciones simples, las cuales son indicadas por una instruccin aparentemente sencillas. Es importante destacar que durante las primeras clases introductorias a MATLAB se utilizaron repetidamente estructuras vectorizadas; por ejemplo, las instrucciones sencillas para graficar la funcin seno: x=0:pi/10:2*pi; y=sin(x); plot(x,y) encierran operaciones y asignaciones vectorizadas. Este esquema muestra los posibles caminos de las formas vectorizadas y de las formas escalares tradicionales.

Asignacin vectorizada

Instrucciones/operaciones vectorizadas

Asignacin escalar

Instrucciones/operaciones escalares

No vectorizado (

) / Vectorizado (

Se mostraran diversos ejemplos de programacin escalar y formas vectorizadas equivalentes. Un ejemplo simple, consiste en generar los elementos al cuadrado del vector x=[0 1 2]. La generacin del vector, componente a componente, puede realizarse como: ... N=length(x); for i=1:N y(i)=x(i)^2; end ...

111

Vectorizacin. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Aqu la operacin se realiza para cada componente del vector x en forma individual y sucesiva, con control de posicin ejercido por la variable de control del lazo for. Dicho de otra manera, la operacin se realiza en forma escalar. Al mismo tiempo, la asignacin es tambien escalar, controlada por el lazo for. En forma vectorizada, las operaciones se indican como: y=x.^2; Donde el operador de arreglos .^ es utilizado para indicar la potenciacin elemento a elemento. De esta manera las operaciones se programan en forma vectorizada, y el resultado de la misma es tambien vectorizado. Suponga que se quiere calcular el producto escalar entre los vectores x=[1 5 2] e y=[-1 0 8]. En forma escalar se puede escribir como: s=0; for i=1:length(x) s=s+x(i)*y(i); end En forma vectorizada: s=x*y' En este caso, la operacin se realiza en forma vectorizada (* y no .*), mientras que el resultado es escalar. Suponga ahora que se quiere generar el vector z=[1 1 1]. En forma escalar se puede escribir: for i=1:3 z(i)=1; end Mientras que en forma vectorizada se puede escribir: z(1:3)=1 En este caso la operacin (asignacin directa) es escalar, mientras que el resultado se asigna en forma vectorizada. Ejemplo 1: reemplazar las componentes negativas de una matriz genrica con 0. Con lazo for e if para encontrar valores negativos: for i=1:size(A,1) % le pedimos a size el nmero de filas for j=1:size(A,2) % ahora le pedimos el nmero de columnas if A(i,j)<0 A(i,j)=0; end end end

112

Vectorizacin. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Indexacin lgica A(B), donde B es un arreglo de valores lgicos, devuelve los valores de A para aquellos ndices donde la parte real de B es distinta de cero (B debe tener el mismo tamao que A). A(B) es equivalente a la expresin A(find(B)) (vea help logical indexing)

Vectorizado: Aplicando entonces la indexacin lgica, tendremos: A(A<0)=0 % que es equivalente a: A(find(A<0))=0 El resultado de la expresin A<0 es una matriz de ceros y unos del mismo tamao de A, con componentes iguales a 1 en las posiciones o ndices donde se cumpla la condicin. Para esas posiciones, los elementos de la matriz se hacen igual a 0.

Ejemplo 2: reemplazar las componentes menores de un umbral mnimo de una matriz genrica con un valor mnimo prefijado, y las componentes mayores de un umbral mximo con un valor mximo prefijado. Con lazo for e if para encontrar las restricciones: vmin=2; vmax=10; for i=1:size(A,1) for j=1:size(A,2) if A(i,j)<vmin A(i,j)=vmin; elseif A(i,j)>vmax A(i,j)=vmax; end end end

Vectorizado, utilizando operadores relacionales: A(A<vmin)=vmin; A(A>vmax)=vmax; Ejemplo 3: Calcular el valor de la funcin f(x), para un vector x arbitrario, con f(x) definida como:

x2 + 1 f ( x ) = x + 2 x2 x 1

x<0 0 x < 20 x 20

Con lazo for e if:

113

Vectorizacin. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 x=randn(1,100)*50; for i=1:length(x) if x(i)<0 f(i)=x(i)^2+1; elseif x(i)>=0&x(i)<20 f(i)=2-x(i); else f(i)=x(i)^2/(x(i)-1); end end Vectorizado: x=randn(1,100)*50; f=(x.^2+1).*(x<0)+(2-x).*(x>=0).*(x<20)+(x.^2./(x-1)).*(x>=20); Puede explicar como funciona esta asignacin? Ejemplo 4: Generar la matriz de Hilbert de tamao NxM (la misma se define como A(i,j)=1/(i+j-1)). Con lazo for: N=5; M=8; for i=1:N for j=1:M A(i,j)=1/(i+j-1); end end

Vectorizado: N=5; M=8; A=1./([1:N]'*ones(1,M)+ones(N,1)*[1:M]-1) Explicacin: [1:N]'*ones(1,M) genera la matriz de ndices fila: 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5

y ones(N,1)*[1:M] genera la matriz de ndices columna: 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 6 6 6 6 6 7 7 7 7 7 8 8 8 8 8

As la suma de ambas matrices debuelve la suma de indices de cada elemento de la matriz:

114

Vectorizacin. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9 6 7 7 8 8 9 9 10 10 11 8 9 9 10 10 11 11 12 12 13

La asignacin de A es directa, dividiendo 1 (componente a componente) por la suma de matrices ndices-1. Hasta este punto, podemos observar que utilizando lazo for: hay que utilizar ndices para indicar sobre que componente se esta trabajando se deben utilizar ndices para indicar a que componente de la variable debe asignarse el resultado de la operacin (si es necesario) se necesitan mayor cantidad de escritura El uso de la forma vectorizada es ms directo, con mayor o menor dificultad para encontrar una forma adecuada de expresar la misma.

En ocaciones se pueden vectorizar algunas partes de las operaciones, dentro de un lazo principal exterior Ejemplo 5: generar una matriz tridiagonal de NxN donde la diagonal principal tenga valores igual a 2, y las diagonales secundarias valores iguales a -1. Con lazo for e if: N=10; for i=1:N for j=1:N if i==j A(i,j)=2; elseif i+1==j A(i,j)=-1; elseif j+1==i A(i,j)=-1; end end end Con lazo for (aprovechando que es tridiagonal): N=10; A(1,[1 2])=[2 -1] for i=2:N-1 A(i,[i-1 i i+1])=[-1 2 -1]; end A(N,[N-1 N])=[-1 2] Note que la instruccin dentro del lazo esta vectorizada. Vectorizado 1,utilizando la funcin diag: N=10; A=diag(ones(1,N))*2-diag(ones(1,N-1),1)-diag(ones(1,N-1),-1)

115

Dificultades y Errores tpicos. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 CAPTULO 10. DIFICULTADES Y ERRORES TPICOS

Ing. Sandro M. Goi


A continuacin se enumeran algunas de las dificultades encontradas y errores que los alumnos cometen ms frecuentemente durante la prctica. Si bien existen muchas otras situaciones (casi tanto como imaginemos), aqu se nombran los mas importantes y habituales. 1) Errores de indexacin Estel tipo de error es importante y uno de los ms ampliamente observados. Debe recordar que la indexacin siempre se realiza con nmeros naturales (excepto indexacin lgica), pero a pesar de esta muy clara definicin, muchas veces se insiste con utilizar variables con valores no naturales como ndices. Por ejemplo: >> x=rand(1,5) x = 0.9501 0.2311 0.6068 0.4860 0.8913

>> x(0) ??? Subscript indices must either be real positive integers or logicals. >> x(1.19) ??? Subscript indices must either be real positive integers or logicals. Otra situacin observada es la indexacin de escalares, lo que naturalmente conduce a errores. 2) Definicin de Variables y funciones Es tambin uno de los errores ms comunes, utilizar una variable o funcin que no se ha creado. Por ejemplo:

Se obtiene: ??? Undefined function or variable "x". Error in ==> ejemplo at 1 for k=1:length(x) dado que x no esta definida. Otro error comn es utilizar una variable antes de definirla: T=0:DT:100;

116

Dificultades y Errores tpicos. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 DT=10; Adems, muchos comandos como clear, global, etc., pueden ser utilizados incorrectamente, pudiendo producir errores posteriores. Los argumentos deben escribirse separados por espacios, no por comas. Si se utiliza una coma en la lista, lo que viene luego de la misma se interpreta como una sentencia separada. Por ejemplo, si declara a y b globales, la forma de hacerlo es: global a b y no: global a,b en cuyo caso b no es global, y simplemente se muestra su valor. Adems la declaracin de global se realiza antes de crear y asignar un valor a la variable, por lo cual se obtendr un error, dado que no puede mostrarse b por que no esta definida. 3) Errores de sintaxis Un error de sintaxis puede ser, por ejemplo: for k=1#10 z(k)=2*k^2; end En este caso, MATLAB responder con: ??? for k=1#10 | Error: The input expressions.

character

is

not

valid

in

MATLAB

statements

or

(dependiendo de la versin): ??? for k=1#10 | Error: Missing variable or function.

Aqu se utiliz # en lugar de : (colon) y se produce un mensaje de error indicando el problema. Cuando se comete una equivocacin en un script, se obtiene un mensaje de error indicando el nombre del archivo, la lnea y columna donde se produce el error, y el tipo de error.

??? Error: File: C:\MATLAB7\work\ejemplo.m Line: 1 Column: 8

117

Dificultades y Errores tpicos. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Missing variable or function. 4) Errores de sintaxis que no producen errores Un error de sintaxis que no se detecta, por ejemplo: for k=1,10 z(k)=2*k^2; end Aqui se obtendr un vector z de longitud 1, y luego se obtendr ans=10. Este tipo de error es completa responsabilidad del programador (tipea la tecla de al lado, equivocadamente), dado que el programa funcionar pero no se obtendrn los resultados deseados ni mensajes de error. Suelen ser difciles de detectar, especialmente en programas grandes. Tambin suele observarse cuando se define una constante; por ejemplo, si tiene que introducir a=0.89 y escribe: >>a=0,89 Obtendr: a = 0 ans = 89 Dado que el punto decimal es . y no , en Matlab. En este caso, la , se interpreta como un separador de instrucciones. Incluso cuando se escriben las sentencias a mano (como en los exmenes) hay que poner atencin en estos detalles, ya que el funcionamiento del programa puede ser muy diferente. 5) Estructuras de control de flujo incompletas Es muy comn olvidar escribir los end para cerrar estructuras de control de flujo. Tpicamente es muy fcil de solucionar, solo basta recordar que se requiere un end por cada estructura de control . Suponga que crea la siguiente funcin para calcular el factor de friccin de Fanning, donde falta end al final: function f = Fanning (Re) %function que calcula el factor de friccin de Fanning if Re <= 2100 f= 64/Re; elseif Re <= 1e5 deno = Re.^0.25; f = 0.0791./deno else f = 0.0044 Cuando se llama a la function se obtendr: >> ff = Fanning (80) ??? Error: File: C:\MATLAB7\work\Fanning.m Line: 11 Column: 1 This statement is incomplete.

118

Dificultades y Errores tpicos. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008

6) Nombres incorrectos de funciones Un error muy observado es que se utilizan nombres incorrectos de funciones. Para la function anterior: function f = Fanning (Re) %function que calcula el factor de friccin de Fanning if Re <= 2100 f= 64/Re; elseif Re <= 1e5 deno = Re.^0.25; f = 0.0791./deno else f = 0.0044 end Es muy comn observar que se guarda la funcin con un nombre diferente, por ej., factor_fanning.m. Cuando se realiza la llamada a la funcin, mediante Fanning(valor), Matlab contesta indicando que la variable o funcin no esta definida, puesto que no encuentra el nombre del archivo. La prctica recomendada es utilizar el mismo nombre en la lnea de definicin como para el archivo de la funcin. 7) Nombre de variables y funciones En ocasiones el usuario utiliza nombres para sus variables o funciones que ya existen en el entorno MATLAB. Si se asigna una variable, ones=5, y luego quiere utilizarse la funcin ones (que genera una matriz de unos), se obtendr un mensaje de error. Esto puede solucionarse borrando el espacio de trabajo. Una situacin mas comprometida es cuando se genera una funcin con el mismo nombre que una preexistente. Para evitar estos inconvenientes, antes de utilizar un nombre para una variable o una funcin, si se cree que puede existir conflicto con funciones existentes, conviene tipear help nombre en la ventana de comandos y si existe, no utilizar ese nombre. 8) Argumentos de funciones Cuando se trabaja con funciones hay que asignar correctamente los argumentos, por ejemplo, considrese nuevamente el factor de friccin: function f = Fanning (Reynolds) %function que calcula el factor de friccin de Fanning if Re <= 2100 f= 64/Re; elseif Re <= 1e5 deno = Re.^0.25; f = 0.0791./deno else f = 0.0044 end Cuando se llama a la function se obtiene: >>Fanning(50) ??? Undefined function or variable 'Re'.

119

Dificultades y Errores tpicos. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 Error in ==> Fanning at 3 if Re <= 2100 Como el argumento de entrada se llama Reynolds y en el cuerpo de la function se utiliza Re, esta variable no esta definida. Lo mismo sucede con los argumentos de salida. Por ejemplo: function f_friccion = Fanning (Re) %function que calcula el factor de friccin de Fanning if Re <= 2100 f= 64/Re; elseif Re <= 1e5 deno = Re.^0.25; f = 0.0791./deno else f = 0.0044 end Cuando se llama a la function se obtiene: >> ff = Fanning(80) ??? One or more output arguments 'C:\MATLAB7\work\Fanning.m (Fanning)'.

not

assigned

during

call

to

Indicando claramente que hay errores en la asignacin del argumento de salida (f_friccin debera ser el resultado de la funcin y no f). 9) Errores en asignaciones En ocasiones el usuario trata de escribir asignaciones que carecen de sentido, como tratar de asignar valores a un nmero, o realizar operaciones a la izquierda del signo igual. Asignar un valor a un nmero: >> 3=a ??? 3=a | Error: The expression to the left of the equals sign is not a valid target for an assignment. >> a+3=b ??? a+3=b | Error: The expression to the left of the equals sign is not a valid target for an assignment. 10) No probar los programas hasta el final Tpicamente cuando el alumno debe resolver un problema, programa toda la secuencia que considera necesaria sin ir probando o verificando las diferentes partes o mdulos de la misma. Si bien esta prctica no constituye un error, suele inducir la aparicin de errores, los cuales son ms difciles de detectar una vez que la secuencia se finaliz. En estas circunstancias el alumno debe corregir gradualmente los errores y muchas veces modificar notablemente el cdigo que inicialmente consider correcto (lo cual puede producir cierto desconcierto y frustracin). Hasta que el alumno adquiera experiencia, es ms conveniente programar por partes e ir verificando el correcto funcionamiento de cada sentencia o conjunto de sentencias en particular.

120

Dificultades y Errores tpicos. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008

11) No borrar el espacio de trabajo entre pruebas En numerosas ocasiones se obtienen errores por no borrar el espacio de trabajo. Considere por ejemplo: x=0:.1:10; for i=1:length(x) y(i)=sin(x(i)); end plot(x,y) Si luego cambia el vector x, de manera que tiene diferente nmero de elementos: x=0:.5:10; for i=1:length(x) y(i)=sin(x(i)); end plot(x,y) Se obtendr: ??? Error using ==> plot Vectors must be the same lengths. Error in ==> ejemplo at 6 plot(x,y) Esto se produce porque la primera vez que se genera el vector y, el mismo posee 101 elementos, al igual que x, mientras que la segunda vez x posee 21 elementos y los primeros 21 elementos de y son modificados, pero sigue teniendo 101 elementos, por lo cual se produce un mensaje de error. Esta clase de errores puede desconcertar al alumno, dado que la secuencia de comandos es correcta, pero olvida que ya existen valores para las variables en el espacio de trabajo. Para evitar este tipo de errores, se puede utilizar clear all al inicio del script, por lo cual las variables se borraran siempre antes de comenzar. clear all x=0:.5:10; for i=1:length(x) y(i)=sin(x(i)); end plot(x,y)

En ocasiones clear all puede omitirse, cuando las asignaciones son vectorizadas x=0:.5:10; y=sin(x);

121

Dificultades y Errores tpicos. Ctedra de Simulacin de Procesos I. rea Departamental Ingeniera Qumica. Facultad de Ingeniera. UNLP. 2008 plot(x,y) De esta manera la asignacin de y= borrar los valores en memoria y no habr dificultades, en lugar de la asignacin y(i)=. Note que este tipo de errores se produce cuando se reduce la longitud o el tamao de una de las variables. Si primero se utiliza: x=0:.5:10; for i=1:length(x) y(i)=sin(x(i)); end plot(x,y)

y luego x=0:.1:10; for i=1:length(x) y(i)=sin(x(i)); end plot(x,y) No se obtendr ningn error, ya que ahora la variable y tiene ms elementos que la primera vez que se gener. 12) No utilizar la ayuda de funciones En numerosas ocasiones el alumno solicita ayuda para utilizar funciones, sin antes utilizar los comandos de ayuda de Matlab, que suelen ser muy tiles. Recuerde primero que todo soicitar la ayuda del programa. Por ejemplo >> help global 13) Directorios de trabajo En numerosas ocasiones el alumno modifica un archivo y sigue obteniendo el mismo resultado. Esta situacin se produce cuando se utiliza ms de una versin del mismo archivo y modifican una versin que no es la que est en el directorio de trabajo de MATLAB. Por ej., puede existir una versin del archivo en el directorio C:\MATLAB6p1\work\ y otra versin en el directorio A:\ o F:\ (dispositivos de almacenamiento porttiles). El alumno debe asegurarse que el archivo que est modificando se halle en el directorio actual de trabajo de Matlab. Incluso en ocasiones se producen errores debido a que el alumno llama a una function que no est en el directorio de trabajo y no percibe esa situacin. Recuerde que el contenido del directorio de trabajo puede verificarse fcilmente con el comando dir.

122

Simulacin de Procesos I. rea Departamental Ingeniera Qumica, Facultad de Ingeniera, UNLP, 2008 EPLOGO A lo largo de las pginas de este libro/curso de Matlab, revisadas y actualizadas en funcin de la experiencia aquilatada en el proceso de enseanza/aprendizaje, y de las crticas constructivas y observaciones de los alumnos y docentes, se han recorrido los que se consideran temas esenciales para entrenarse en el uso de este entorno de clculo y visualizacin grfica vinculado a un lenguaje de programacin de muy alto nivel para el desarrollo de aplicaciones del usuario. Habr observado que es imprescindible un estudio terico prctico combinado con resoluciones de problemas de seminario que en ocasiones resultan ms provechosas si se resuelven con el entorno Matlab abierto para ir intentando obtener resultados y comprobar que los programas funcionen. Es posible que al principio se haya sentido un poco frustrado por la sucesin de errores que el entorno nos seala de las expresiones que escribimos pero, a medida que se logra la familiarizacin con el entorno y la programacin, aparece cierto automatismo de trabajo que permite concentrarse en resolver el problema tcnico, y no dispersarse con las dificultades instrumentales. Dada la posicin que tiene la parte de Matlab en la asignatura Simulacin de Procesos I SDP1 del rea Departamental Ingeniera Qumica, Facultad de Ingeniera, UNLP, dentro del 5 semestre, los alumnos recin estn comenzando a manejar los conceptos propios de la ingeniera qumica. Por tanto, los problemas a resolver se han referido con frecuencia a conocimientos de asignaturas previas de ciencias bsicas o qumica general, mezclados con algunas aplicaciones para la carrera. Los temas de la asignatura SDP1 que siguen al Curso de Matlab, constan de Mtodos Numricos aplicados a Ingeniera Qumica; con ellos, el alumno ganar capacidad para resolver una gran variedad de problemas que no pueden abordarse con mtodos analticos o exactos, y, una vez que se haya acostumbrado a resolverlos con calculadora de mano, podr implementar los algoritmos en la computadora, utilizando el lenguaje Matlab. De esta manera podr poner los conocimientos de programacin de este curso al servicio de la resolucin de problemas prcticos similares a los que podr encontrar en asignaturas ms avanzadas y en la vida profesional, como resolver ecuaciones no lineales y sistemas de ellas, sistemas de ecuaciones lineales, ajuste de curvas lineales y no lineales por cuadrados mnimos, integracin numrica o cuadratura, resolucin numrica de ecuaciones diferenciales ordinarias y sistemas de ellas, como las usadas para disear reactores qumicos, y finalmente, ecuaciones diferenciales parciales, que permiten, por ejemplo, calcular tiempos de proceso (y por tanto dimensiones de equipos para muy variadas aplicaciones, desde esterilizacin de alimentos, a coccin, a deshidratacin, reacciones qumicas catalticas, etc.). Es importante que el alumno recuerde que slo podr mantener la destreza de resolver problemas mediante programacin, si mantiene su prctica en forma razonablemente cotidiana. En este sentido, la programacin no es muy distinta al piano o al tenis: slo se lo puede hacer bien si se lo practica, y se lo sigue practicando. Es importante que los ingenieros programen, puesto que es un medio creativo que permite un espacio de concentracin para lograr nuestro fin: aprender nuestra profesin resolviendo problemas concretos. Recuerdo un proverbio chino que le en un libro de programacin: lo grande se reduce a lo pequeo, y lo pequeo se reduce a la nada. Es por eso que hay que mantener la dedicacin y la prctica en programacin a efectos de posibilitar su utilizacin para la resolucin de problemas, diseo de equipos, y la optimizacin y control de su operacin. Sergio A. Giner La Plata, Abril de 2008

123

Simulacin de Procesos I. rea Departamental Ingeniera Qumica, Facultad de Ingeniera, UNLP, 2008 REFERENCIAS BIBLIOGRFICAS Garca de Jaln, J., Rodrguez, J.I., Brazlez, A. (2001). Aprenda Matlab 6.1 como si estuviera en primero. ETSII, Universidad Politcnica de Madrid, 113 pp. (www.tayuda.com/ayudainf/aprendainf/varios.htm) Giner, S.A. (1995). Clases tericas de Turbo Pascal 6. Ctedra de Programacin Avanzada en Ingeniera Qumica. Departamento de Ingeniera Qumica, Facultad de Ingeniera, Universidad Nacional de La Plata. Lpez Romn, L. (1994). Programacin Estructurada: Un Enfoque Algortmico. Mxico: Alfaomega, 666 pp. Moore, H. (2007). Matlab para Ingenieros. Primera Edicin. Pearson Educacin, Mxico, 624 pp. Prez, C. (2002). Matlab y sus Aplicaciones en las Ciencias y la Ingeniera. Pearson Educacin, S.A., Madrid, 632 pp.

AGRADECIMIENTOS Al Ing. Sandro Goi, Docente de la Ctedra, por su valioso aporte.

124

También podría gustarte