Вы находитесь на странице: 1из 54

Nociones bsicas de MatLab 7.

0
Para la asignatura Reactores Qumicos de 4 curso de Ingeniero Qumico en la UGR Curso 2008/2009 Miguel Garca Romn

Nociones bsicas de MatLab 7.0

ndice.
1. Primeros pasos con Matlab. 1.1. La pantalla de MatLab 2. Uso de operadores y realizacin de operaciones sencillas 2.1. Formato de los nmeros en MatLab 2.2. Operaciones con escalares y funciones matemticas bsicas 2.3. Definicin de variables escalares 3. Manejo de matrices (arrays) 3.1. Introduccin manual de matrices 3.2. Manipulacin y Operaciones con matrices. 4. Representaciones grficas: El comando plot 4.1. El comando plot. 4.2. Representacin de grficos a partir de funciones. 4.3. Representar varias funciones en el mismo grfico. 4.4. Dar formato a los grficos. 4.5. Escalas no lineales y grficos especiales. 5. Ficheros de programa (script). 5.1. Ejecucin de un fichero script: El directorio de trabajo actual. 5.2. Asignacin de valores a las variables de un fichero script y comandos de salida. 5.3. Importacin y exportacin de datos. 6. Ficheros de funcin. 6.1. Creacin de un fichero de funcin. 6.2. Variables Globales. 6.3. Funciones inline. 7. Programacin en MatLab. 7.1. Operadores relacionales y operaciones lgicas. 7.2. Sentencias de programacin. 8. Algunas aplicaciones importantes de MatLab. 8.1. Polinomios. 8.2. Ajuste de curvas. La funcin polyfit. 8.3. Interpolacin. 8.4. Solucin de ecuaciones de una variable. 8.5. Clculo del mximo y mnimo de una funcin. 8.6. Integracin numrica. 8.7. Resolucin de ecuaciones diferenciales ordinarias. 5 5 6 6 7 8 8 8 10 15 15 18 18 21 22 25 25 26 27 27 28 29 32 32 33 35 37 37 38 39 40 40 42 42

Nociones bsicas de MatLab 7.0

1. Primeros pasos con Matlab.


MatLab es un potente programa de clculo cuyo nombre proviene de Matrix Laboratory, lo que indica que trabaja con matrices como dato bsico. 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 continuacin se abordarn, 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 Qumicos, correspondiente al 4 de la titulacin de Ingeniero Qumico de la Universidad de Granada.

1.1.

La pantalla de MatLab

La pantalla principal de MatLab cuenta con tres subventanas que por defecto estarn 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 pestaa correspondiente situada bajo la ventana, se muestran los valores de las variables que se hayan asignado.

Adems de stas existen otras ventanas importantes: Figure Window, que muestra las figuras resultado de algn comando, y por tanto aparece cuando se ejecutan stos, aunque puede dejarse fija si se desea.

Nociones bsicas de MatLab 7.0


Editor Window, que permite escribir programas (scripts), y se abre mediante el Men File (New M-File). Existe tambin una ventana de ayuda (Help Window), que se activa mediante la tecla F1, y que resulta de gran utilidad, ya que dadas las amplsimas posibilidades que ofrece MatLab, es imposible disponer de un manual que abarque todas ellas.

2. Uso de operadores y realizacin 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 lnea introduciendo puntos suspensivos () y pulsando . Esto es til para comandos largos. 4) El programa no procesa lo escrito tras smbolo %, 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 nmeros en MatLab

El formato por defecto de los nmeros en MatLab muestra slo cuatro decimales (formato short). A continuacin se enumeran los principales formatos numricos que maneja MatLab. Hay que tener en cuenta que la forma en que MatLab realiza los clculos es independiente de cmo se muestran los resultados. Formato long: muestra hasta 14 decimales Formato short e/long e: anlogos al short y al long, pero que usa siempre notacin cientfica. Formato short g y long g: elige la mejor opcin entre short o short e y long o long e. El uso del formato short g es bastante recomendable, ya que emplea la notacin cientfica slo cuando es necesario para visualizar el nmero. Para cambiar entre los distintos formatos se puede usar el comando format (el cambio slo es vlido para la presente sesin) o bien hacerlo desde el Men FilePreferences, en el apartado Command Window (el cambio se mantiene al entrar y salir del programa). A continuacin se muestran algunos ejemplos de aplicacin de estos formatos:

Nociones bsicas de MatLab 7.0


>> 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 matemticas bsicas

MatLab permite realizar operaciones con escalares de forma anloga a una calculadora, usando los siguientes operadores: Operador Operacin Suma Resta Multiplicacin Divisin Potencia Ejemplo 2+3 23 2 3 2/3 = 3\2 =

+ /\ ^

2 3

2^3 = 23 = 8

Las operaciones pueden realizarse directamente con nmeros, o bien con variables, a las que previamente se les asigna un valor numrico (un escalar o una matriz). Adems MatLab dispone de una vastsima librera de funciones, algunas de las cuales se abordarn con ms detalle en estas notas. Sin embargo, en la siguiente Tabla se recoge la forma de escribir en MatLab las funciones matemticas elementales.

Nociones bsicas de MatLab 7.0


Funcin sqrt(x) exp(x) abs(x) log(x) log10(x) factorial(x) Descripcin raz cuadrada exponencial(ex) valor absoluto logaritmo natural logaritmo decimal (factorial de x, x!)

2.3.

Definicin de variables escalares

La asignacin 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 clculos sucesivos o como argumento de funciones. En cuanto al nombre de las variables, este puede tener hasta 63 caracteres, que pueden ser letras, dgitos y el carcter de subrayado, si bien deben comenzar por una letra. Hay que tener en cuenta que MatLab distingue maysculas de minsculas. Si se desea borrar alguna o todas las variables, se debe usar el comando clear, especificando despus 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 nmeros, variables predefinidas, caracteres o funciones matemticas.

3.1.

Introduccin manual de matrices

La forma ms 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 B = 1 2 3 2 3 >> B=[1;2;3]

Nociones bsicas de MatLab 7.0


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

Otra forma de introducir vectores es especificar el primer trmino (a), la diferencia entre cada dos trminos (d), que obviamente no puede variar, y el ltimo trmino (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 representarn los valores correspondientes de la variable dependiente (y).
>> x=[0:0.25:1] x = 0 0.25 0.5 0.75 1

Es tambin posible crear un vector especificando el primer y el ltimo elemento (a y b, p. ej.), as como el nmero total de elementos del vector (n). La distancia entre dos elementos sucesivos depender, evidentemente, del nmero total de trminos 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 nmero 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 cuestin. As si se encuentra en la fila i y en la columna j, escribiremos: A(i,j) De esta forma es posible tambin 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 bsicas de MatLab 7.0


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,:). Adems con esta misma notacin es posible aadir 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 >> A(5)=5 A = 1 2 3 4 5 2 3 4

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

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

3.2.

Manipulacin y Operaciones con matrices.

Para trabajar con matrices disponemos de los siguientes operadores:

10

Nociones bsicas de MatLab 7.0

Operador

Funcin Transposicin

Comentario Cambia las filas por columnas y viceversa Sirven para sumar y restar matrices, que debern tener el mismo nmero de filas y columnas, de acuerdo con las reglas algebraicas de suma y resta de matrices. Tambin sirven para sumar o restar

Suma

Resta

un escalar a una matriz, en cuyo caso lo sumar o restar a todos los elementos de la misma. Efecta el producto de matrices, siguiendo las leyes algebraicas. Por ello las dimensiones de las matrices a multiplicar sern: (m,n) * (n,p) = (m,p). Tambin permiten multiplicar un escalar por una matriz, lo que implica hacerlo por cada uno de sus elementos. Realiza el producto escalar de dos vectores. dot(a,b) sera el producto escalar de los vectores a y b, que deben ser dos vectores (fila o

Multiplicacin

dot

Producto escalar

columna) con el mismo nmero de elementos. Equivale a la multiplicacin matricial de un vector fila x un vector columna del mismo nmero de elementos.

Potencia

Slo se puede aplicar a matrices cuadradas. Un caso particular es la potencia -1, que nos da la matriz inversa, la cual tambin 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 Divisin derecha

Calcula el determinante de la matriz A (cuadrada) A/B = A*inv(B)

11

Nociones bsicas de MatLab 7.0


Operador \ eye(n) Funcin Divisin izquierda Matriz identidad A\B = inv(A)*B Genera una matriz identidad de orden n Comentario

Las dos formas de divisin de matrices son tiles para resolver sistemas de ecuaciones lineales. Por ejemplo, sea el sistema de ecuaciones lineales y su forma matricial:

3 x + 2 y z = 10 8 x 3 y + 4 z = 21 5 x + 2 y + z = 13

3 2 1 x 10 8 3 4 * y = 21 5 2 1 z 13

Su resolucin 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 tambin admite la siguiente forma matricial:

[x

3 8 5 z ]* 2 3 2 = [10 21 13] 1 4 1

En este caso su resolucin en MatLab requerira usar la divisin derecha:

12

Nociones bsicas de MatLab 7.0


>> a=A' a = 3 2 -1 >> b=B' b = 10 21 13 8 -3 4 5 2 1

>> x=b*inv(a) x = 3.225 >> x=b/a x = 3.225 -0.7 -1.725 -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 matemticas. A parte de las anteriores operaciones, MatLab tambin permite operar con las matrices elemento a elemento. La operacin elemento a elemento no sigue las reglas del lgebra matricial, en lo que se refiere al producto y la divisin, ya que lo que hace es operar con cada par de elementos de la matriz que ocupen la misma posicin. Por eso este tipo de operaciones slo 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 multiplicacin, divisin y potenciacin se realicen elemento a elemento es necesario aadir un punto delante de los smbolos: .* ./ .\ .^

En los siguientes ejemplos se muestra como aplicar las anteriores operaciones: >> v=[1 2 3 4 5]; >> w=[2 2 2 2 2];

13

Nociones bsicas de MatLab 7.0


>> k=v.*w k = 2 >> y=v./w y = 0.5 >> r=v.^2 r = 1 4 9 16 25 1 1.5 2 2.5 4 6 8 10

Las operaciones elemento a elemento son muy tiles para calcular los valores de una funcin, y, para distintos valores de la variable/s independiente/s. Para ello se aplica la funcin a un vector previamente definido, como en el ejemplo siguiente. Luego podramos usar ese conjunto de valores para hacer una representacin grfica de la funcin en cuestin. >> x=[1 2 3 4 5]; >> y=x.^2 y = 1 4 9 16 25
Esta operacin sin el punto, conducira a un error, al no ser x una matriz cuadrada

>> y=x.^2-5./x y = -4 1.5 7.3333 14.75 24

Las funciones predefinidas de MatLab tambin funcionan elemento a elemento cuando se aplican a un vector, como en el siguiente ejemplo.

14

Nociones bsicas de MatLab 7.0


>> a=[9 16 25]; >> b=sqrt(a) b = 3 4 5

Adems existe una serie de comandos que conviene conocer para trabajar con matrices o vectores: a) b) length(A): Devuelve el nmero de elementos del vector o matriz A size(A): Devuelve un vector fila [m,n], donde m y n representan el nmero de filas y columnas respectivamente de la matriz A. c) d) e) max(A): Si A es un vector devuelve el elemento mayor. min(A): Si A es un vector devuelve el elemento menor. sort(A): Si A es un vector devuelve el mismo vector, pero ordenado en orden ascendente. f) g) h) mean(A): Si A es un vector devuelve la media de sus elementos. median(A): Si A es un vector devuelve la mediana de sus elementos. std(A): Si A es un vector devuelve la desviacin estndar de sus elementos. Los anteriores comandos, cuyo uso se ha explicado sobre vectores, pueden tambin ser aplicados sobe matrices, pero en ese caso realiza la operacin correspondiente sobre cada columna de la matriz, con lo que devuelve un vector.

4. Representaciones grficas.
4.1. El comando plot.
La generacin de grficos en dos dimensiones en MatLab se lleva a cabo usando el comando plot, cuya sintaxis es la siguiente: plot(x,y, especificadores de lnea, propiedades, valores) x e y son dos vectores con el mismo nmero 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.

15

Nociones bsicas de MatLab 7.0


Al usar la sentencia anterior, MatLab abre la ventana de grfico y presenta un grfico x-y, en el que los puntos aparecen unidos por una lnea continua.

Los especificadores de lnea son los argumentos que definen el tipo y aspecto de la lnea y/o marcador que se usar para la representacin de los datos. En la Tabla siguiente se resumen los ms importantes: Estilo lnea Continua Discontinua De puntos Rayas y puntos Especif. -: -. Color rojo azul magenta verde cian amarillo blanco Especif. r b m g e y w Marcador signo ms crculo asterisco punto cuadrado diamante estrella de cinco puntas estrella negro k de seis puntas h p Especif. + o * . s d

Para utilizar estos especificadores hay que hacerlo en la secuencia: color Estilo de lnea Estilo de marcador. Por ejemplo: b-* dibujara una lnea 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 lnea, el tamao 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 continuacin su respectivo valor, separado por una coma, y tambin entre comillas simples. El orden de las propiedades es indiferente. Mediante esta opcin es posible indicar tambin el color y estilo de la lnea, tipo de marcador, etc., tal y como se muestra en el ejemplo siguiente A continuacin se incluyen como ejemplo los comandos para representar dos grficos diferentes y las salidas correspondientes.

16

Nociones bsicas de MatLab 7.0


>> %-Grfico 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','-')) >> %- Grfico 2 -% >> x=[0:pi/16:2*pi]; >> y=sin(x); >> plot(x,y,'r:')

1200

1100

1000

900

800

700

600

500 1996

1997

1998

1999

2000

2001

2002

2003

2004

2005

Grfico 1
1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 0 1 2 3 4 5 6 7

Grfico 2 Como puede apreciarse para realizar el Grfico 1, que presenta la evolucin anual de las ventas de una empresa, simplemente se han introducido los dos vectores que contiene los datos a representar (aos y ventas). En el Grfico 2 lo que se representa 17

Nociones bsicas de MatLab 7.0


es la funcin 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 continuacin se representan y frente a x.

4.2.

Representacin de grficos a partir de funciones.

En el ejemplo anterior se ha usado el comando plot para representar una funcin, lo que requiere calcular los valores de dicha funcin 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 continuacin, con su correspondiente salida. >> %- Grfico 3 -% >> fplot('cos(x)',[0 2*pi],'g--')

1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 0 1 2 3 4 5 6

Grfico 3

4.3.

Representar varias funciones en el mismo grfico.

En muchas ocasiones se hace necesario representar varias funciones o curvas en el mismo grfico, o incluso incluir dos grficos en la misma ventana grfica. Para lo primero, hay tres posibles opciones: 1) Usar el comando plot, colocando en los argumentos los datos y opciones de representacin de cada curva, una a continuacin de la otra, tal y como se muestra en el ejemplo:

18

Nociones bsicas de MatLab 7.0


>> %- Grfico 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 instruccin hold on para que mantenga dicho grfico con los mismos ejes y formatos, de modo que tantas nuevas instrucciones plot como vayamos introduciendo, las presentar sobre el grfico inicial. Si queremos generar un nuevo grfico habr que usar el comando hold off antes de teclear un nuevo plot. >> %- Grfico 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 aadir curvas a un grfico 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 lnea, 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 lnea. Tambin permite construir un grfico sin usar previamente plot. >> %- Grfico 4 -% >> anno=[2001:1:2008]; >> ingresos=[2000 3500 3750 3600 3800 3900 3950 4000]; >> plot(anno,ingresos,'g-o')

19

Nociones bsicas de MatLab 7.0


>> gastos=[2100 2800 2950 3000 3050 3100 3600 3550]; >> line(anno,gastos,'color','r','marker','s','LineStyle','-.')

Todas estas entradas daran lugar al siguiente grfico:


4000 3800 3600 3400 3200 3000 2800 2600 2400 2200 2000 2001 2002 2003 2004 2005 2006 2007 2008

Grfico 4
Cuando se trata de colocar varios grficos en una misma ventana grfica, pero separados en subventanas, se utiliza el comando subplot, que permite indicar el nmero de subventanas y la posicin del grfico a representar dentro de ellas. Su sintaxis es: subplot(m,n,p) siendo m x n el nmero de subventanas (m filas y n columnas) y p la posicin del grfico dentro de ellas, contando de arriba a abajo y de izquierda a derecha. A continuacin se incluye un ejemplo de su utilizacin. >>%- Grfico 5 -% >> x=[1 2 3]; >> y=[1 2 3]; >> subplot(2,2,1) >> hold on >> plot(x,y)

20

Nociones bsicas de MatLab 7.0


>> 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 grfica:
3 2.5 2 1.5 1 1 1.5 2 2.5 3 6 5 4 3 2 1 1.5 2 2.5 3

10 8 6 4 2 0 1 1.5 2 2.5 3

1 0.8 0.6 0.4 0.2 0 1 1.5 2 2.5 3

Grfico 5 4.4. Dar formato a los grficos.

Hasta ahora se ha visto como crear representaciones grficas elementales y dado formato a lneas y marcadores, pero no al resto del grfico: ttulo y escala de los ejes, ttulo del grfico, leyenda, etc. Existen comandos que permiten hacer esto, y que son de utilidad cuando el grfico es generado mediante un programa. Estos comandos no se han incluido en la presente gua, pero se puede obtener mayor informacin sobre los mismos usando la ayuda del MatLab (basta escribir Annotating Plots en el buscador). Adems estas opciones estn tambin disponibles en la propia ventana grfica 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 grfico, para que se desplieguen sus

21

Nociones bsicas de MatLab 7.0


propiedades. Al grfico nmero 6, que se muestra a continuacin, se le ha dado formato de esta manera.
1 0.8 0.6 0.4 0.2 seno(x) 0 -0.2 -0.4 -0.6 -0.8 -1 0 2 4 6 x (radianes) 8 10 12 sen(x)

Grfico 6

4.5.

Escalas no lineales y grficos especiales.

Terminaremos este apartado describiendo brevemente la generacin de grficos especiales y el uso de escalas logartmicas y coordenadas polares. A parte de los grficos presentados hasta ahora, que representan puntos discretos y lneas, MatLab permite tambin construir grficos especiales, como los de barras, sectores o histogramas. Para ello dispone de los comandos: Grfico de barras verticales: bar(x,y) Grfico de barras horizontales: barh(x,y) Grfico de sectores: pie(x) Histogramas: hist(x)

A continuacin se presentan algunos ejemplos de cada uno de estos grficos. >> anno=[2000:2003];
n de casos
45 40 35 30 25 20 15 10 5

>> casos=[27 34 45 41]; >> bar(anno,casos,'r') >> xlabel('ao') >> ylabel('n de casos')

2000

2001

ao

2002

2003

Grfico 7

22

Nociones bsicas de MatLab 7.0


>> anno=[2000:2003]; >> casos=[27 34 45 41]; >> barh(anno,casos,'r') >> xlabel('n de casos')
2000

2003

2002

ao
2001 0

>> ylabel('ao')

10

15

n de casos

20

25

30

35

40

45

Grfico 8 >> ventas=[28 34 145 541]; >> pie(ventas)


19% 5% 4%
asturiana nestl m.blancas danone

72%

Grfico 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


n alumnos
12 10 8 6 4 2 0 1

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 nmero de intervalos en que divide el rango de valores a representar.

nota

Grfico 10

Otro aspecto interesante es el uso de escala logartmica, muy utilizada para linealizar ciertas relaciones. Para generar un grfico con escala logartmica (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 funcin y = x1.5, la representacin en escala lineal y doble logartmica sera:

23

Nociones bsicas de MatLab 7.0


>> x=linspace(0,100,101); >> y=x.^1.5;
y
1000 800 600 400 200 0 0

>> plot(x,y)

20

40

60

80

100

Grfico 11 >> loglog(x,y)


10
3

10

y
10
1

10 0 10

10

10

Grfico 12 A continuacin se presenta un ejemplo de aplicacin con ejes semilogartmicos, donde el uso de la escala logartmica en el eje de ordenadas permite la obtencin de un representacin 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 grficos 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--')
180 150 90 120 1 0.8 0.6 0.4 0.2 0 30 60

210

330

240 270

300

Grfico 13

24

Nociones bsicas de MatLab 7.0

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 cmodo cuando se trata de un nmero 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 extensin es .m. Las primeras lneas de los mismos deben ser comentarios que expliquen brevemente su funcin, y para guardarlos (en File Save As) se deben seguir las mismas normas que con las variables a la hora de darles nombre. Adems los nombres de los ficheros no podrn ser iguales a los de ninguna de las variables definidas o a los de alguna funcin o comando predefinidos de MatLab.

5.1.

Ejecucin 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 funcin 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 aadir y quitar las rutas, mediante el men File Set Path

25

Nociones bsicas de MatLab 7.0 5.2. Asignacin 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 asignacin mediante la ventana de comandos permite cambiar ms fcilmente los valores, pero obliga a teclearlos cada vez. Otra posibilidad consiste en escribir una/s lnea/s de cdigo 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. Adems 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 slo se visualiza dicho valor, pero no el nombre de la variable. Una limitacin 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 adems permite dar formato y grabar las salidas a un fichero. Mayor informacin acerca de este comando, cuya sintaxis es ms compleja, puede encontrarse a travs de la ayuda del MatLab.

26

Nociones bsicas de MatLab 7.0 5.3. Importacin y exportacin 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 clculo de Excel, o tambin que queramos volcar el resultado de los clculos realizados con MatLab en una hoja de clculo de Excel. Para la importacin 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 opcin Import Data del men File. Cuando se trata de datos que estn en Excel, MatLab permite importarlos utilizando un comando especfico, 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 parmetros 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, segn la notacin usada por Excel. En realidad slo es imprescindible el nombre del fichero, ya que el comando acta por defecto sobre todos los datos numricos 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 parmetros son anlogos a los del comando xlsread. El archivo de Excel puede ya existir, en cuyo caso pedir confirmacin 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 funcin.
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 funcin. Estos ficheros son realmente de script y contienen el cdigo de la funcin, de modo que una vez creados pueden ser invocados mediante la ventana de comandos, como cualquier funcin predefinida de Matlab, o lo que es ms importante, por medio de otro fichero de programa, del que realmente constituyen un subprograma. Lo normal

27

Nociones bsicas de MatLab 7.0


es que una funcin se utilice asignando su salida a una variable, como si se tratara de una operacin matemtica (ver ejemplo en la pgina 27).

6.1.

Creacin de un fichero de funcin.

Tal y como se ha indicado los ficheros de funcin se crean como un fichero de script, es decir, mediante el editor de MatLab u otro editor de textos, y luego se guardan dndoles el mismo nombre que a la funcin y la extensin .m. Para poder ejecutarlos debern encontrarse en el directorio actual de trabajo de MatLab, como cualquier fichero script. Constan, obligatoriamente, de las siguientes partes: 1) Definicin de la funcin: Ha de incluirse en la primera lnea de texto ejecutable. Tiene la siguiente estructura:

function [argumentos de salida] = nombre_funcin (argumentos de entrada)


I) La palabra function, en minsculas, debe ser la primera que aparezca. II) A continuacin deben incluirse los argumentos de salida, es decir la/s variable/s donde MatLab almacenar el resultado de los clculos. Si son varios deben ir separados por comas. III) Despus del signo igual se escribe el nombre de la funcin, con el que luego se la invocar. IV) A continuacin del nombre se deben indicar el o los argumentos de entrada, es decir, la/s variable/s cuyos valores hay que dar a la funcin para que realice los clculos u operaciones que posteriormente se especificarn. Si son varios los argumentos, deben ir separados por comas. 2) Lnea H1 y lneas de ayuda, se trata de lneas de comentario, es decir, van detrs de el signo %, en las cuales se describe la funcin y como usarla. Son opcionales, pero de gran utilidad. La lnea H1 es la primera de las lneas, debe contener una breve descripcin de la funcin, y su peculiaridad es que a partir de su contenido es posible hacer bsquedas en MatLab con el comando lookfor. El resto de lneas deben explicar el uso de la funcin, qu son cada uno de los argumentos de entrada y salida, etc. Cuando en MatLab se teclea Help nombre_funcion, el contenido de estas lneas aparece. 3) Cuerpo de la funcin, que define las operaciones y clculos a realizar con los argumentos de entrada para obtener los argumentos de salida.

28

Nociones bsicas de MatLab 7.0


A continuacin se muestra un ejemplo de fichero de funcin. En el se ha definido la funcin HCmolmass, la cual calcula el peso molecular de un hidrocarburo saturado (alcano), al introducir su nmero de carbonos.

A continuacin se muestra la entrada y salida en la ventana de comandos de MatLab cuando se invoca a la funcin, as como cuando se usa el comando Help, para obtener ayuda sobre ella. >> PM_metano=HCmolmass(1)
PM_metano = 16

>> help HCmolmass


Funcin que calcula la masa molecular de un alcano a partir de su nmero de carbonos Para utilizarla basta introducir como argumento el nmero de carbonos del hidrocarburo saturado (alcano) cuya masa molecular se pretende calcular.

6.2.

Variables Globales.

Cada funcin 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 slo son accesibles a la funcin en cuestin. Es decir, que estas variables, que se denominan locales, slo sirven para que se hagan los clculos dentro de la propia funcin, 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

29

Nociones bsicas de MatLab 7.0


workspace, como sucede con aquellas variables que se asignan directamente en la ventana de comandos o por un fichero script, que no sea de funcin. Cuando se desea que una variable generada por una funcin 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 funcin como antes del cdigo del programa que vaya a utilizarla. Por ejemplo, si hacemos un pequeo programa (ej3.m) que muestre el valor de las variables MW y n creadas por la funcin HCmolmass, este podra ser su cdigo.

Para que el programa tenga acceso a ambas variables ambas deben ser tambin declaradas globales en el cdigo de la funcin:

De esta forma, podramos leer los valores de MW y n mediante el programa ej3, tal y como se ve en las siguientes secuencias de comandos.

30

Nociones bsicas de MatLab 7.0


>> PM_metano=HCmolmass(1) PM_metano = 16 >> ej3 El valor de MW de un alcano es: 16 cuando el nmero 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 funcin por primera vez, ya no cambia al ejecutar la funcin una segunda vez, lo que puede dar lugar a errores. Vase a continuacin lo que ocurrira si tras teclear el ejemplo anterior en la ventana de comandos, intentamos usar la funcin 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 funcin HCmolmass es necesario borrar los valores de las variables globales, mediante el comando clear global, tal como se ve a continuacin, donde tambin se aprecia como se nos sigue advirtiendo de un posible error. >> clear global >> PM_etano=HCmolmass(2)

31

Nociones bsicas de MatLab 7.0


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 funcin. Esta forma se puede usar directamente en la ventana de comandos, o bien en el cdigo de un fichero script normal. Para ello se utiliza el comando inline, con la siguiente sintaxis: nombre = inline('expresin matematica') El nombre de la funcin se pone en primer lugar, y a continuacin, tras el comando inline se coloca, escrita en forma de cadena, la expresin matemtica 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 ms de una variable, o aplicarlas a vectores o matrices (usando las operaciones elemento a elemento). Para ms informacin, consultar la ayuda de MatLab.

7. Programacin en MatLab.
Hasta ahora hemos escrito pequeos programas en MatLab, tanto en ficheros script, como en ficheros funcin. Todos ellos eran muy simples y no permitan, por ejemplo, fijar condicin alguna a la hora de realizar los clculos o repetirlos un nmero

32

Nociones bsicas de MatLab 7.0


controlado de veces. Para ello MatLab dispone de sentencias de programacin de tipo condicional y de bucles, de forma similar a la mayora de los lenguajes de programacin de propsito general. En este apartado revisaremos la sintaxis de dichas sentencias, aunque comenzaremos repasando los operadores relacionales y las operaciones lgicas en MatLab.

7.1.
MatLab.

Operadores relacionales y operaciones lgicas.

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

Operador relacional < > <= >= == ~=

Descripcin Menor que. Mayor que. Menor o igual que. Mayor o igual que. Igual a. Distinto de.

Estos operadores se usan en operaciones lgicas, 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

33

Nociones bsicas de MatLab 7.0


Como puede verse las matrices o vectores se comparan elemento a elemento. Las variables r1, r2 y r3 del ejemplo anterior son variables lgicas, a diferencia de A, B, C D que son variables numricas. Es tambin importante conocer los operadores lgicos 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 slo 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 adems predefinidas una serie de funciones lgicas, que se enumeran a continuacin, y que pueden resultar de mucha utilidad: Funcin 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. Funcin any: Aplicada a un vector, devuelve 1 (verdadero) si alguno de sus elementos es distinto de 0, y slo devuelve 0 (falso), si todos los elementos son 0. Funcin find: Aplicada a un vector devuelve el ndice de los elementos que son distintos de 0. Es posible aplicarla usando operadores lgicos, de la forma find(A>5), lo cual devolvera el ndice de los elementos que sean mayores que 5 en el vector A. Los operadores lgicos, 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.

34

Nociones bsicas de MatLab 7.0

>> 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 fcil generar otro vector con los nombres de aquellos que tienen notable.

7.2.

Sentencias de programacin.

Abordaremos a continuacin la sintaxis de los principales tipos de sentencias de programacin en MatLab: Sentencias condicionales:

La sentencia if
Permiten ejecutar una serie de comandos si se verifican unas condiciones previamente especificadas. La instruccin que se usa es if end segn el diagrama de flujo siguiente:

Detrs de if deben escribirse una serie de operaciones lgicas, del modo: if a<b if C==D 35

Nociones bsicas de MatLab 7.0


if (d<h) & (x<7), etc. Todas las variables que se empleen deben haber sido previamente asignadas. Tambin es frecuente que sea necesario usar una serie de instrucciones u otra segn se cumplan unas u otras condiciones. Para ello se emplean las estructuras if else end o if else elseif end, segn 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 adems otra sentencia condicional, que es switch-case. Para ms informacin se puede consultar la ayuda de MatLab. Bucles: Permiten ejecutar una instruccin o conjunto de ellas un nmero determinado de veces. Los ms importantes son los siguientes:

Bucle for-end
Su peculiaridad es que tenemos que conocer, desde el primer momento, el nmero de veces que la instruccin se repetir. La estructura del mismo es:

36

Nociones bsicas de MatLab 7.0


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 mximo (o mnimo, si s es negativo) que alcanzar la variable k. Una vez alcanzado, los comandos comprendidos entre for y end, no se ejecutarn ms.

Bucle while-end
En este caso no se conoce el nmero exacto de ejecuciones de los comandos del bucle que sern necesarias, por lo que stos se ejecutarn mientras se cumpla una determinada condicin, que obviamente debe especificarse. Su estructura por tanto, es: while expresin_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 instruccin, 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 bsicos del MatLab, por lo que, aunque una descripcin 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 trminos (por ejemplo, tiene el x3, pero no el x2), deber ponerse un 0 en el lugar del coeficiente correspondiente al trmino que falta.

37

Nociones bsicas de MatLab 7.0


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, generara un conjunto de valores del polinomio, en vez de un nico valor. roots(p): Genera un vector con las races del polinomio p. polyder(p): Genera un vector con los coeficientes de la derivada del polinomio p.

8.2.

Ajuste de curvas. La funcin polyfit.

Es muy frecuente cuando se tratan datos experimentales que se plantee la necesidad de ajustarlos a un polinomio o a otro tipo de funcin. La funcin 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 mximo grado ser siempre inferior en una unidad al nmero total de puntos a ajustar, es decir al nmero 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 funcin polyfit.
8 7.5 7
8 10

5 puntos grado 4
9

6.5 6 5.5 5
5 7

4.5
4

10

12

10

12

p=polyfit(x,y,2)

r=polyfit(x,y,4)

38

Nociones bsicas de MatLab 7.0


La funcin polyfit tambin permite ajustar datos a otros tipos de funciones bsicas, siempre que previamente se linealicen stas, como por ejemplo: y=bxn log(y)=log(b)+nlog(x) Para ajustar una serie de puntos (x,y) a una funcin potencial podramos usar el comando polyfit de esta forma: p=polyfit(log(x),log(y),1)

8.3.

Interpolacin.

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 mtodos matemticos, que suponen una determinada tendencia para la evolucin de los datos; por ejemplo, lo ms sencillo es suponer que los valores varan linealmente entre cada pareja de datos conocidos. Para realizar interpolaciones en MatLab se usa la funcin 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 almacenarn en el vector yi. Es tambin posible especificar el mtodo de interpolacin. Los tres ms importantes son: linear: supone un segmento lineal entre cada par de puntos. spline: supone un segmento polinmico cbico entre cada par de puntos. pchip: utiliza interpolacin de Hermite cbica (tambin 'cubic').

En la siguiente figura se aprecian tres casos de interpolacin con cada uno de los mtodos anteriores. La lnea continua representa la funcin real a la que pertenecen los puntos. La lnea discontinua corresponde a los puntos interpolados.

linear

spline

pchip

39

Nociones bsicas de MatLab 7.0


Adems MatLab cuenta con un asistente para la interpolacin mediante polinomios de forma interactiva, permitiendo el clculo de residuos y la comparacin de distintos ajustes con polinomios de diferente grado. Para usarla, una vez generado el grfico, hay que entrar en la herramienta Basic Fitting, en el men Tool, de la ventana de grficos.

8.4.

Solucin de ecuaciones de una variable.

Toda ecuacin de una variable, polinmica o no, puede ponerse en la forma f(x) = 0, con lo que su solucin es posible resolviendo dicha ecuacin. Para ello MatLab cuenta con la funcin fzero, cuya sintaxis es: fzero(funcion,x0) El comando anterior devuelve un escalar x que satisface la igualdad f(x) = 0. Para realizar este clculo MatLab emplea mtodos numricos iterativos, de modo que hay que suministrar un valor, x0, prximo a la solucin esperada, para que comience las iteraciones. La funcin que hay que poner como argumento puede ser una cadena de texto o bien se la puede definir mediante un fichero de funcin. A continuacin se muestra un ejemplo, que nos permite resolver la ecuacin x2 + 8 = ex >> sol=fzero('x^2-exp(x)+8',0) sol = 2.7421 Una buena forma de averiguar dnde una funcin tiene una solucin, o simplemente si la tiene, es realizar una representacin grfica de la funcin

8.5.

Clculo del mximo y mnimo de una funcin.

MatLab cuenta con una funcin para calcular el mximo o mnimo local de una funcin 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 funcin especificada alcanza el mnimo, dentro del intervalo x1 x x2. Para visualizar el valore que toma la funcin, hay que modificar ligeramente la sintaxis: [x fval]=fminbnd(funcion,x1,x2) De esta forma el valor de la funcin en x se asigna a la variable fval.

40

Nociones bsicas de MatLab 7.0


El valor mnimo de la funcin puede encontrarse dentro del intervalo (mnimo local) o en los extremos del mismo (mnimo absoluto). MatLab siempre busca el mnimo local, y luego lo compara con el valor de la funcin en los extremos del intervalo, devolviendo el punto donde la funcin alcanza el menor valor, como se aprecia en el siguiente ejemplo:
1000

-1000

f(x)

-2000

-3000

-4000

-5000 -10

-8

-6

-4

-2

0
x

10

>> [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 funcin fminbnd se puede tambin usar para encontrar el mximo, para lo cual basta aplicarla a la funcin multiplicada por 1.

41

Nociones bsicas de MatLab 7.0

8.6.

Integracin numrica.

La integracin es una operacin muy frecuente en los clculos cientfico-tcnicos, y en una gran cantidad de ocasiones no es posible realizarla analticamente, sino que es necesario usar la integracin numrica, incluso porque lo que se conoce no es la funcin a integrar (que adems puede no ser integrable), sino una serie de puntos. Para ello se pueden usar las siguientes funciones: quad quadl: Realiza la integracin numrica de una funcin, y se debe usar de la forma siguiente: quad(funcion,a,b) siendo a y b los lmites de integracin y la funcin una cadena de texto o una funcin existente en MatLab o predefinida por el usuario. La funcin 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 slo se diferencia del quad en la forma de calcular la integral, que es ms precisa en quadl que en quad. trapz: Realiza la integracin numrica a partir de un conjunto de puntos, dado por sus coordenadas x e y, de la forma: trapz(x,y)

8.7.

Resolucin de ecuaciones diferenciales ordinarias.

MatLab posee numerosas herramientas de clculo para abordar la resolucin de ecuaciones diferenciales, desde las ms simples (ecuaciones diferenciales ordinarias de primer orden, ODE) hasta casos ms complejos y sistemas de ecuaciones diferenciales. A continuacin se describirn los pasos para resolver un caso sencillo con las funciones predefinidas de MatLab. I) Partiremos de una ecuacin diferencial en la que se describe la evolucin de una variable dependiente (y) en funcin del tiempo (t). En general esa ecuacin debe ponerse en la forma general:

dy = f ( y, t ) dt

t0 t t f

y (t0 ) = y0

La solucin al problema ser una funcin o ms frecuentemente un conjunto de valores de dicha funcin en el intervalo considerado.

42

Nociones bsicas de MatLab 7.0


II) Una vez formulado el problema convenientemente, se debe crear un fichero de funcin que calcule los diferentes valores de dy/dt segn la ecuacin diferencial planteada, es decir, segn f(t,y).

function [deriv]=ejemplo(t,y) deriv = f(x,y)


III) A continuacin hay que seleccionar el mejor mtodo para hallar la solucin. MatLab dispone de diferentes funciones predefinidas para ODEs de primer orden, que son aplicables en funcin del nivel de complejidad del problema. En la siguiente tabla se resumen las ms importantes: Nombre de la funcin (mtodo) ode45 ode23 Descripcin
Para ecuaciones no demasiado complejas. Obtiene la solucin en un solo paso,ideal para intentar obtener una primera aproximacin. Se basa en el mtodo Runge-Kutta. Para ecuaciones no demasiado complejas. Obtiene la solucin en un solo paso. Est tambin basado en el mtodo Runge-Kutta. Es ms rpido pero menos preciso que el mtodo ode45. Para ecuaciones no demasiado complejas. Obtiene la solucin en mltiples pasos. Para ecuaciones complejas. Obtiene la solucin en varios pasos. Se utiliza cuando ode45 falla. Para ecuaciones complejas. Obtiene la solucin en un solo paso. Permite resolver algunas ecuaciones que no puede resolver ode15. Para ecuaciones de dificultad media. Para ecuaciones complejas. A veces ms eficiente que ode15s.

ode113 ode15s ode23s ode23t ode23tb

Lo normal es utilizar el ode45, y si no da resultado recurrir a los dems, empezando por el ode15s. IV) Se resuelve el problema usando el mtodo 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 funcin 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 solucin.

43

Nociones bsicas de MatLab 7.0


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 funcin y. y0 es el valor de la funcin y para t0, que debe ser conocido. [t y] es la solucin, es decir, el conjunto de valores de la funcin y para cada uno de los valores de t especificados mediante el vector tspan A continuacin se aplica la metodologa descrita (pasos I a IV) a un problema sencillo: La desactivacin trmica de una enzima a 60C sigue una cintica de primer orden con una constante de desactivacin de 0.05 min-1. Se pide representar grficamente 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:

dA = 0.05 A dt

0 t 60

A(0) = 100

II) Se crea un fichero funcin que calcule los valores de dA/dt:

Como variables de entrada de la funcin se ponen t y a, lo que es necesario para usar luego la funcin ode45, aunque en este caso dA/dt no es funcin directa de t. III) Usaremos el mtodo ode45 IV) Resolvemos el problema mediante: [t a]=ode45('desact',[0:1:60],100);

Al tratarse de una EDO muy sencilla se podra resolver integrando directamente la ecuacin, pero lo haremos mediante los mtodos numricos que incorpora el MatLab.

44

Nociones bsicas de MatLab 7.0


V) Por ltimo representamos los valores de A frente al tiempo, mediante una orden plot, lo que conduce a:

100 80 60
A,%

40 20

10

20

30
t, min.

40

50

60

45

Esta gua se basa en el libro Matlab: Una introduccin con ejemplos prcticos de Amos Gilat, Ed. Revert, Barcelona, 2006. Este libro es traduccin de la segunda edicin de la obra, publicada por John Wiley & Sons, USA, 2005.

46

Notas

47

Notas

48

Notas

49

Notas

50

Notas

51

Notas

52

Notas

53

Notas

54

Вам также может понравиться