Introducción Tutorial MATLAB

También podría gustarte

Está en la página 1de 6

MATEMATICAS AVANZADAS

Escuela de Ingeniería Química


Universidad Industrial de Santander

TUTORIAL MATLAB*
La Naturaleza de la Computación Científica

Este curso se centra en el uso del computador para resolver los problemas en la
ingeniería química. Aprenderemos có mo resolver las ecuaciones diferenciales
parciales que describen el transferencia de cantidad de movimiento, la energía, y
masa, integrar las ecuaciones diferenciales ordinarias que modelan un reactor
químico, y simular la diná mica y predecir las estructuras de mínimo-energía de
moléculas. Estos problemas son expresados en funció n de operaciones
matemá ticas como la diferenciació n parcial y la integració n que los computadores
no comprenden. Lo que si saben hacer los computadores es almacenar nú meros en
ubicaciones de su memoria y realizar operaciones sencillas en ellos como adició n,
sustracció n, multiplicació n, divisió n, y la potenciació n. De algú n modo, nosotros
debemos traducir nuestro má s alto-nivel de descripció n matemá tica de estos
problemas en una sucesió n ló gica de estas operaciones bá sicas.

Como veremos a medida que se plantean y se resuelven los problemas en


ingeniería química, la solució n de estos problemas se reduce y se circunscribe
usualmente a resolver el conjunto de ecuaciones lineales de la forma:

Un computador puede entender como hacer las operaciones encontradas (adició n


y multiplicació n) en este sistema, y también podemos representar este conjunto de
ecuaciones de forma general por intermedio de la ecuació n matricial Ax = b, donde
A={aij} es la matriz de los coeficientes del lado izquierdo de la ecuació n, x es el
vector solució n que se espera obtener, y b es el vector de coeficientes del lado
derecha de la ecuació n. Esta representació n general nos permite traducir, en un
lenguaje consistente, nuestro conjunto de ecuaciones lineales específicas al
problema de interés a algoritmos previamente escritos que han sido optimizados
para resolverlo en una forma muy eficiente. Esto nos ahorra el esfuerzo de
codificar un “solver” lineal cada vez que nosotros escribimos un nuevo programa.
Este método de relegar las tareas repetitivas a subrutinas previamente escritas y
reutilizables forma la idea de usar un computador para resolver problemas
técnicos complejos. Esto también nos permite tomar ventaja de décadas de
investigació n matemá tica que se han usado para desarrollar algoritmos numéricos
eficientes. Los programas científicos típicamente involucran secciones específicas
del problema que realizan la entrada de pará metros y la salida de resultados, otra
secció n transcribe el problema en una serie de sistemas algebraicos lineales y
luego el programa gasta la mayoría del tiempo de ejecució n en resolver estos
sistemas lineales. Este curso se enfoca primariamente en el entendimiento de la
teoría y los conceptos fundamentales para la computació n científica pero nosotros
también necesitamos conocer como trasladar estos conceptos en programas que
funcionen y luego combinar nuestro có digo del problema específico con las
subrutinas previamente escritas que eficientemente ejecutan las operaciones
numéricas deseadas.

¿Entonces, como le instruimos al computador para que resuelva nuestro problema


específico? En el nivel bá sico, todo lo que hace un computador es seguir
instrucciones que le dicen como retraer nú meros de localizaciones específicas de
memoria, realizar algunas operaciones algebraicas simples con esos nú meros y
almacenar los resultados numéricos en algunas (posiblemente nuevas)
localizaciones de memoria. En lugar de forzar a los usuarios del computador a
lidiar con detalles como direcciones de memoria o el paso de datos de memoria al
CPU, los científicos del computador han desarrollado un programa para cada tipo
de computador llamado compilador que traduce el có digo a nivel humano a un
conjunto de instrucciones detalladas a nivel de la má quina (contenidas en un
archivo ejecutable) que el computador ejecutará para realizar la tarea. Usando un
compilador, es fá cil , a manera de ejemplo, escribir un có digo que le diga al
computador que haga lo siguiente:

1. Encuentre un espacio en la memoria para almacenar un nú mero real x


2. Encuentre un espacio en la memoria para almacenar un nú mero real y
3. Encuentre un espacio en la memoria para almacenar un nú mero real z
4. Asigne el valor de x en 2
5. Asigne el valor de y en 4
6. Asigne el valor de z igual a 2*x + 3*y, donde el símbolo * significa
multiplicació n.

FORTRAN fue el primer lenguaje de programació n científico; su forma má s


divulgada en la actualidad es el FORTRAN 77; en este lenguaje usted puede realizar
estas tareas escribiendo el siguiente có digo:
REAL x, y, z
x=2
y=4
z = 2*x + 3*y

Este có digo, en si mismo, realiza la tarea solicitada pero no provee un medio para
que el usuario puede ver los resultados. Un programa completo en FORTRAN 77
que realice la tarea y escriba el resultado en la pantalla del computador es el
siguiente:

IMPLICIT NONE
REAL x, y, z
x=2
y=4
z = 2*x + 3*y
PRINT *, 'z = ',z
END

Cuando este có digo es compilado con un compilador de FORTRAN 77, el resultado


en la pantalla de este programa ejecutable es: z = 16.000. Los lenguajes de
programació n compilados permiten solo resultados simples de texto, nú meros y
datos binarios, de tal manera que cualquier grafica de los resultados debe
realizarse en un programa separado. En la prá ctica, el requisito de escribir el
có digo, almacenar el resultado en un archivo con un formato adecuado y leer este
archivo en un programa de aná lisis y grá ficas nos conduce, para proyectos
pequeñ os, a la utilizació n de software “enlatado” como el EXCEL, el cual es poco
ú til para la computació n científica rigurosa; después de todo, ¡EXCEL fue diseñ ado
para hojas electró nicas de negocios!

Existen otros lenguajes de programació n compilados, la gran mayoría son má s


poderosos que el FORTRAN 77, aunque este representa un gran legado del pasado
debido a la existencia de rutinas numéricas altamente eficientes escritas en este
lenguaje. Aunque FORTRAN 77 carece de la funcionalidad de los lenguajes má s
modernos, tiene la ventaja de tener una alta velocidad de ejecució n.

En las décadas de los 80 y los 90, los lenguajes C y C++ se volvieron muy populares
dentro de la amplia comunidad de la ciencia de la computació n debido a que ellos
permitían organizar y estructurar datos en forma má s conveniente, y escribir
có digo altamente modular para grandes programas. C y C++ nunca han ganado el
mismo nivel de popularidad dentro de la comunidad de la computació n científica,
debido principalmente a que su implementació n se ha enfocado principalmente
hacia la robustez y en menor grado hacia la velocidad de ejecució n. Muchos
programas científicos tienen comparativamente estructuras simples de tal manera
que la preocupació n principal en la computació n científica intensa es la velocidad
de ejecució n. Esta situació n ha cambiado algo en los ú ltimos tiempos; sin embargo,
la introducció n del FORTRAN 90 y su má s reciente actualizació n llamada
FORTRAN 95 le ha dado al lenguaje FORTRAN un nuevo aire de vida.

El FORTRAN 90/95 incluye muchas de las capacidades de estructura de datos


presentes en C/C++, pero fue escrito en mente para una audiencia técnica.
FORTRAN 90/95 es el lenguaje de escogencia para la computació n en paralelo, en
la cual las tareas son parceladas durante la ejecució n en uno o varios CPUs. Con la
popularidad creciente de las estaciones de trabajo con multiprocesadores y los
clusters tipo BEOWOLF, el FORTRAN 90/95 y sus variantes como el FORTRAN de
Alta Eficiencia es el lenguaje de mi preferencia para la computació n científica
intensa.

Entonces, ¿por qué este curso usa MATLAB in lugar del FORTRAN 90? FORTRAN
90 es mi preferido entre los lenguajes compilados; sin embargo, y desde el punto de
vista de la facilidad de uso, MATLAB, un lenguaje interpretado, es la selecció n para
trabajos pequeñ os y medianos. En los lenguajes compilados, los comandos a nivel
humano son convertidos directamente a instrucciones de má quina, las cuales son
almacenadas en un archivo ejecutable. El tiempo de ejecució n de los comandos no
toma lugar hasta que todo el proceso de compilació n has sido completado (el
tiempo de depuració n no está excluido). En un lenguaje compilado, uno necesita
aprender los comandos de entrada/salida de datos (del teclado, a la pantalla, desde
y hacia archivos), nombrar variables y apartar espacio para ellas en la memoria
(como el comando “real” en FORTRAN). En otras palabras, los lenguajes
compilados son desarrollados bajo el principio de que estos lenguajes deben tener
una cantidad mínima de comandos y sintaxis de tal manera que cualquier tarea
que pueda ser completada por una secuencia de las instrucciones má s bá sicas no
deben incorporarse en la definició n del lenguaje sino mas bien se deja para ser
ejecutadas en una subrutina. Las bibliotecas de subrutinas han sido escritas por la
comunidad de matemá ticas aplicadas para realizar las operaciones numéricas má s
comunes (ej. BLAS y LAPACK) y para acceder a ellas uno necesita unir su có digo
con el de ellas mediante el sistema operacional y comandos específicos. Mientras
que todo esto no es conceptualmente difícil, la carga extra no es insignificante aú n
para proyectos pequeñ os.

En un lenguaje interpretado, los desarrolladores del lenguaje han escrito y


compilado un programa master como en nuestro caso el programa MATLAB, el
cual interpreta nuestros comandos “al vuelo”. Cuando nosotros corremos MATLAB,
se nos ofrece una ventana en la cual nosotros podemos teclear comandos para
realizar cá lculos matemá ticos. Este có digo es luego interpretado línea a línea (por
medio de instrucciones a nivel de má quina) para ser convertido en otras
instrucciones a nivel de má quina las cuales ejecutará n los cá lculos que hemos
solicitado. Debido a que MATLAB tiene que interpretar uno a uno cada comando,
nosotros requerimos má s instrucciones a nivel de má quina para realizar un cierto
trabajo que las que se necesitan en un lenguaje compilado. Para simulaciones
numéricas demandantes, donde uno necesita usar los recursos de un computador
tan eficientemente como sea posible, entonces un lenguaje compilado es superior.

El uso de un lenguaje interpretado tiene el beneficio de no tener que compilar el


có digo antes de correrlo y usarlo. Por lo tanto nosotros podemos teclear uno a uno
nuestros comandos y mirar como ellos son ejecutados (esto es muy ú til para
encontrar errores). Nosotros no necesitamos acoplar nuestro có digo a las librerías
de subrutinas, puesto que MATLAB, siendo precompilado, tiene a la mano todas las
instrucciones a nivel de má quina que necesita. FORTRAN 77/90/95, C y C++ no
pueden hacer grá ficas, de tal manera que si necesitamos graficar unos resultados
de nuestro programa, nosotros tenemos que escribir los datos como un archivo
salida de tal manera que lo podamos usar como entrada en otro programa de
graficació n. A manera de contraste, los programadores de MATLAB han
suministrado rutinas de graficació n y las compilan junto con el có digo interpretado
de MATLAB, y de esta manera nosotros no necesitamos pasos adicionales de
transferencia de datos. Un lenguaje interpretado puede proveer un manejo de
servicios de memoria mas complejos y eficientes, pero su operació n detrá s de
bambalinas, aísla al programador de tener que aprender su sintaxis complicada de
uso. Por lo tanto, nuevas variables pueden ser creadas con una adjudicació n de
memoria diná mica sin que se requiera que el usuaria entienda los punteros (son
variables que apuntar las localizaciones de memoria), lo cual si es requerido
cuando se usan los lenguajes compilados. Finalmente, y puesto que MATLAB no fue
desarrollado con el principio de una sintaxis de comandos mínima, él contiene una
rica colecció n de operaciones numéricas integradas al programa. Algunas de estas
rutinas son diseñ adas para resolver problemas lineales en forma muy eficiente.
Otras rutinas operan a un nivel superior, por ejemplo tomando como entrada la
funció n f(x) y retornando el punto x0 de tal manera que f(x0)=0, o integrando la
ecuació n diferencial ordinaria dx/dt = f(x) a partir de un valor inicial de x a un
tiempo, t=0.
Por estas razones, uno puede codificar má s eficientemente en los lenguajes
interpretados que en los compilados, 1,2 pero se paga el costo de una ejecució n
má s lenta debido al paso extra de interpretar cada comando. Pero, como ya lo
hemos anotado anteriormente, la velocidad de ejecució n es una consideració n muy
importante en la computació n científica, de tal manera que la pregunta sería: ¿es
esto aceptable? MATLAB tiene varias características para aliviar esta situació n.
Toda vez que MATLAB corre por primera vez una subrutina, almacena los
resultados del proceso de interpretació n de tal manera que las llamadas
posteriores a esa subrutina no tienen que repetir este proceso. Adicionalmente,
uno puede reducir la carga extra de interpretació n minimizando el nú mero de
líneas de comando, esta prá ctica casualmente conduce a un buen estilo de
programació n en FORTRAN 90/95. Como ejemplo, tomemos la operació n de
multiplicar una matriz A de M x N por una matriz B de N x P para formar una
matriz C de M x P. En FORTRAN 77, nosotros tenemos que declarar y apartar
memoria para almacenar las matrices A, B y C (así como también los punteros
enteros para la fila i_row, la columna i_col y la variable i_mid), y luego talvez
ejecutar el siguiente có digo en una subrutina de FORTRAN 77:

DO i_row = 1, M
DO i_col = 1, N
C(i_row,i_col) = 0.0
DO i_mid = 1, P
C(i_row,i_col) = C(i_row,i_col) + A(i_row,i_mid)*B(i_mid,i_col)
ENDDO
ENDDO
ENDDO

Si nosotros simplemente traducimos línea por línea desde FORTRAN 77 a


MATLAB, entonces nosotros tendríamos el siguiente segmento de có digo en
MATLAB:
for i_row = 1:M
for i_col = 1:N
C(i_row,i_col) = 0;
for i_mid = 1:P
C(i_row,i_col) = C(i_row,i_col) + A(i_row,i_mid)*B(i_mid,i_col);
end
end
end

Este có digo realiza la tarea en exactamente la misma manera que FORTRAN 77,
pero ahora cada línea debe ser interpretada una a una, adicionando una
sobrecarga considerable. Esto nos permitiría concluir que nosotros estaríamos
mejor programando en FORTRAN 77; sin embargo, en MATLAB, el lenguaje es
extendido para permitir operaciones matriciales de tal manera que podemos
realizar la misma tarea con el simple comando:

C = A*B

Nosotros no tendríamos aú n que asignar memoria previamente para almacenar C,


ya que estos lo manejaría automá ticamente MATLAB. El enfoque de MATLAB es
ampliamente preferido no solo porque realiza la misma tarea con un menor
cantidad de escritura a má quina (bueno porque también disminuye el chance de
error). El có digo de FORTRAN 77, descansa en operaciones escalares bá sicas de
adició n y multiplicació n y no es fá cil para hacer computació n en paralelo. É l
instruye al computador para que realice la operació n de matrices con un orden
exacto de eventos que el computador esta restringido a seguir. Este simple
comando C = A*B realiza la misma tarea pero deja en libertad al computador para
que decida como la va a realizar en forma má s eficiente, por ejemplo, dividiendo el
problema a través de mú ltiples procesadores. Una de las ventajas de FORTRAN
90/95 sobre FORTRAN 77 es que permite estas operaciones matriciales; el
correspondiente có digo en FORTRAN 90/95 sería:

C = MATMUL(A,B)

De tal manera que escribir có digo á gil en MATLAB recompensa el mismo estilo de
programació n que permite FORTRAN 90/95 para producir có digo á gil que es fá cil
de implementar en programació n paralela.

MATLAB también viene con un compilador opcional que convierte el có digo


MATLAB en có digo C o C++ y lo puede compilar para produce un archivo
ejecutable por si solo. Por lo tanto, con MATLAB, nosotros podemos disfrutar de la
facilidad de un lenguaje interpretado y luego que el desarrollo del programa está
completo, nosotros podemos tomar ventaja de la ejecució n eficiente y de la
portabilidad ofrecida por los lenguajes compilados. Alternativamente, dada las
herramientas del compilador en MATLAB, nosotros podemos combinar có digo
MATLAB, con rutinas numéricas escritas en FORTRAN o C/C++. Dadas todas estas
ventajas, MATLAB parece ser una alternativa potente de lenguaje para un curso
introductorio en la computació n científica.

Tabla de contenido del tutorial de MATLAB

Este tutorial se presenta como una pá gina web separada para cada capítulo. La
lista de comandos en el tutorial son explicadas con un comentario que empieza por
el signo de porcentaje %. Estos comandos pueden ser tecleados o pegados uno a
uno desde la ventaja interactiva de MATLAB. Se puede obtener informació n
adicional acerca de un comando específico escribiendo la palabra help seguida del
nombre del comando. Escribiendo helpwin produce una utilidad de ayuda general
y helpdesk provee links para una documentació n extensa en línea. Para mayor
detalles, consulte los textos recomendados para lectura 3,4.

Bibliografia:
1.McConnell, Steve, Code Complete, Microsoft Press, 1993.
2.Jones, Capers, Programming Productivity, McGraw-Hill, 1986.
3.Trapad, Ruda, Getting Started with MATLAB: A Quick Introduction for Scientists and
Engineers, Oxford University Press, 2009.
4.Moore, Holly, Matlab for Engineers, Prentice Hall, 2011.

*Traducción del texto “MATLAB Tutorial, Kenneth Beers, Department of


Chemical Engineering, MIT, 2001”, http://ocw.mit.edu/courses/chemical-
engineering/10-34-numerical-methods-applied-to-chemical-engineering-
fall-2006/tools/tutorial00.pdf

También podría gustarte