MatLab - Guia para Alumnos de Reactores Quimicos

54
Nociones básicas de MatLab 7.0 Para la asignatura Reactores Químicos de 4º curso de Ingeniero Químico en la UGR Curso 2008/2009 Miguel García Román

Transcript of MatLab - Guia para Alumnos de Reactores Quimicos

Page 1: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0 Para la asignatura Reactores Químicos de

4º curso de Ingeniero Químico en la UGR

Curso 2008/2009

Miguel García Román

Page 2: MatLab - Guia para Alumnos de Reactores Quimicos
Page 3: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

3

Índice. 1. Primeros pasos con Matlab. 5

1.1. La pantalla de MatLab 5

2. Uso de operadores y realización de operaciones sencillas 6

2.1. Formato de los números en MatLab 6

2.2. Operaciones con escalares y funciones matemáticas básicas 7

2.3. Definición de variables escalares 8

3. Manejo de matrices (arrays) 8

3.1. Introducción manual de matrices 8

3.2. Manipulación y Operaciones con matrices. 10

4. Representaciones gráficas: El comando ‘plot’ 15

4.1. El comando plot. 15

4.2. Representación de gráficos a partir de funciones. 18

4.3. Representar varias funciones en el mismo gráfico. 18

4.4. Dar formato a los gráficos. 21

4.5. Escalas no lineales y gráficos especiales. 22

5. Ficheros de programa (script). 25

5.1. Ejecución de un fichero script: El directorio de trabajo actual. 25

5.2. Asignación de valores a las variables de un fichero script y comandos de salida. 26

5.3. Importación y exportación de datos. 27

6. Ficheros de función. 27

6.1. Creación de un fichero de función. 28

6.2. Variables Globales. 29

6.3. Funciones ‘inline’. 32

7. Programación en MatLab. 32

7.1. Operadores relacionales y operaciones lógicas. 33

7.2. Sentencias de programación. 35

8. Algunas aplicaciones importantes de MatLab. 37

8.1. Polinomios. 37

8.2. Ajuste de curvas. La función polyfit. 38

8.3. Interpolación. 39

8.4. Solución de ecuaciones de una variable. 40

8.5. Cálculo del máximo y mínimo de una función. 40

8.6. Integración numérica. 42

8.7. Resolución de ecuaciones diferenciales ordinarias. 42

Page 4: MatLab - Guia para Alumnos de Reactores Quimicos

4

Page 5: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

5

1. Primeros pasos con Matlab.

MatLab es un potente programa de cálculo cuyo nombre proviene de Matrix

Laboratory, lo que indica que trabaja con matrices como dato básico. El programa

posee una serie de funciones principales y otras accesorias, que van siendo

progresivamente desarrolladas, y que constituyen las denominadas “cajas de

herramientas” (“toolboxes”). A continuación se abordarán, de forma progresiva, los

aspectos principales que se necesitan para trabajar con este programa, hasta el nivel

que se precisa para cursar la asignatura de Reactores Químicos, correspondiente al 4º

de la titulación de Ingeniero Químico de la Universidad de Granada. 1.1. La pantalla de MatLab

La pantalla principal de MatLab cuenta con tres subventanas que por defecto estarán

presentes la primera vez que se abre el programa. Éstas son:

- Command Window, que es la que nos permite introducir las órdenes o

comandos en el programa.

- Command History Window, que muestra la secuencia de comandos ejecutados

- Current Directory Window/Workspace, muestra los programas presentes en el

directorio actual, aunque haciendo clic en la pestaña correspondiente situada

bajo la ventana, se muestran los valores de las variables que se hayan

asignado.

Además de éstas existen otras ventanas importantes:

- Figure Window, que muestra las figuras resultado de algún comando, y por

tanto aparece cuando se ejecutan éstos, aunque puede dejarse fija si se

desea.

Page 6: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

6

- Editor Window, que permite escribir programas (scripts), y se abre mediante

el Menú File (New → M-File).

Existe también una ventana de ayuda (Help Window), que se activa mediante la

tecla F1, y que resulta de gran utilidad, ya que dadas las amplísimas posibilidades

que ofrece MatLab, es imposible disponer de un manual que abarque todas ellas.

2. Uso de operadores y realización de operaciones sencillas

En primer lugar se dan una serie de normas generales de uso de la Ventana de

Comandos:

1) Cada comando es ejecutado cuando se pulsa Enter ( ), y el resultado se

visualiza en la pantalla, excepto que se escriba un punto y como (;) tras el

comando escrito, en cuyo caso el resultado se almacena, pero no se muestra.

2) Las flechas del cursor ( ) pueden usarse para volver a mostrar los comandos

anteriormente introducidos.

3) Se puede insertar un salto de línea introduciendo puntos suspensivos (‘…’) y

pulsando ‘ ’. Esto es útil para comandos largos.

4) El programa no procesa lo escrito tras símbolo ‘%’, por lo que este es muy útil

para escribir comentarios, sobre todo en programas (script).

5) El comando clc sirve para limpiar la ventana de comandos

2.1. Formato de los números en MatLab

El formato por defecto de los números en MatLab muestra sólo cuatro decimales

(formato short). A continuación se enumeran los principales formatos numéricos que

maneja MatLab. Hay que tener en cuenta que la forma en que MatLab realiza los

cálculos es independiente de cómo se muestran los resultados.

- Formato long: muestra hasta 14 decimales

- Formato short e/long e: análogos al short y al long, pero que usa siempre

notación científica.

- Formato short g y long g: elige la mejor opción entre short o short e y long o

long e.

El uso del formato short g es bastante recomendable, ya que emplea la notación

científica sólo cuando es necesario para visualizar el número.

Para cambiar entre los distintos formatos se puede usar el comando format (el

cambio sólo es válido para la presente sesión) o bien hacerlo desde el Menú

File→Preferences, en el apartado Command Window (el cambio se mantiene al

entrar y salir del programa).

A continuación se muestran algunos ejemplos de aplicación de estos formatos:

Page 7: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

7

>> format short

>> a=[1.5777889 0.0000005 548129453975]

a =

1.0e+011 *

0.0000 0.0000 5.4813

>> format short e

>> a=[1.5777889 0.0000005 548129453975]

a =

1.5778e+000 5.0000e-007 5.4813e+011

>> format short g

>> a=[1.5777889 0.0000005 548129453975]

a =

1.5778 5e-007 5.4813e+011

2.2. Operaciones con escalares y funciones matemáticas básicas

MatLab permite realizar operaciones con escalares de forma análoga a una

calculadora, usando los siguientes operadores:

Operador Operación Ejemplo

+ Suma 2+3 − Resta 2−3

Multiplicación 2 3

/ ó \ División 2/3 = 3\2 = 32

^ Potencia 2^3 = 23 = 8

Las operaciones pueden realizarse directamente con números, o bien con variables, a

las que previamente se les asigna un valor numérico (un escalar o una matriz).

Además MatLab dispone de una vastísima librería de funciones, algunas de las cuales

se abordarán con más detalle en estas notas. Sin embargo, en la siguiente Tabla se

recoge la forma de escribir en MatLab las funciones matemáticas elementales.

Page 8: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

8

Función Descripción

sqrt(x) raíz cuadrada exp(x) exponencial(ex) abs(x) valor absoluto log(x) logaritmo natural

log10(x) logaritmo decimal factorial(x) (factorial de x, x!)

2.3. Definición de variables escalares

La asignación de valores escalares es muy sencilla, como se ve en el siguiente

ejemplo que asigna el valor 15 a la variable x:

>> x=15

A partir de este momento es posible usar la variable x en cálculos sucesivos o como

argumento de funciones.

En cuanto al nombre de las variables, este puede tener hasta 63 caracteres, que

pueden ser letras, dígitos y el carácter de subrayado, si bien deben comenzar por

una letra. Hay que tener en cuenta que MatLab distingue mayúsculas de minúsculas.

Si se desea borrar alguna o todas las variables, se debe usar el comando clear,

especificando después el nombre de las variables a borrar. Si no se especifica nada,

las borra todas ellas.

3. Manejo de matrices (arrays)

MatLab maneja los datos siempre en forma de matrices. Éstas pueden ser

unidimensionales (vectores fila o columna) o bidimensionales (matrices propiamente

dichas). Los elementos de una matriz pueden ser números, variables predefinidas,

caracteres o funciones matemáticas.

3.1. Introducción manual de matrices

La forma más sencilla de introducir los elementos de una matriz, cuando éstos son

conocidos, es hacerlo manualmente mediante la ventana de comandos. Para ello

basta con escribirlos entre corchetes y separados por un espacio o coma (elementos

de una misma fila) o un punto y coma (elementos de diferentes filas), tal y como se

observa en los ejemplos siguientes:

>> A=[1 2 3]

A =

1 2 3

>> B=[1;2;3]

B =

1

2

3

Page 9: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

9

>> C=[1 2 3;4 5 6]

C =

1 2 3

4 5 6

Otra forma de introducir vectores es especificar el primer término (a), la diferencia

entre cada dos términos (d), que obviamente no puede variar, y el último término

(z), p. ej., x=[a:d:z]. Esto resulta útil para especificar, por ejemplo, los valores de

la variable independiente (x) para los cuales se representarán los valores

correspondientes de la variable dependiente (y).

>> x=[0:0.25:1]

x =

0 0.25 0.5 0.75 1

Es también posible crear un vector especificando el primer y el último elemento (a y

b, p. ej.), así como el número total de elementos del vector (n). La distancia entre

dos elementos sucesivos dependerá, evidentemente, del número total de términos

que deseemos. Para hacer esto se usa el comando linspace, de la forma siguiente:

x=linspace(a,b,n).

>> x=linspace(1,4,7)

x =

1 1.5 2 2.5 3 3.5 4

Si no se especifica el número de elementos se considera 100 por defecto.

Una vez introducida una matriz es conveniente conocer algunos comandos para

trabajar con ellas:

• Para obtener el elemento i-ésimo de un vector A, escribiremos A(i)

• Si es una matriz, tendremos que especificar tanto la fila como la columna en la

que se encuentra el elemento en cuestión. Así si se encuentra en la fila ‘i’ y en la

columna ‘j’, escribiremos: A(i,j)

• De esta forma es posible también asignar nuevos valores al elemento que

queramos, sin modificar el resto de la matriz.

• Si queremos especificar un rango de elementos de un vector o matriz, usaremos

“dos puntos”, de la siguiente manera:

i. A(m:n): Se refiere a los elementos comprendidos entre las posiciones

‘m’ a ‘n’ del vector A.

Page 10: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

10

ii. M(:,n): Se refiere a todos los elementos de la columna ‘n’ de la matriz

M.

iii. M(:,n:m): Se refiere a los elementos de las columnas ‘n’ a la ‘m’ de la

matriz M.

Lo anteriormente indicado para las columnas de una matriz, se puede hacer para las

filas, siendo las órdenes: M(n,:) y M(n:m,:). Además con esta misma notación es

posible añadir elementos a un vector, o filas o columnas a una matriz ya creada,

como en el siguiente ejemplo.

>> A=[1 2 3 4]

A =

1 2 3 4

>> A(5)=5

A =

1 2 3 4 5

>> M=[1 2 3;4 5 6]

M =

1 2 3

4 5 6

>> M(3:4,:)=[7 8 9;10 11 12]

M =

1 2 3

4 5 6

7 8 9

10 11 12

3.2. Manipulación y Operaciones con matrices.

Para trabajar con matrices disponemos de los siguientes operadores:

Page 11: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

11

Operador Función Comentario

’ Transposición Cambia las filas por columnas y viceversa

+ Suma

- Resta

Sirven para sumar y restar matrices, que deberán

tener el mismo número de filas y columnas, de

acuerdo con las reglas algebraicas de suma y resta

de matrices. También sirven para sumar o restar

un escalar a una matriz, en cuyo caso lo sumará o

restará a todos los elementos de la misma.

* Multiplicación

Efectúa el producto de matrices, siguiendo las

leyes algebraicas. Por ello las dimensiones de las

matrices a multiplicar serán: (m,n) * (n,p) = (m,p).

También permiten multiplicar un escalar por una

matriz, lo que implica hacerlo por cada uno de sus

elementos.

dot Producto escalar

Realiza el producto escalar de dos vectores.

dot(a,b) sería el producto escalar de los

vectores a y b, que deben ser dos vectores (fila o

columna) con el mismo número de elementos.

Equivale a la multiplicación matricial de un vector

fila x un vector columna del mismo número de

elementos.

^ Potencia Sólo se puede aplicar a matrices cuadradas. Un

caso particular es la potencia -1, que nos da la

matriz inversa, la cual también se puede obtener

mediante el comando inv(…)

inv(A) Inversa Devuelve la matriz inversa de A (es lo mismo que

A^-1)

det(A) Determinante Calcula el determinante de la matriz A (cuadrada)

/ División derecha A/B = A*inv(B)

Page 12: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

12

Operador Función Comentario

\ División izquierda A\B = inv(A)*B

eye(n) Matriz identidad Genera una matriz identidad de orden ‘n’

Las dos formas de división de matrices son útiles para resolver sistemas de

ecuaciones lineales. Por ejemplo, sea el sistema de ecuaciones lineales y su forma

matricial:

132521438

1023

=++=+−=−+

zyxzyx

zyx

⎥⎥⎥

⎢⎢⎢

⎡=

⎥⎥⎥

⎢⎢⎢

⎥⎥⎥

⎢⎢⎢

⎡−

132110

125438123

zyx

*

Su resolución en MatLab, de dos formas posibles:

>> A=[3 2 -1;8 -3 4;5 2 1];

>> B=[10;21;13];

>> x=inv(A)*B

x =

3.225

-0.7

-1.725

>> x=A\B

x =

3.225

-0.7

-1.725

Ahora bien, el anterior sistema también admite la siguiente forma matricial:

[ ] [ ]132110

141

232

583

=⎥⎥⎥

⎢⎢⎢

−−*zyx

En este caso su resolución en MatLab requeriría usar la división derecha:

Page 13: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

13

>> a=A'

a =

3 8 5

2 -3 2

-1 4 1

>> b=B'

b =

10 21 13

>> x=b*inv(a)

x =

3.225 -0.7 -1.725

>> x=b/a

x =

3.225 -0.7 -1.725

En este punto conviene aclarar que para entender las diferentes operaciones con

matrices que se han resumido en la tabla y ejemplos anteriores es necesario conocer

o recordar el álgebra matricial, acudiendo para ello a un texto general de

matemáticas.

A parte de las anteriores operaciones, MatLab también permite operar con las

matrices elemento a elemento. La operación elemento a elemento no sigue las

reglas del álgebra matricial, en lo que se refiere al producto y la división, ya que lo

que hace es operar con cada par de elementos de la matriz que ocupen la misma

posición. Por eso este tipo de operaciones sólo se pueden hacer con matrices de las

mismas dimensiones, tal y como sucede con la suma y resta algebraica de matrices.

Para que las operaciones de multiplicación, división y potenciación se realicen

elemento a elemento es necesario añadir un punto delante de los símbolos:

.* ./ .\ .^

En los siguientes ejemplos se muestra como aplicar las anteriores operaciones:

>> v=[1 2 3 4 5];

>> w=[2 2 2 2 2];

Page 14: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

14

>> k=v.*w

k =

2 4 6 8 10

>> y=v./w

y =

0.5 1 1.5 2 2.5

>> r=v.^2

r =

1 4 9 16 25

Las operaciones elemento a elemento son muy útiles para calcular los valores de una

función, y, para distintos valores de la variable/s independiente/s. Para ello se

aplica la función a un vector previamente definido, como en el ejemplo siguiente.

Luego podríamos usar ese conjunto de valores para hacer una representación gráfica

de la función en cuestión.

>> x=[1 2 3 4 5];

>> y=x.^2

y =

1 4 9 16 25

>> y=x.^2-5./x

y =

-4 1.5 7.3333 14.75 24

Las funciones predefinidas de MatLab también funcionan elemento a elemento

cuando se aplican a un vector, como en el siguiente ejemplo.

Esta operación sin el punto, conduciría a un error, al no ser x una matriz cuadrada

Page 15: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

15

>> a=[9 16 25];

>> b=sqrt(a)

b =

3 4 5

Además existe una serie de comandos que conviene conocer para trabajar con

matrices o vectores:

a) length(A): Devuelve el número de elementos del vector o matriz A

b) size(A): Devuelve un vector fila [m,n], donde m y n representan el

número de filas y columnas respectivamente de la matriz A.

c) max(A): Si A es un vector devuelve el elemento mayor.

d) min(A): Si A es un vector devuelve el elemento menor.

e) sort(A): Si A es un vector devuelve el mismo vector, pero ordenado

en orden ascendente.

f) mean(A): Si A es un vector devuelve la media de sus elementos.

g) median(A): Si A es un vector devuelve la mediana de sus elementos.

h) std(A): Si A es un vector devuelve la desviación estándar de sus

elementos.

Los anteriores comandos, cuyo uso se ha explicado sobre vectores, pueden también

ser aplicados sobe matrices, pero en ese caso realiza la operación correspondiente

sobre cada columna de la matriz, con lo que devuelve un vector.

4. Representaciones gráficas.

4.1. El comando plot.

La generación de gráficos en dos dimensiones en MatLab se lleva a cabo usando el

comando plot, cuya sintaxis es la siguiente:

plot(x,y, ‘especificadores de línea’, ‘propiedades’, ‘valores’)

• ‘x’ e ‘y’ son dos vectores con el mismo número de elementos, siendo el primero

de ellos el que contiene los valores de la variable x (eje de abscisas) y el segundo

de la variable y (eje de ordenadas), aunque sus nombres pueden ser cualesquiera.

Page 16: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

16

Al usar la sentencia anterior, MatLab abre la ‘ventana de gráfico’ y presenta un

gráfico x-y, en el que los puntos aparecen unidos por una línea continua.

• Los especificadores de línea son los argumentos que definen el tipo y aspecto de

la línea y/o marcador que se usará para la representación de los datos. En la

Tabla siguiente se resumen los más importantes:

Estilo línea Especif. Color Especif. Marcador Especif.

Continua - rojo r signo más +

Discontinua -- azul b círculo o

De puntos : magenta m asterisco *

Rayas y puntos -. verde g punto .

cian e cuadrado s

amarillo y diamante d

blanco w

estrella

de cinco

puntas

p

negro k

estrella

de seis

puntas

h

Para utilizar estos especificadores hay que hacerlo en la secuencia: ‘color →

Estilo de línea → Estilo de marcador’. Por ejemplo: ‘b-*’ dibujaría una línea

continua azul, con asteriscos azules como marcadores.

• Las Propiedades y Valores permiten modificar la apariencia de la curva o los

marcadores, actuando concretamente sobre el grosor de la línea, el tamaño de

los marcadores, el color de borde y de relleno de los marcadores. Por ejemplo, el

comando markerfacecolor permite modificar el color de relleno de los

marcadores. Se escribe cada propiedad entre comillas simples, y a continuación

su respectivo valor, separado por una coma, y también entre comillas simples. El

orden de las propiedades es indiferente. Mediante esta opción es posible indicar

también el color y estilo de la línea, tipo de marcador, etc., tal y como se

muestra en el ejemplo siguiente

A continuación se incluyen como ejemplo los comandos para representar dos gráficos

diferentes y las salidas correspondientes.

Page 17: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

17

>> %-Gráfico 1-%

>> anno=[1996:1:2005];

>> ventas=[523 587 669 854 901 1050 1043 1076 1115 1100];

>> plot(anno,ventas,'r-*')

>> plot(anno,ventas, 'color','r','marker','*','LineStyle','-'))

>> %- Gráfico 2 -%

>> x=[0:pi/16:2*pi];

>> y=sin(x);

>> plot(x,y,'r:')

1996 1997 1998 1999 2000 2001 2002 2003 2004 2005500

600

700

800

900

1000

1100

1200

Gráfico 1

0 1 2 3 4 5 6 7-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

Gráfico 2

Como puede apreciarse para realizar el Gráfico 1, que presenta la evolución anual de

las ventas de una empresa, simplemente se han introducido los dos vectores que

contiene los datos a representar (años y ventas). En el Gráfico 2 lo que se representa

Page 18: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

18

es la función seno. Para ello se ha creado un vector con valores de la variable x

comprendidos entre 0 y 2π, y luego se define el vector ‘y’ como el seno del vector x

(MatLab los calcula elemento a elemento). A continuación se representan y frente a

x.

4.2. Representación de gráficos a partir de funciones.

En el ejemplo anterior se ha usado el comando plot para representar una función,

lo que requiere calcular los valores de dicha función en el intervalo a representar,

como se ha visto.

Existe otra forma de representar funciones, que implica el uso del comando fplot.

La sintaxis del mismo es la siguiente:

fplot ('funcion', limites, especificadores de linea)

Un ejemplo de su uso puede verse a continuación, con su correspondiente salida.

>> %- Gráfico 3 -%

>> fplot('cos(x)',[0 2*pi],'g--')

0 1 2 3 4 5 6-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

Gráfico 3

4.3. Representar varias funciones en el mismo gráfico.

En muchas ocasiones se hace necesario representar varias funciones o curvas en el

mismo gráfico, o incluso incluir dos gráficos en la misma ventana gráfica. Para lo

primero, hay tres posibles opciones:

1) Usar el comando plot, colocando en los argumentos los datos y opciones de

representación de cada curva, una a continuación de la otra, tal y como se

muestra en el ejemplo:

Page 19: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

19

>> %- Gráfico 4 -%

>> anno=[2001:1:2005];

>> ingresos=[2000 3500 3750 3600 3800];

>> gastos=[2100 2800 2950 3000 3050];

>> plot(anno,ingresos,'g-o',anno,gastos,'r-.s')

2) Usando el comando plot para representar la primera curva, y luego

introduciendo la instrucción hold on para que mantenga dicho gráfico con los

mismos ejes y formatos, de modo que tantas nuevas instrucciones plot como

vayamos introduciendo, las presentará sobre el gráfico inicial. Si queremos

generar un nuevo gráfico habrá que usar el comando hold off antes de teclear

un nuevo plot.

>> %- Gráfico 4 -%

>> anno=[2001:1:2008];

>> ingresos=[2000 3500 3750 3600 3800 3900 3950 4000];

>> plot(anno,ingresos,'g-o')

>> gastos=[2100 2800 2950 3000 3050 3100 3600 3550];

>> hold on

>> plot(anno,gastos,'r-.s')

3) Mediante el comando line, que permite añadir curvas a un gráfico existente,

pero sin necesidad de usar el hold on. La sintaxis de line es parecida la de

plot, pero los atributos de color, tipo de marcador, estilo de línea, etc. han de

ponerse indicando la propiedad y su respectivo valor, es decir, de la misma

manera que con plot, pero line no admite especificadores de línea. También

permite construir un gráfico sin usar previamente plot.

>> %- Gráfico 4 -%

>> anno=[2001:1:2008];

>> ingresos=[2000 3500 3750 3600 3800 3900 3950 4000];

>> plot(anno,ingresos,'g-o')

Page 20: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

20

>> gastos=[2100 2800 2950 3000 3050 3100 3600 3550];

>> line(anno,gastos,'color','r','marker','s','LineStyle','-.')

Todas estas entradas darían lugar al siguiente gráfico:

2001 2002 2003 2004 2005 2006 2007 20082000

2200

2400

2600

2800

3000

3200

3400

3600

3800

4000

Gráfico 4

Cuando se trata de colocar varios gráficos en una misma ventana gráfica, pero

separados en subventanas, se utiliza el comando subplot, que permite indicar el

número de subventanas y la posición del gráfico a representar dentro de ellas. Su

sintaxis es:

subplot(m,n,p)

siendo m x n el número de subventanas (m filas y n columnas) y p la posición del

gráfico dentro de ellas, contando de arriba a abajo y de izquierda a derecha. A

continuación se incluye un ejemplo de su utilización.

>>%- Gráfico 5 -%

>> x=[1 2 3];

>> y=[1 2 3];

>> subplot(2,2,1)

>> hold on

>> plot(x,y)

Page 21: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

21

>> subplot(2,2,2)

>> plot(x,2*y)

>> subplot(2,2,3)

>> plot(x,y.^2)

>> subplot(2,2,4)

>> plot(x,y.^-2)

Que da lugar a la siguiente gráfica:

1 1.5 2 2.5 31

1.5

2

2.5

3

1 1.5 2 2.5 32

3

4

5

6

1 1.5 2 2.5 30

2

4

6

8

10

1 1.5 2 2.5 30

0.2

0.4

0.6

0.8

1

Gráfico 5

4.4. Dar formato a los gráficos.

Hasta ahora se ha visto como crear representaciones gráficas elementales y dado

formato a líneas y marcadores, pero no al resto del gráfico: título y escala de los

ejes, título del gráfico, leyenda, etc.

Existen comandos que permiten hacer esto, y que son de utilidad cuando el gráfico es

generado mediante un programa. Estos comandos no se han incluido en la presente

guía, pero se puede obtener mayor información sobre los mismos usando la ayuda del

MatLab (basta escribir “Annotating Plots” en el buscador). Además estas opciones

están también disponibles en la propia ventana gráfica que se despliega cada vez que

ejecutamos plot. Basta desplegar el editor de propiedades en el menú “View” y

hacer clic sobre cada una de las partes del gráfico, para que se desplieguen sus

Page 22: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

22

propiedades. Al gráfico número 6, que se muestra a continuación, se le ha dado

formato de esta manera.

0 2 4 6 8 10 12-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

x (radianes)

seno

(x)

sen(x)

Gráfico 6

4.5. Escalas no lineales y gráficos especiales.

Terminaremos este apartado describiendo brevemente la generación de gráficos

especiales y el uso de escalas logarítmicas y coordenadas polares.

A parte de los gráficos presentados hasta ahora, que representan puntos discretos y

líneas, MatLab permite también construir gráficos especiales, como los de barras,

sectores o histogramas. Para ello dispone de los comandos:

− Gráfico de barras verticales: bar(x,y)

− Gráfico de barras horizontales: barh(x,y)

− Gráfico de sectores: pie(x)

− Histogramas: hist(x)

A continuación se presentan algunos ejemplos de cada uno de estos gráficos.

>> anno=[2000:2003];

>> casos=[27 34 45 41];

>> bar(anno,casos,'r')

>> xlabel('año')

>> ylabel('nº de casos') 2000 2001 2002 20030

5

10

15

20

25

30

35

40

45

año

nº d

e ca

sos

Gráfico 7

Page 23: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

23

>> anno=[2000:2003];

>> casos=[27 34 45 41];

>> barh(anno,casos,'r')

>> xlabel('nº de casos')

>> ylabel('año') 0 5 10 15 20 25 30 35 40 45

2000

2001

2002

2003

nº de casos

año

Gráfico 8

>> ventas=[28 34 145 541];

>> pie(ventas)

4%5%

19%

72%

asturiananestlém.blancasdanone

Gráfico 9

>> x=[2 4 6 5 2 3 9 5 6 4 2

1 5 7 8 9 9 9 9 6 6 6 6 5 2

2 4 4 3 4 7 5 2 8 2 4 5 5 7

7 1 1 1 5];

>> hist(x)

>> hist(x,8)

8 es el número de intervalos en que divide el

rango de valores a representar.

1 2 3 4 5 6 7 8 90

2

4

6

8

10

12

nota

nº a

lum

nos

Gráfico 10

Otro aspecto interesante es el uso de escala logarítmica, muy utilizada para

linealizar ciertas relaciones. Para generar un gráfico con escala logarítmica (doble o

simple) se usan los comandos loglog(x,y), semilogx(x,y) ó semilogy(x,y),

donde x e y son los datos a representar.

Por ejemplo, para la función y = x1.5, la representación en escala lineal y doble

logarítmica sería:

Page 24: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

24

>> x=linspace(0,100,101);

>> y=x.^1.5;

>> plot(x,y)

0 20 40 60 80 1000

200

400

600

800

1000

x

y

Gráfico 11

>> loglog(x,y)

100 101 102100

101

102

103

x

y

Gráfico 12

A continuación se presenta un ejemplo de aplicación con ejes semilogarítmicos,

donde el uso de la escala logarítmica en el eje de ordenadas permite la obtención de

un representación lineal.

>> x=linspace(0,100,101);

>> y=5*exp(-x/25);>>

>> plot(x,y)

>> semilogy(x,y)

Por último se introduce el comando polar, que permite obtener gráficos en

coordenadas polares, y cuya sintaxis es:

polar (theta, radio, 'especificadores de linea')

>> t=linspace(0,2*pi,200);

>> r=cos(2*t);

>> polar(t,r,'r--') 0.2

0.4

0.6

0.8

1

30

210

60

240

90

270

120

300

150

330

180 0

Gráfico 13

Page 25: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

25

5. Ficheros de programa (script).

Hasta ahora hemos usado la ventana de comandos para introducir todas las

instrucciones en MatLab. Sin embargo, esto obliga a ir introduciendo las instrucciones

una a una, lo cual no es cómodo cuando se trata de un número elevado de ellas.

Para estos casos se recurre a escribir programas (“scripts”) que permiten, al

ejecutarse, introducir todas las instrucciones deseadas de una sola vez. Estos

programas pueden escribirse en el editor de MatLab (File → New → M-File) o en

cualquier editor de texto, y luego copiarse al editor de MatLab. Su extensión es .m.

Las primeras líneas de los mismos deben ser comentarios que expliquen brevemente

su función, y para guardarlos (en File → Save As…) se deben seguir las mismas

normas que con las variables a la hora de darles nombre. Además los nombres de los

ficheros no podrán ser iguales a los de ninguna de las variables definidas o a los de

alguna función o comando predefinidos de MatLab.

5.1. Ejecución de un fichero script: El directorio de trabajo actual.

Una vez guardado, para ejecutar un fichero script, basta con escribir su nombre en la

ventana de comandos de MatLab y pulsar la tecla Enter ( ). Es indispensable que el

fichero se haya guardado en el directorio de trabajo actual de MatLab (por ejemplo,

C:\MATLAB7\work), que es en el que el programa busca1 y guarda los ficheros. En

caso de que el fichero se encuentre en otro directorio, será necesario cambiar el

directorio actual (mediante la ‘Current Directory Window’) a aquel donde se haya

grabado el fichero que pretendemos ejecutar.

En la figura siguiente se muestra el fichero ej1, que representa la función y=exp(x)

entre 0 y 10.

icono ‘Run’

Otra forma de ejecutar un fichero script es mediante el icono ‘Run’, que se

encuentra en el editor de ficheros, como se muestra en la figura anterior.

1 Realmente MatLab busca en todos los directorios incluidos en el ‘Set Path’, de donde se pueden añadir y quitar las rutas, mediante el menú File → Set Path…

Page 26: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

26

5.2. Asignación de valores a las variables de un fichero script y comandos

de salida.

Las variables utilizadas en un fichero script son compartidas (variables globales) con

las que se introducen mediante la ventana de comandos. Esto quiere decir que es

posible asignarles un valor o bien dentro del propio fichero, como en el ejemplo 1, o

bien mediante la ventana de comandos. Lo primero nos evita tener que teclear cada

vez los valores de las variables, pero obliga a editar el m-file cada vez que queremos

modificar los valores de las variables. La asignación mediante la ventana de

comandos permite cambiar más fácilmente los valores, pero obliga a teclearlos cada

vez.

Otra posibilidad consiste en escribir una/s línea/s de código en el fichero script, para

que cada vez que lo ejecutemos nos pida el valor de alguna o todas las variables,

como se aprecia en el ejemplo 2.

En el ejemplo 2 se usa el comando input(‘mensaje’) para asignar la variable x.

De esta forma aparece en pantalla un texto (mensaje) preguntando al usuario el

valor que desea asignar a la variable.

Además se usa el comando disp, que es un comando de salida, para mostrar el

resultado. El comando disp puede servir para mostrar un texto, en cuyo caso

necesita las comillas simples, o bien puede usarse para mostrar el valor de una

variable, para lo que no deben usarse comillas, tal y como se muestra en el ejemplo

2. Cuando se usa disp para mostrar el valor de una variable sólo se visualiza dicho

valor, pero no el nombre de la variable.

Una limitación del comando disp es que no permite intercalar el valor de la variable

entre dos cadenas de texto. Para ello hay que recurrir a otro comando de salida,

fprintf, que además permite dar formato y grabar las salidas a un fichero. Mayor

información acerca de este comando, cuya sintaxis es más compleja, puede

encontrarse a través de la ayuda del MatLab.

Page 27: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

27

5.3. Importación y exportación de datos.

Es muy frecuente que en el tratamiento de datos con MatLab tengamos que importar

datos desde otros programas, como por ejemplo desde una hoja de cálculo de Excel,

o también que queramos volcar el resultado de los cálculos realizados con MatLab en

una hoja de cálculo de Excel.

Para la importación de datos MatLab cuenta con un asistente que facilita la labor, y

que es capaz de identificar datos en formatos diferentes. Para usar dicho asistente

debemos ir a la opción Import Data… del menú File.

Cuando se trata de datos que están en Excel, MatLab permite importarlos utilizando

un comando específico, xlsread, que tiene la ventaja de que podemos incluirlo en

un fichero script, e invocarlo mediante el mismo. La sintaxis de este comando es la

siguiente:

nombre_variable=xlsread('nombre_fichero','nombre_hoja','rango')

Los tres parámetros anteriores son cadenas de datos que representan el nombre del

fichero, la hoja correspondiente dentro del mismo, y el rango dentro de la hoja. El

rango debe indicarse de la forma B4:C16, según la notación usada por Excel. En

realidad sólo es imprescindible el nombre del fichero, ya que el comando actúa por

defecto sobre todos los datos numéricos que haya en la Hoja1.

Para exportar datos a Excel puede usarse el comando xlswrite, el cual tiene la

siguiente sintaxis:

xlswrite('nombre_fichero',nombre variable,'nombre_hoja','rango')

Los parámetros son análogos a los del comando xlsread. El archivo de Excel puede

ya existir, en cuyo caso pedirá confirmación para sobrescribir los datos (cosa que

sucederá si el rango especificado ya estaba ocupado con datos previos), o bien puede

ser creado mediante el mismo comando.

6. Ficheros de función.

Como se ha visto, MatLab cuenta con numerosas funciones predefinidas (sin(x),

factorial(x), exp(x), etc.) que pueden ser utilizadas simplemente escribiendo

su nombre en la ventana de comandos o en un fichero script. Sin embargo a veces es

necesario definir nuevas funciones, para lo cual se utilizan los ficheros de función.

Estos ficheros son realmente de script y contienen el código de la función, de modo

que una vez creados pueden ser invocados mediante la ventana de comandos, como

cualquier función predefinida de Matlab, o lo que es más importante, por medio de

otro fichero de programa, del que realmente constituyen un subprograma. Lo normal

Page 28: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

28

es que una función se utilice asignando su salida a una variable, como si se tratara de

una operación matemática (ver ejemplo en la página 27).

6.1. Creación de un fichero de función.

Tal y como se ha indicado los ficheros de función se crean como un fichero de script,

es decir, mediante el editor de MatLab u otro editor de textos, y luego se guardan

dándoles el mismo nombre que a la función y la extensión .m. Para poder ejecutarlos

deberán encontrarse en el directorio actual de trabajo de MatLab, como cualquier

fichero script.

Constan, obligatoriamente, de las siguientes partes:

1) Definición de la función: Ha de incluirse en la primera línea de texto ejecutable.

Tiene la siguiente estructura:

function [argumentos de salida] = nombre_función (argumentos de entrada)

I) La palabra ‘function’, en minúsculas, debe ser la primera que aparezca.

II) A continuación deben incluirse los argumentos de salida, es decir la/s

variable/s donde MatLab almacenará el resultado de los cálculos. Si son varios

deben ir separados por comas.

III) Después del signo igual se escribe el nombre de la función, con el que luego

se la invocará.

IV) A continuación del nombre se deben indicar el o los argumentos de entrada,

es decir, la/s variable/s cuyos valores hay que dar a la función para que

realice los cálculos u operaciones que posteriormente se especificarán. Si son

varios los argumentos, deben ir separados por comas.

2) Línea H1 y líneas de ayuda, se trata de líneas de comentario, es decir, van

detrás de el signo %, en las cuales se describe la función y como usarla. Son

opcionales, pero de gran utilidad. La línea H1 es la primera de las líneas, debe

contener una breve descripción de la función, y su peculiaridad es que a partir de

su contenido es posible hacer búsquedas en MatLab con el comando lookfor. El

resto de líneas deben explicar el uso de la función, qué son cada uno de los

argumentos de entrada y salida, etc. Cuando en MatLab se teclea Help

nombre_funcion, el contenido de estas líneas aparece.

3) Cuerpo de la función, que define las operaciones y cálculos a realizar con los

argumentos de entrada para obtener los argumentos de salida.

Page 29: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

29

A continuación se muestra un ejemplo de fichero de función. En el se ha definido la

función HCmolmass, la cual calcula el peso molecular de un hidrocarburo saturado

(alcano), al introducir su número de carbonos.

A continuación se muestra la entrada y salida en la ventana de comandos de MatLab

cuando se invoca a la función, así como cuando se usa el comando Help, para

obtener ayuda sobre ella.

>> PM_metano=HCmolmass(1)

PM_metano =

16

>> help HCmolmass

Función que calcula la masa molecular de un alcano a partir de su

número de carbonos

Para utilizarla basta introducir como argumento el número de carbonos

del hidrocarburo saturado (alcano) cuya masa molecular se pretende

calcular.

6.2. Variables Globales.

Cada función de MatLab usa una serie de variables (asignadas a los argumentos de

entrada y salida), de modo que, por defecto, los valores que se asignan a dichas

variables sólo son accesibles a la función en cuestión. Es decir, que estas variables,

que se denominan locales, sólo sirven para que se hagan los cálculos dentro de la

propia función, pero no es posible acceder a su valor desde la ventana de comandos o

por parte de un fichero script diferente. De hecho, la variable no aparece en el

Page 30: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

30

‘workspace’, como sucede con aquellas variables que se asignan directamente en la

ventana de comandos o por un fichero script, que no sea de función.

Cuando se desea que una variable generada por una función sea accesible desde un

programa diferente es necesario declarar dicha variable como global. Para ello hay

que colocar la sentencia:

global nombre_variable

tanto antes del cuerpo de la función como antes del código del programa que vaya a

utilizarla. Por ejemplo, si hacemos un pequeño programa (ej3.m) que muestre el

valor de las variables MW y n creadas por la función HCmolmass, este podría ser su

código.

Para que el programa tenga acceso a ambas variables ambas deben ser también

declaradas globales en el código de la función:

De esta forma, podríamos leer los valores de MW y n mediante el programa ej3, tal y

como se ve en las siguientes secuencias de comandos.

Page 31: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

31

>> PM_metano=HCmolmass(1)

PM_metano =

16

>> ej3

El valor de MW de un alcano es:

16

cuando el número de carbonos es igual a:

1

Sin embargo hay que ser muy cuidadoso a la hora de utilizar las variables globales, ya

que una vez su valor ha sido asignado al ejecutar la función por primera vez, ya no

cambia al ejecutar la función una segunda vez, lo que puede dar lugar a errores.

Véase a continuación lo que ocurriría si tras teclear el ejemplo anterior en la ventana

de comandos, intentamos usar la función HCmolmass para calcular el peso molecular

de un hidrocarburo de 2 carbonos.

>> PM_etano=HCmolmass(2)

Warning: The value of local variables may have been changed to

match the globals. Future versions of MATLAB will require that

you declare a variable to be global before you use that

variable.

> In HCmolmass at 6

PM_etano =

16

Como puede verse, la variable MW mantiene su valor anterior, e incluso el MatLab

advierte del posible error. Para poder aplicar nuevamente la función HCmolmass es

necesario borrar los valores de las variables globales, mediante el comando clear

global, tal como se ve a continuación, donde también se aprecia como se nos sigue

advirtiendo de un posible error.

>> clear global

>> PM_etano=HCmolmass(2)

Page 32: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

32

Warning: The value of local variables may have been changed to

match the globals. Future versions of MATLAB will require that

you declare a variable to be global before you use that

variable.

> In HCmolmass at 6

PM_etano =

30

6.3. Funciones ‘inline’.

En MatLab existe otra forma de definir funciones sin crear un fichero de función. Esta

forma se puede usar directamente en la ventana de comandos, o bien en el código de

un fichero script normal. Para ello se utiliza el comando inline, con la siguiente

sintaxis:

nombre = inline('expresión matematica')

El nombre de la función se pone en primer lugar, y a continuación, tras el comando

inline se coloca, escrita en forma de cadena, la expresión matemática que se debe

evaluar, como en el ejemplo siguiente:

>> raiz_cubica=inline('x^(1/3)')

raiz_cubica =

Inline function:

raiz_cubica(x) = x^(1/3)

>> r=raiz_cubica(27)

r =

3

Es posible definir funciones ‘inline’ con más de una variable, o aplicarlas a vectores o

matrices (usando las operaciones elemento a elemento). Para más información,

consultar la ayuda de MatLab.

7. Programación en MatLab.

Hasta ahora hemos escrito pequeños programas en MatLab, tanto en ficheros script,

como en ficheros función. Todos ellos eran muy simples y no permitían, por ejemplo,

fijar condición alguna a la hora de realizar los cálculos o repetirlos un número

Page 33: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

33

controlado de veces. Para ello MatLab dispone de sentencias de programación de tipo

condicional y de bucles, de forma similar a la mayoría de los lenguajes de

programación de propósito general. En este apartado revisaremos la sintaxis de

dichas sentencias, aunque comenzaremos repasando los operadores relacionales y las

operaciones lógicas en MatLab.

7.1. Operadores relacionales y operaciones lógicas.

En la Tabla siguiente se incluyen los operadores relacionales que se utilizan en

MatLab.

Operador relacional Descripción < Menor que. > Mayor que.

<= Menor o igual que. >= Mayor o igual que. == Igual a. ~= Distinto de.

Estos operadores se usan en operaciones lógicas, cuya salida es siempre un 1

(verdadero) o un 0 (falso), o una matriz de unos y/ó ceros, como puede verse en los

ejemplos siguientes.

>> A=1;

>> B=5;

>> r1=A<B

r1 =

1

>> r2=A>B

r2 =

0

>> C=[1 2 3 4 5];

>> D=[0 -3 6 4 8];

>> r3=C>D

r3 =

1 1 0 0 0

Page 34: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

34

Como puede verse las matrices o vectores se comparan elemento a elemento. Las

variables r1, r2 y r3 del ejemplo anterior son variables lógicas, a diferencia de A, B,

C ó D que son variables numéricas.

Es también importante conocer los operadores lógicos que podemos usar en MatLab,

que son los siguientes. Cuando se aplican a vectores o matrices, estos operadores

trabajan elemento a elemento.

• & (and): Compara dos escalares, vectores o matrices y devuelve el valor

verdadero (1) si los dos valores comparados son verdaderos (distintos de 0), y

falso (0) en caso contrario. Puede escribirse A&B ó and(A,B).

• | (or): Compara dos escalares, vectores o matrices y devuelve el valor

verdadero (1) si uno de los dos valores comparados o los dos son verdaderos

(distinto de 0), y falso (0) si los dos son falsos (0). Puede escribirse A|B ó

or(A,B).

• xor: Se diferencia de or en que en este caso sólo da verdadero si uno de los

elementos comparados es verdadero y el otro falso, pero da falso si los dos son

verdaderos.

• ~ (not): Se usa con un solo operando (escalar, vector o matriz) y devuelve otro

operando del mismo tipo con el valor verdadero (1) para cada elemento que sea

falso (0) y falso (0) para los elementos verdaderos (1). Puede escribirse ~A ó

not(A).

MatLab tiene además predefinidas una serie de funciones lógicas, que se enumeran a

continuación, y que pueden resultar de mucha utilidad:

• Función all: Aplicada a un vector, devuelve 1 (verdadero) si todos sus elementos

son distintos de 0, y devuelve 0 (falso) si alguno/s de los elementos del vector son

iguales a 0.

• Función any: Aplicada a un vector, devuelve 1 (verdadero) si alguno de sus

elementos es distinto de 0, y sólo devuelve 0 (falso), si todos los elementos son 0.

• Función find: Aplicada a un vector devuelve el índice de los elementos que son

distintos de 0. Es posible aplicarla usando operadores lógicos, de la forma

find(A>5), lo cual devolvería el índice de los elementos que sean mayores que

5 en el vector A.

Los operadores lógicos, junto con las funciones anteriores son muy útiles cuando se

comparan series de datos, como en el siguiente ejemplo, en el que se analizan las

notas de un grupo de alumnos, buscando los que tienen notable.

Page 35: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

35

>> notas=[5 6 4 8 3 9 2 4 6 8 9 9 5 6 7 7.5 4 7 7 8];

>> A=notas>=7;

>> B=notas<9;

>> C=A&B;

>> notables=find(C)

notables =

4 10 15 16 18 19 20

Como puede verse el vector ‘notables’ contiene los índices de los elementos del

vector ‘notas’ que son menores de 9 y mayores o iguales que 7, es decir que

corresponden a un notable. Si tenemos todos los nombres de los alumnos en un

vector, será muy fácil generar otro vector con los nombres de aquellos que tienen

notable.

7.2. Sentencias de programación.

Abordaremos a continuación la sintaxis de los principales tipos de sentencias de

programación en MatLab:

♦ Sentencias condicionales:

La sentencia if

Permiten ejecutar una serie de comandos si se verifican unas condiciones

previamente especificadas. La instrucción que se usa es ‘if … end’ según el

diagrama de flujo siguiente:

Detrás de if deben escribirse una serie de operaciones lógicas, del modo:

if a<b

if C==D

Page 36: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

36

if (d<h) & (x<7), etc.

Todas las variables que se empleen deben haber sido previamente asignadas.

También es frecuente que sea necesario usar una serie de instrucciones u otra

según se cumplan unas u otras condiciones. Para ello se emplean las estructuras

‘if … else … end’ o ‘if … else … elseif … end’, según el diagrama de

flujo siguiente:

Como puede verse la sentencia else nos permite elegir entre dos grupos de

instrucciones, y la sentencia elseif entre tres grupos, aunque, como pueden

usarse todas las elseif que queramos, realmente lo que nos permite es elegir

entre tantos grupos de instrucciones como queramos. En caso de usarse la

sentencia elseif no es obligatorio terminar con un else.

Existe además otra sentencia condicional, que es switch-case. Para más

información se puede consultar la ayuda de MatLab.

♦ Bucles:

Permiten ejecutar una instrucción o conjunto de ellas un número determinado de

veces. Los más importantes son los siguientes:

Bucle for-end

Su peculiaridad es que tenemos que conocer, desde el primer momento, el número

de veces que la instrucción se repetirá. La estructura del mismo es:

Page 37: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

37

for k = f:s:t ……… ……… (serie de comandos en MatLab) ……… end

k es la variable que se irá actualizando.

f es el primer valor que toma la variable k

s es el incremento de la variable k cada vez que se ejecuta la serie de comandos

comprendida entre for y end.

t es el valor máximo (o mínimo, si s es negativo) que alcanzará la variable k. Una

vez alcanzado, los comandos comprendidos entre for y end, no se ejecutarán más.

Bucle while-end

En este caso no se conoce el número exacto de ejecuciones de los comandos del

bucle que serán necesarias, por lo que éstos se ejecutarán mientras se cumpla una

determinada condición, que obviamente debe especificarse. Su estructura por tanto,

es:

while expresión_condicional ……… ……… (serie de comandos en MatLab) ……… end

Para que esta estructura funcione es imprescindible que al menos una de las

variables de la sentencia condicional cambie de valor cada vez que se ejecutan los

comandos.

La sentencia break puede usarse para romper un bucle, especialmente cuando éste

contenga sentencias condicionales. Cuando el MatLab llega a esta instrucción, salta

directamente a la sentencia end y da por terminado el bucle.

8. Algunas aplicaciones importantes de MatLab.

Hasta el momento hemos descrito los aspectos básicos del MatLab, por lo que,

aunque una descripción detallada de las posibilidades del programa no es factible ni

es nuestro objetivo, conviene para finalizar repasar algunas aplicaciones

particularmente útiles y frecuentes del mismo.

8.1. Polinomios.

En MatLab un polinomio se introduce como un vector fila, cuyos elementos son los

coeficientes del polinomio. Si el polinomio no contiene todos los términos (por

ejemplo, tiene el x3, pero no el x2), deberá ponerse un 0 en el lugar del coeficiente

correspondiente al término que falta.

Page 38: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

38

Para operar con polinomios existen algunas funciones predefinidas que merece la

pena conocer:

− polyval(p,x): Permite calcular el valor del polinomio p en el punto x. Si x es

un vector, generaría un conjunto de valores del polinomio, en vez de un único

valor.

− roots(p): Genera un vector con las raíces del polinomio p.

− polyder(p): Genera un vector con los coeficientes de la derivada del

polinomio p.

8.2. Ajuste de curvas. La función polyfit.

Es muy frecuente cuando se tratan datos experimentales que se plantee la necesidad

de ajustarlos a un polinomio o a otro tipo de función.

La función polyfit permite ajustar un conjunto de puntos a un polinomio de dos

formas diferentes. Su sintaxis es la siguiente:

polyfit(x,y,n)

El comando anterior calcula el polinomio de grado n que mejor ajusta el conjunto de

puntos cuyas coordenadas ‘x’ (variable independiente) e ‘y’ (variable dependiente)

vienen dadas por los vectores x e y respectivamente. El máximo grado será siempre

inferior en una unidad al número total de puntos a ajustar, es decir al número total

de elementos de los vectores x ó y. Hay que ser muy cauteloso cuando se usan

polinomios de alto grado que pasan por todos o casi todos los puntos, ya que en estos

casos se producen desviaciones muy importantes entre los puntos, como puede verse

en la imagen siguiente, donde se usan dos polinomios de grado diferente para ajustar

un conjunto de cinco puntos, mediante la función polyfit.

0 2 4 6 8 10 124

4.5

5

5.5

6

6.5

7

7.5

8

0 2 4 6 8 10 124

5

6

7

8

9

10

5 puntos – grado 4

p=polyfit(x,y,2) r=polyfit(x,y,4)

Page 39: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

39

La función polyfit también permite ajustar datos a otros tipos de funciones

básicas, siempre que previamente se linealicen éstas, como por ejemplo:

y=b·xn → log(y)=log(b)+n·log(x)

Para ajustar una serie de puntos (x,y) a una función potencial podríamos usar el

comando polyfit de esta forma:

p=polyfit(log(x),log(y),1)

8.3. Interpolación.

Cuando disponemos de una serie de datos en forma de puntos (x,y) podemos obtener

el valor de y para un x diferente, aunque normalmente dentro del rango de valores

de x conocidos. A esto se le llama interpolar. Para interpolar existen diferentes

métodos matemáticos, que suponen una determinada tendencia para la evolución de

los datos; por ejemplo, lo más sencillo es suponer que los valores varían linealmente

entre cada pareja de datos conocidos.

Para realizar interpolaciones en MatLab se usa la función interp1, que tiene la

siguiente sintaxis:

yi=interp1(x,y,xi,’metodo’)

x e y son las coordenadas de los puntos (datos) conocidos. xi son los valores de la

variable independiente x para los cuales deseamos conocer el correspondiente valor

de y (variable dependiente), que se almacenarán en el vector yi. Es también posible

especificar el método de interpolación. Los tres más importantes son:

− linear: supone un segmento lineal entre cada par de puntos.

− spline: supone un segmento polinómico cúbico entre cada par de puntos.

− pchip: utiliza interpolación de Hermite cúbica (también 'cubic').

En la siguiente figura se aprecian tres casos de interpolación con cada uno de los

métodos anteriores. La línea continua representa la función real a la que pertenecen

los puntos. La línea discontinua corresponde a los puntos interpolados.

linear spline pchip

Page 40: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

40

Además MatLab cuenta con un asistente para la interpolación mediante polinomios

de forma interactiva, permitiendo el cálculo de residuos y la comparación de

distintos ajustes con polinomios de diferente grado. Para usarla, una vez generado el

gráfico, hay que entrar en la herramienta Basic Fitting, en el menú Tool, de la

ventana de gráficos.

8.4. Solución de ecuaciones de una variable.

Toda ecuación de una variable, polinómica o no, puede ponerse en la forma f(x) = 0,

con lo que su solución es posible resolviendo dicha ecuación. Para ello MatLab cuenta

con la función fzero, cuya sintaxis es:

fzero(‘funcion’,x0)

El comando anterior devuelve un escalar x que satisface la igualdad f(x) = 0. Para

realizar este cálculo MatLab emplea métodos numéricos iterativos, de modo que hay

que suministrar un valor, x0, próximo a la solución esperada, para que comience las

iteraciones. La función que hay que poner como argumento puede ser una cadena de

texto o bien se la puede definir mediante un fichero de función. A continuación se

muestra un ejemplo, que nos permite resolver la ecuación ‘ x2 + 8 = ex ’

>> sol=fzero('x^2-exp(x)+8',0)

sol =

2.7421

Una buena forma de averiguar dónde una función tiene una solución, o simplemente

si la tiene, es realizar una representación gráfica de la función

8.5. Cálculo del máximo y mínimo de una función.

MatLab cuenta con una función para calcular el máximo o mínimo local de una

función de una variable. Se trata de fminbnd, que se usa de la siguiente forma:

fminbnd(‘funcion’,x1,x2)

El comando anterior devuelve el valor donde la función especificada alcanza el

mínimo, dentro del intervalo x1 ≤ x ≤ x2. Para visualizar el valore que toma la

función, hay que modificar ligeramente la sintaxis:

[x fval]=fminbnd(‘funcion’,x1,x2)

De esta forma el valor de la función en x se asigna a la variable fval.

Page 41: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

41

El valor mínimo de la función puede encontrarse dentro del intervalo (mínimo local)

o en los extremos del mismo (mínimo absoluto). MatLab siempre busca el mínimo

local, y luego lo compara con el valor de la función en los extremos del intervalo,

devolviendo el punto donde la función alcanza el menor valor, como se aprecia en el

siguiente ejemplo:

-10 -8 -6 -4 -2 0 2 4 6 8 10-5000

-4000

-3000

-2000

-1000

0

1000

x

f(x)

>> [x fx]=fminbnd('2.5*x^3-21*x^2+0.25*x-5',-10,10)

z =

-10

fx =

-4.6075e+003

>> [x fx]=fminbnd('2.5*x^3-21*x^2+0.25*x-5',0,10)

x =

5.5940

fx =

-223.1207

La función fminbnd se puede también usar para encontrar el máximo, para lo cual

basta aplicarla a la función multiplicada por −1.

Page 42: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

42

8.6. Integración numérica.

La integración es una operación muy frecuente en los cálculos científico-técnicos, y

en una gran cantidad de ocasiones no es posible realizarla analíticamente, sino que

es necesario usar la integración numérica, incluso porque lo que se conoce no es la

función a integrar (que además puede no ser integrable), sino una serie de puntos.

Para ello se pueden usar las siguientes funciones:

− quad ó quadl: Realiza la integración numérica de una función, y se debe usar

de la forma siguiente:

quad(‘funcion’,a,b)

siendo a y b los límites de integración y la función una cadena de texto o una

función existente en MatLab o predefinida por el usuario. La función siempre

debe escribirse de forma que permita realizar operaciones elemento a elemento,

ya que esta es la forma de calcular que usa MatLab. El comando quadl sólo se

diferencia del quad en la forma de calcular la integral, que es más precisa en

quadl que en quad.

− trapz: Realiza la integración numérica a partir de un conjunto de puntos, dado

por sus coordenadas x e y, de la forma:

trapz(x,y)

8.7. Resolución de ecuaciones diferenciales ordinarias.

MatLab posee numerosas herramientas de cálculo para abordar la resolución de

ecuaciones diferenciales, desde las más simples (ecuaciones diferenciales ordinarias

de primer orden, ODE) hasta casos más complejos y sistemas de ecuaciones

diferenciales. A continuación se describirán los pasos para resolver un caso sencillo

con las funciones predefinidas de MatLab.

I) Partiremos de una ecuación diferencial en la que se describe la evolución de una

variable dependiente (y) en función del tiempo (t). En general esa ecuación debe

ponerse en la forma general:

0 0 0( , ) ( )fdy f y t t t t y t ydt= ≤ ≤ =

La solución al problema será una función o más frecuentemente un conjunto de

valores de dicha función en el intervalo considerado.

Page 43: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

43

II) Una vez formulado el problema convenientemente, se debe crear un fichero de

función que calcule los diferentes valores de dy/dt según la ecuación diferencial

planteada, es decir, según f(t,y).

function [deriv]=ejemplo(t,y)

deriv = f(x,y)

III) A continuación hay que seleccionar el mejor método para hallar la solución.

MatLab dispone de diferentes funciones predefinidas para ODEs de primer orden,

que son aplicables en función del nivel de complejidad del problema. En la

siguiente tabla se resumen las más importantes:

Nombre de la función (método)

Descripción

ode45 Para ecuaciones no demasiado complejas. Obtiene la solución en un solo paso,ideal para intentar obtener una primera aproximación. Se basa en el método Runge-Kutta.

ode23 Para ecuaciones no demasiado complejas. Obtiene la solución en un solo paso. Está también basado en el método Runge-Kutta. Es más rápido pero menos preciso que el método ode45.

ode113 Para ecuaciones no demasiado complejas. Obtiene la solución en múltiples pasos.

ode15s Para ecuaciones complejas. Obtiene la solución en varios pasos. Se utiliza cuando ode45 falla.

ode23s Para ecuaciones complejas. Obtiene la solución en un solo paso. Permite resolver algunas ecuaciones que no puede resolver ode15.

ode23t Para ecuaciones de dificultad media.

ode23tb Para ecuaciones complejas. A veces más eficiente que ode15s.

Lo normal es utilizar el ode45, y si no da resultado recurrir a los demás,

empezando por el ode15s.

IV) Se resuelve el problema usando el método seleccionado:

[t,y]=nombre_metodo(‘funcion’,tspan,y0)

nombre_metodo puede ser cualquiera de los indicados en la tabla anterior.

‘funcion’ debe ser el nombre (cadena de texto) usado para designar a la

función generada en el paso II.

tspan es un vector que define el intervalo de valores de tiempo (o de la

variable independiente que sea) para el que se calculará la solución.

Page 44: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

44

Necesariamente tspan debe tener dos elementos, el punto inicial y final

[ti,tf], aunque lo normal es que se trate de un vector con todos los valores

de la variable independiente, t, para los cuales queremos conocer el valor de

la función y.

y0 es el valor de la función y para t0, que debe ser conocido.

[t y] es la solución, es decir, el conjunto de valores de la función y para

cada uno de los valores de t especificados mediante el vector tspan

A continuación se aplica la metodología descrita (pasos I a IV) a un problema sencillo:

La desactivación térmica de una enzima a 60ºC sigue una cinética de primer orden con una

constante de desactivación de 0.05 min-1. Se pide representar gráficamente su actividad residual

entre 0 y 60 minutos, considerando que dicha actividad representa el porcentaje sobre la

actividad a tiempo 0.

I) Se plantea el problema como una EDO de primer orden2:

0.05· 0 60 (0) 100dA A t Adt=− ≤ ≤ =

II) Se crea un fichero función que calcule los valores de dA/dt:

Como variables de entrada de la función se ponen t y a, lo que es necesario

para usar luego la función ode45, aunque en este caso dA/dt no es función

directa de t.

III) Usaremos el método ode45

IV) Resolvemos el problema mediante:

[t a]=ode45('desact',[0:1:60],100);

2 Al tratarse de una EDO muy sencilla se podría resolver integrando directamente la ecuación, pero lo haremos mediante los métodos numéricos que incorpora el MatLab.

Page 45: MatLab - Guia para Alumnos de Reactores Quimicos

Nociones básicas de MatLab 7.0

45

V) Por último representamos los valores de A frente al tiempo, mediante una

orden plot, lo que conduce a:

0 10 20 30 40 50 600

20

40

60

80

100

t, min.

A,%

Page 46: MatLab - Guia para Alumnos de Reactores Quimicos

46

Esta guía se basa en el libro “Matlab: Una

introducción con ejemplos prácticos”

de Amos Gilat, Ed. Reverté, Barcelona, 2006.

Este libro es traducción de la segunda

edición de la obra, publicada por John Wiley

& Sons, USA, 2005.

Page 47: MatLab - Guia para Alumnos de Reactores Quimicos

Notas

47

Page 48: MatLab - Guia para Alumnos de Reactores Quimicos

Notas

48

Page 49: MatLab - Guia para Alumnos de Reactores Quimicos

Notas

49

Page 50: MatLab - Guia para Alumnos de Reactores Quimicos

Notas

50

Page 51: MatLab - Guia para Alumnos de Reactores Quimicos

Notas

51

Page 52: MatLab - Guia para Alumnos de Reactores Quimicos

Notas

52

Page 53: MatLab - Guia para Alumnos de Reactores Quimicos

Notas

53

Page 54: MatLab - Guia para Alumnos de Reactores Quimicos

Notas

54