matlab - guia para alumnos de reactores quimicos
Post on 28-Jun-2015
1.046 Views
Preview:
TRANSCRIPT
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
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
4
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.
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:
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.
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
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.
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:
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)
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:
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];
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
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.
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.
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
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:
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')
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)
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
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
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:
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
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…
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.
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
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.
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
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.
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)
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
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
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.
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
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:
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.
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)
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
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.
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.
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.
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.
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.
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,%
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.
Notas
47
Notas
48
Notas
49
Notas
50
Notas
51
Notas
52
Notas
53
Notas
54
top related