Sei sulla pagina 1di 55

Manual de introducci on a Matlab

Jorge Mac as S anchez


Departamento de An alisis Matem atico Universidad de M alaga

Imprime: Centro Ocupacional El Papel C/Horacio Lengo, 5 29006-M alaga Tlfn.: 952 33 37 38

Indice general
Pr ologo 1. Primeras nociones b asicas 1.1. Unos primeros comandos u tiles . . . . . 1.2. Operaciones elementales . . . . . . . . . 1.3. Operadores de relaci on . . . . . . . . . . 1.4. Operadores l ogicos y valores booleanos . 1.5. Bucles: los comandos for y while . . . . 1.6. Ejecuci on condicionada: el comando if . 1.7. Impresi on en pantalla . . . . . . . . . . . 1.8. Formatos de salida . . . . . . . . . . . . 1.9. Valores de algunas constantes . . . . . . 1.10. Funciones con Matlab . . . . . . . . . . 1.10.1. Funciones internas . . . . . . . . 1.10.2. Funciones denidas por el usuario 1.11. Operaciones con polinomios . . . . . . . 2. Operaciones con vectores y matrices 2.1. Construcci on de vectores y matrices . 2.2. Manipulaci on de matrices y arrays . . 2.3. Operaciones con vectores . . . . . . . 2.3.1. Otros operadores vectoriales . 2.4. Operaciones con matrices . . . . . . . 2.5. Algunos comandos u tiles . . . . . . . 2.6. Resoluci on de sistemas lineales . . . . 3. Representaciones gr acas 3.1. Gr acas de funciones discretas . . 3.2. Gr acas de funciones anal ticas . 3.3. Algunas opciones gr acas . . . . 3.4. Gr acos 3D . . . . . . . . . . . . 3.4.1. Curvas en tres dimensiones 3.4.2. Supercies 3D . . . . . . . 1 3 3 5 5 6 6 6 7 8 8 9 9 9 11 13 13 14 17 18 19 20 21 23 23 23 24 27 27 28

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

IV

INDICE GENERAL 31 31 31 34 34 36 36 39 39 40 42 47 47 48

4. C alculo simb olico 4.1. Variables simb olicas . . . . . . . . . . . . . . . 4.2. Funciones simb olicas . . . . . . . . . . . . . . 4.3. Evaluaci on de funciones simb olicas . . . . . . 4.4. Resoluci on de ecuaciones simb olicas . . . . . . 4.5. Representaci on gr aca de funciones simb olicas 4.6. Funciones simb olicas . . . . . . . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

5. Ajuste de curvas e interpolaci on 5.1. Ajuste de curvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2. Interpolaci on 1D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3. Interpolaci on 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6. Programaci on en Matlab 6.1. Prealocaci on de memoria en matrices y vectores . . . . . . . . . . . . . Bibliograf a

Pr ologo.
Este manual tiene como u nico objetivo el de servir de ayuda a toda aquella persona que desee llevar a cabo su primera aproximaci on a Matlab, pretendiendo, ante todo, ser una gu a sencilla y concisa a este programa de c alculo. Se denen las funciones y comandos b asicos Matlab, y se le proporciona al lector las herramientas b asicas para la realizaci on de programas sencillos y la representaci on gr aca de las soluciones obtenidas. Este texto surge de la necesidad de proporcionarles a los alumnos universitarios de primer curso de carreras t ecnicas o cient cas que se enfrentan a una primera asignatura de m etodos num ericos en las que las pr acticas en ordenador se realizan con Matlab, de un manual de referencia sencillo, breve y de car acter muy b asico. Una vez que se tiene ya un conocimiento de m nimos sobre este sofware pueden consultarse otros manuales m as completos u otros textos de introducci on a Matlab como los que se dan en la bibliograf a que se acompa na. Nota: se trata de un texto en fase de elaboraci on.

M alaga, 19 de Febrero de 2002.

Pr ologo

Cap tulo 1 Primeras nociones b asicas


En este cap tulo haremos un breve repaso a los comandos y operadores b asicos Matlab que nos permitan realizar una primera utilizaci on de este paquete inform atico a un nivel de iniciaci on. Veremos cual es la sintaxis esencial para estos primeros comandos e instrucciones, sin pretender exponer todas sus amplias potencialidades.

1.1.

Unos primeros comandos u tiles

Damos en primer lugar algunos comandos que nos pueden resultar de gran utilidad en nuestro manejo de Matlab ya que nos permitir an obtener informaci on en l nea acerca de la sintaxis de un determinado comando o encontrar comandos de los cuales desconocemos su nombre, salvar/recuperar datos, etc. Estos comandos nos ser an muy u tiles desde nuestro primer uso de Matlab, sea cual sea el pr oposito para el cual vamos a utilizar este programa, es por ello que aparecen en primer lugar.

help
Si conocemos el comando que debemos utilizar y queremos tener m as informaci on acerca de el o su sintaxis haremos uso del comando help, por ejemplo, >> help det Este comando tambi en nos puede dar informaci on sobre un tema m as general, por ejemplo, >> help elfun para obtener un listado de las funciones matem aticas elementales. Por u ltimo, basta hacer simplemente help para obtener un listado de todos los temas generales sobre los que Matlab nos proporciona ayuda en l nea.

lookfor
Cuando no sabemos cual es el nombre del comando que queremos utilizar podemos hacer una b usqueda mediante el comando lookfor dando una palabra clave que relacionada con la operaci on que queremos que el comando Matlab que estamos buscando

Primeras nociones b asicas

ejecute. La b usqueda se lleva a cabo entre todas las primeras l neas de los temas de ayuda, no siendo por tanto necesario que la palabra clave sea un comando Matlab, por ejemplo, >> lookfor eigenvalue

diary
Si queremos poder revisar los resultados de una ejecuci on o guardar los comandos de una sesi on de trabajo podemos hacer uso del comando diary. Para guadar los datos en el chero sesion1 haremos, >> diary sesion1 cuando queramos concluir la salvaguarda de datos escribiremos diary off, pudiendo continuar nuestra sesi on Matlab o guardar las posteriores salidas en pantalla en un nuevo chero.

who y otros
Para saber, en cualquier momento de nuestra sesi on de trabajo, cuales son las variables que hemos denidos hasta ese instante teclearemos who. Si se quiere obtener una informaci on m as detallada sobre estas variables (nombre, dimensiones, espacio ocupado en memoria y tipo -real, compleja, simb olica, cadena de caracteres, . . . -) haremos whos. Para borrar todas o alguna de las variables denidas se utilizar a el comando clear. Otra cuesti on importante es que Matlab distingue entre may usculas y min usculas, por tanto los nombres aux, Aux o AUX corresponden a tres variables distintas, as se tendr a: >> aux = 24 aux = 24 >> new = Aux - 3 ??? Undefined function or variable Aux. >> new = aux - 3 new = 21 Tambi en podemos utilizar comandos unix m as usuales desde la ventana Matlab, como por ejemplo, ls, cd, pwd entre otros. Por u ltimo es u til saber que podemos movernos hacia atr as y hacia adelante sobre todos los comandos e intrucciones ya introduciadas mediante la teclas de echa hacia arriba y echa hacia abajo del teclado y mover el cursor a izquierda y derecha sobre los caracteres de la instrucci on en la l nea de comandos con las correspondientes teclas de echa a izquierda y echa a derecha .

1.2 Operaciones elementales

save y load
Si queremos guardar los resultados obtenidos tras una ejecuci on de una o m as variables utilizaremos el comando save, el cual crear a un chero binario (no de texto), salvo que a nadamos la opci on -ascii. >> save fichdatos x y z guarda en el chero fichdatos.mat el valor de las variables x, y, z. La opcion -append nos permite a nadir nuevas variables a un chero ya existente. Para recuperar los valores de las variables guardadas en un chero .mat utilizaremos el comando load, >> load fichdatos >> load fichdatos z este u ltimo l nea de comando recupera solamente la variable z del chero de datos fichdatos.

1.2.
+ /

Operaciones elementales
suma, resta, multiplicaci on, divisi on, eleva a la potencia dada.

Las operaciones elementales en Matlab vienen dada por los s mbolos usuales:

1.3.

Operadores de relaci on

En el lenguaje de programaci on Matlab los operadores de relaci on vienen dados por siguientes s mbolos: == <= >= = < > igualdad, menor o igual que, mayor o igual que, distinto que, menor que, mayor que.

La caracter stica diferencial de Matlab respecto a otros lenguajes de programaci on reside en el hecho de que estos operadores de relaci on pueden aplicarse tambi en a matrices y vectores, realiz andose la comparaci on elemento a elemento y obteni endose como resultado una matriz de ceros y unos.

Primeras nociones b asicas

1.4.

Operadores l ogicos y valores booleanos


(verdadero si las dos proposiciones son ciertas) (verdadero si la proposici on es falsa) (verdadero si alguna de las dos proposiciones es verdadera)

Los operadores l ogicos en Matlab vienen dados por, & operador y operador no | operador o

Los valores booleanos son 1 para verdadero y 0 para falso.

1.5.

Bucles: los comandos for y while

Para realizar la ejecuci on de un determinado grupo de ordenes un n umero jo y predeterminado de veces se utiliza el comando for. for i = 1:nmax ... end for k = 2*n:-1:n ... end

Cuando las operaciones dentro del bucle deben realizarse mientras se verique una determinada condici on que depende de valores que se obtienen dentro del propio bucle, entonces debemos hacer uso del comando while: while nstep <= ... end nmax while (err > eps1) | (rel > eps2) ... end

Para salir de cualquiera de estos bucles se utiliza el comando break.

1.6.

Ejecuci on condicionada: el comando if

Cuando queremos realizar una serie de comandos s olo cuando se verica una cierta condici on se utiliza el comando if y de forma m as general la estructura if-else-end. if nstep <= ... end nmax

if disc == 0 disp(Una raiz real doble) elseif disc > 0 disp(Dos raices reales distintas) else disp(Dos raices complejas conjugadas) end

1.7 Impresi on en pantalla

1.7.

Impresi on en pantalla

La forma m as sencilla de imprimir un mensaje en pantalla es mediante el comando disp que acabamos de utilizar en la secci on anterior. Este comando tambi en permite sacar por pantalla el valor de la variable indicada, por ejemplo, >> disp(a0) 1 >> disp([a0,b0,alpha]) 1.0000 2.0000

1.6543

Por su parte el comando fprintf nos va a permitir llevar a cabo la impresi on de forma conjunta de texto y valores de variables, lo cual ser a de gran utilidad para presentar la informaci on que nos proporciona un programa: >> fprintf(Una raiz de f en [%d,%d] es: %d\n\n ,a0,b0,alpha) Una raiz de f en [1,2] es: 1.654300e+00 En este caso el formato de impresi on viene dado por %d. Los diferentes formatos vienen determinados por una de las letras d, i, o, u, x, X, f, e, E, g, G, c, s, as , por ejemplo, %6.2f produce un formato con 5 cifras m as la coma decimal, con dos cifras decimales. En todo caso los formatos en Matlab no tienen la rigidez que, por ejemplo, en Fortran, ya que en el supuesto de que el valor a imprimir no se ajuste al formato dado se imprimir a igualmente, aunque quiz as no en la forma deseada. Los caracteres \n, \r, \t, \b, \f producen un cambio de rengl on, un retorno de carro, una tabulaci on, un retroceso (backspace) y un salto de p agina, respectivamente. Para ver m as claramente las diferencias entre cada una de estas opciones sustituirlas en el ejemplo anterior y observar el resultado. De forma m as general el comando fprintf escribe datos formateados en un chero. As , por ejemplo, si queremos crear un chero de texto que contenga una tabla de la funci on exponencial entre 0 y 1 haremos: >> >> >> >> x = 0:.1:1; y = [x; exp(x)]; fid = fopen(exp.txt,w); fprintf(fid,%6.2f %12.8f\n,y); fclose(fid)

Este chero contendr a: 0.00 1.00000000 0.10 1.10517092 ..... 1.00 2.71828183 Recu erdese que para obtener mayor informaci on sobre cualquiera de estos comandos basta hacer help comando.

Primeras nociones b asicas

1.8.

Formatos de salida

Todos los c alculos en Matlab se hacen en doble precisi on. El comando format se usa para cambiar entre los distintos formatos de salida. Sintaxis format format format format format format format format format format format Value Ejemplo 1.3333 1.3333 1.33333333333333 1.3333e+00 1.333333333333333e+00 1.3333 1.33333333333333 35555555555555 + 1.33 4/3

Igual que format short short Punto jo escalado con 5 d gitos long Punto jo escalado con 15 d gitos short e Coma otante con 5 d gitos long e Coma otante con 16 d gitos short g Mejor entre los dos short long g Mejor entre los dos long hex Formato hexagesimal + Signo bank Formato punto jo con 2 decimales rat Aproximaci on mediante una fracci on Cuadro 1.1: Comando format

Espaciado format compact suprime las l neas extra, format loose vuelve a insertar l neas extra.

1.9.

Valores de algunas constantes


n umero unidad imaginaria, i = 1 unidad de redondeo el mayor n umero en coma otante (representable en el ordenador dado) el menor n umero positivo en coma otante (idem) innito m aquina indeterminaci on

pi i,j eps realmax realmin Inf, inf NaN, nan Ejemplos

>> pi ans = 3.1416 >> format long >> pi ans = 3.14159265358979 >> realmax ans = 1.7977e+308

>> i ans = 0 + 1.0000i >> j ans = 0 + 1.0000i

>> realmin ans = 2.2251e-308

1.10 Funciones con Matlab

1.10.
1.10.1.

Funciones con Matlab


Funciones internas

Matlab posee un gran n umero de funciones implementadas a las que basta llamar mediante el nombre asignado a dicha funci on junto con el par ametro o par ametros necesarios. Damos a continuaci on una lista de alguna de estas funciones. Para obtener un listado completo de las funciones elementales disponibles hacer help elfun en la l nea de comandos. sin(x) cos(x) tan(x) asin(x) log(x) log10(x) exp(x) sqrt(x) abs(x) sinh(x) cosh(x) round(x) fix(x) floor(x) ceil(x) seno de x, coseno de x, tangente de x, arcoseno de x, logaritmo en base e de x, logaritmo en base 10 de x, exponencial de x, ra z cuadrada de x, valor absoluto de x, coseno hiperb olico de x, seno hiperb olico de x, redondea x a un entero, corta x a un entero, toma el entero m as cercano a x por defecto, toma el entero m as cercano a x por exceso.

1.10.2.

Funciones denidas por el usuario

Matlab permite la denici on de funciones por parte del usuario de forma sencilla, por ejemplo, si queremos denir la funci on f (x) = x3 x + 5 habr a que editar un chero Matlab con sujo .m (a estos cheros les llamaremos m-cheros) como el que se muestra a continuaci on, function y=f1(x) y=x^3-x+5; Esta funci on puede ser llamarda por otro programa o funci on Matlab, o ser utilizada directamente desde la l nea de comando. Para evaluar esta funci on en un punto podemos hacer >> y0=f1(5.4); o bien >> y0=feval(f1,5.4); Para obtener el cero de f1 m as cercano a 5,4 haremos

10 >> alpha=fzero(f1,5.4); y para encontrar un cero en un cierto intervalo >> raiz=fzero(f1,[-3,0]);

Primeras nociones b asicas

Tambi en pod amos haber introducido esta funci on como una funci on en l nea mediante el comando >> f1 = inline(x^3-x+5); En el caso de introducir la funci on como una funci on en l nea no tendremos que poner comillas en la llamada de la funci on feval ni fzero, es decir, en tal caso escribiremos, por ejemplo, >> raiz=fzero(f1,[-3,0]). Observemos que la funci on f1 se ha denido de forma que s olo es aplicable a escalares, pero no a vectores o matrices (lo cual constituye una de las grandes potencialidades de Matlab). Para comprobar la armaci on anterior hagamos, >> x = 0:0.1:1; >> f1(x) (o bien >> y0=feval(f1,x)) ??? Error using ==> inline/subsref Error in inline expression ==> x^3-x+5 ??? Error using ==> ^ Matrix must be square. Para poder evaluar f1 en vectores o matrices habr a que utilizar en su denici on las operaciones con arrays (dot-operations) que trataremos en el cap tulo siguiente, pero de las cuales adelantaremos aqu su uso. As , si hacemos, >> f1 = inline(x.^3-x+5); >> y0=feval(f1,x) obtendremos los 11 valores que toma la funci on f1 en los puntos dados por las coordenadas del vector x. Si queremos denir mediante Matlab una funci on dada a trozos, como por ejemplo la funci on denida por x0 x+1 f (x) = 1 (1/8) x2(3 x) 0 x 2 1/2 x2 debemos hacerlo mediante la siguiente sintaxis en un m-chero, function y = f(x) ym = 1.0 - 0.125*x.^2.*(3.0-x); y1 = (x+1).*(x <= 0); y2 = ( (x <= 2) - (x < 0) ).*ym; y3 = 0.5*(x > 2); y = y1 + y2 + y3;

1.11 Operaciones con polinomios donde, de nuevo, hemos utilizado operaciones-array.

11

Por u ltimo una funci on puede tener uno o varios par ametros de entrada y/o salida. Mostraremos como ejemplo una funci on que calcula la media y la desviaci on est andar (que ser an los valores de salida) de un conjunto de datos que se introducen mediante el vector x, por ejemplo, x = [ 1 3 5 6 3.4 5.6 3 2 2 ], que ser a la variable de entrada. function [media,dstand] = stad(x) n = length(x); media = sum(x) / n; dstand = sqrt(sum((x - media).^2)/n); Debe quedarnos claro que, en este ejemplo, es imprescindible la utilizacion de la operaci on-array .^2.

1.11.

Operaciones con polinomios

Para denir un polinomio en Matlab lo que haremos ser a dar un vector con sus 4 3 coecientes, as p(x) = x 2x + 3x + 4 se introduce como: >> p=[1 0 -2 3 4] p = 1 0 -2 3 4

Para calcular las ra ces de este polinomio haremos >> r = roots(p) r = 1.2428 + 1.0715i 1.2428 - 1.0715i -1.4856 -1.0000 Conocidas las ra ces podemos reconstruir el polinomio mediante el comando poly, >> q = poly(r) q = 1.0000 0.0000 -2.0000 3.0000 4.0000

La multiplicaci on de polinomios se lleva a cabo mediante el comando conv >> p = [1 -2 3 4]; q = [1 2 1 4] >> s = conv(p,q) s = 1 0 0 12 3 16

16

La divisi on de polinomios se realiza mediante el comando deconv >> [q,r] = deconv(s,p) q = 1 2 1 4 r = 0 0 0 0

12

Primeras nociones b asicas

Matlab no realiza la suma/resta de polinomios de manera espec ca para polinomios, ya que esta operaci on se realiza como una simple suma/resta de vectores. Por tanto, la u nica condici on que debe vericarse es que los vectores (y consecuentemente los polinomios) tengan igual dimensi on (grado). Esto supone un inconveniente a la hora de realizar la suma de polinomios arbitrarios as , por ejemplo, si hacemos >> ps = p + s ??? Error using ==> + Matrix dimensions must agree. As pues, para poder sumar estos dos polinomios, habr a que escribir: >> ps = [0 0 0 p] + s ps = 1 0 0 13

19

20

Por tanto, para realizar esta la suma de polinomios cualesquiera de forma completamente autom atica habr a que escribir un programa Matlab que lleve a cabo esta tarea. Sin embargo, todav a no estamos preparados para escribir este programa. Dada su especial simplicidad la derivaci on de polinomios se realiza mediante un comando particular, polyder >> dps = polyder(ps) dps = 6 0 0

39

19

Por u ltimo veamos como evaluar un polinomio, >> polyval(ps,3) ans = 1166

Cap tulo 2 Operaciones con vectores y matrices


Con Matlab las variables no tienen que declararse ni dimensionarse previamente a su utilizaci on (normalmente al principio de cada programa como requieren otros lenguales de programaci on). Todas las variables num ericas son matrices en principio de la dimensi on que le demos al inicializarlas o al introducir valores en ellas, siendo en cualquier caso la gesti on de la memoria din amica, es decir, que en cualquier momento de la ejecuci on podemos aumentar o reducir la dimensi on de cualquier array.

2.1.

Construcci on de vectores y matrices

Los valores de los coecientes de una matriz se introducen por las de una de las dos maneras siguientes: 1. >> A=[1 2 3;4 5 6; 7 8 9] 2. >> A=[1 2 3 4 5 6 7 8 9] Podemos generar algunas matrices particulares de forma sencilla, por ejemplo, si una determinada matriz debe inicializarse a ceros o a unos haremos >> B = zeros(3,5); >> C = zeros(4); >> D = ones(size(B)); En caso de aparecer un solo par ametro la matriz ser a cuadrada. En el tercer ejemplo se genera una matriz de unos del tama no de la matriz B ya denida. Para crear vectores se puede actuar de forma an aloga o tambi en podemos generar vectores dando valores para sus coordenadas equiespaciados ( util, por ejemplo, a la hora de representar las abscisas para una funci on discreta) de cualquiera de las dos formas siguientes: >> x=0:0.1:10; >> x=linspace(0,10,101);

14

Operaciones con vectores y matrices

Nota: para un espaciado logar tmico v ease logspace. Para recuperar las dimensiones de una matriz o vector utilizamos el comando size, para el caso de vectores podemos tambi en utilizar el comando length. >> size(A) ans = 3 3 >> size(x) ans = 101 1 >> size(x) ans = 1 101 >> length(x) ans = 101

Para visualizar el valor un determinado elemento de una matriz o vector teclearemos, por ejemplo, >> A(2,3) ans = 6 >> x(27) ans = 2.6000

para recuperar el elemento que ocupa la posici on (2,3) de la matriz A y la coordenada 27 del vector x, respectivamente. Tambi en se pueden recuperar varios valores al mismo tiempo mediante expresiones del tipo, >> x(4:8) ans = 0.3000 >> x(4:2:8) ans = 0.3000 >> A(2:3,2) ans = 5 8

0.4000

0.5000

0.6000

0.7000

0.5000

0.7000 >> A(2:3,:) ans = 4 7

5 8

6 9

que nos proporcionan las coordenadas de la cuarta a la octava del vector x, las coordenadas cuarta, sexta y octava del vector x, y los elementos en las posiciones (2,2) y (2,3) de la matriz A, respectivamente.

2.2.

Manipulaci on de matrices y arrays

Las posibilidades que Matlab nos proporciona en la manipulaci on arrays de n umeros es inmensa. Intentaremos dar aqu una idea sobre algunas de estas posibilidades mediante diversos ejemplos. En primer lugar denamos dos vectores a y b,

2.2 Manipulaci on de matrices y arrays >> a = 1:5, b =1:2:9 a = 1 2 3 b = 1 3 5

15

4 7

5 9

Podemos crear una matriz que tiene a estos vectores por las: >> M = [a;b] M = 1 2 1 3

3 5

4 7

5 9

o bien crear un vector resultado de la concatenaci on de los dos vectores, >> c = [a b] c = 1 2

Pero tambi en son posibles otras manipulaciones m as sutiles, as >> d = [0 b(1) a(2:2:4) b(4) 0] d = 0 1 2 4 7 >> N = [a(2:2:4);b(2:2:4)] N = 2 4 3 7

donde, por ejemplo, a(2:2:4) representa los elementos del vector a desde la segunda a la cuarta tomadas con un paso 2, es decir, se toman s olo la segunda y cuarta componente. Tambi en podemos modicar el valor de un solo coeciente de una matriz, >> A(3,3)=33 A = 1 2 4 5 7 8

3 6 33

En el caso de que queramos a nadir un coeciente en una posici on que supera las dimensiones de la matriz, entonces la matriz se rellena de ceros para las posiciones sin determinar, >> A(2,5)=24 A = 1 2 4 5 7 8

3 6 33

0 0 0

0 24 0

16

Operaciones con vectores y matrices

Volvamos a reconstruir nuestra matriz A de referencia, >> A=[1 2 3; 4 5 6; 7 8 9]; Si, por ejemplo, queremos invertir el orden de las las de la matriz haremos >> B=A(3:-1:1,:) B = 7 8 9 4 5 6 1 2 3 donde los dos puntos indican que se toman todas las columnas, es decir, ser a equivalente, en este caso, a escribir 1:3. Si quisieramos construir una matriz que fuese el resultado de tomar todas las las de A y s olo las dos primeras columnas y a nadirle la primera y tercera columnas de B har amos >> C=[A(:,1:2) B(:,[1 3])] C = 1 2 7 9 4 5 4 6 7 8 1 3 Para extraer de esta u ltima matriz una matriz 2 2 con los coecientes de la segunda y tercera las y las columnas primera y tercera har amos >> B=C(2:3,[1 3]) B = 4 4 7 1 Tambi en podemos utilizar un array ya existente para extraer submatrices de una matriz dada, por ejemplo, >> C=[1 3] C = 1 3 >> B=A(C,C) B = 1 3 7 9 >> C=[3 1] C = 3 1 >> B=A(C,C) B = 9 7 3 1

Para construir un vector a partir de la matriz A que sea el resultado de ir tomando sus columnas de forma consecutiva har amos (donde tomamos la traspuesta para tener un vector la en lugar de un vector columna).

2.3 Operaciones con vectores >> v=A(:) v = 1 4

17

Para eliminar la segunda columna de A, escribir amos >> A(:,2)=[] A = 1 3 4 6 7 9 si ahora queremos eliminar la segunda la a la matriz resultante, >> A(2,:)=[] A = 1 3 7 9 y, por u ltimo, para sustituir la segunda la de la matriz anterior con los coecientes del vector C escribir amos >> A(2,:)=C A = 1 3 3 1

2.3.

Operaciones con vectores

Adem as de las operaciones usuales que involucran vectores Matlab presenta algunas operaciones con vectores espec cas que pueden ser de gran utilidad. Consideremos para los ejemplos que daremos a continuaci on dos vectores u y v y un escalar a, >> a = 2; >> u = [ 1 2 3 ]; >> v = [ 2 4 1 ];

Operaciones con escalares


Operaci on u+a a*u u/a a./u u.^a a.^u Descripci on Resultado suma a a cada componente de u [3 4 5] multiplica por a cada componente de u [2 4 6] dividide por a cada componente de u [0.5 1 1.5] divide a entre cada componente de u [2 1 0.66] eleva a a a cada componente de u [1 4 9] eleva a a cada componente de u [2 4 8]

18

Operaciones con vectores y matrices

Operaciones entre vectores


Operaci on u+v u.*v u./v u.\ v u.^v Descripci on suma usual de vectores multiplicaci on componente a componente divisi on componente a componente divisi on inversa componente a componente potenciaci on componente a componente Resultado [3 6 4] [2 8 3] [0.5 0.5 3] [2 2 0.3333] [1 16 3]

Observemos cual es el resultado de la operaci on (producto) para los vectores u y v dados: >> u*v ??? Error using ==> * Inner matrix dimensions must agree. En el caso de que u sea un vector la y v un vector columna, entonces el operador denota el producto escalar entre vectores, as , haciendo uso del operador transposici on, tendr amos: >> u*v ans = 13 y haciendo >> u*v ans = 2 4 6

4 8 12

1 2 3

2.3.1.

Otros operadores vectoriales

Matlab implementa muchos otros operadores vectoriales entre ellos destacamos algunos: Operador sum(u) prod(v) dot(u,v) cross(u,v) max(u) Descripci on suma todas las componentes de u multiplica todas las componentes de u producto escalar producto vectorial componente de valor m aximo Resultado 6 8 13 [-10 5 0] 3

2.4 Operaciones con matrices

19

2.4.
+ * / \ ^ .

Operaciones con matrices


suma, resta, multiplicaci on, divisi on usual, divisi on inversa, potenciaci on, traspuesta conjugada, traspuesta sin conjugaci on.

Los operadores matriciales de Matlab son:

Adem as de estos operadores matriciales usuales, tendremos las operaciones elemento a elemento denidas por el operador antecedido por un punto. .* ./ .\ .^ multiplicaci on elemento a elemento, divisi on usual elemento a elemento, divisi on inversa elemento a elemento, potenciaci on elemento a elemento.

Veamos algunos ejemplos: >> A = [ 1 2 0; 4 5 6 ; 7 8 9] A = 1 2 0 4 5 6 7 8 9 >> B = A B = 1 2 0

4 5 6

7 8 9

Obs ervese la diferencia entre la multiplicaci on de matrices como operaci on matricial usual: >> C = A*B C = 5 14 14 77 23 122

23 122 194

y la multiplicaci on elemento a elemento:

20 >> D=A.*B D = 1 8 8 25 0 48

Operaciones con vectores y matrices

0 48 81

An alogamente obs ervese la diferencia entre la potenciaci on como operaci on matricial, 2 A = A A: A2=A^2 A2 = 9 66 102

12 81 126

12 84 129

y la potenciaci on elemento a elemento, A.^2=A.*A, AA=A.^2 AA = 1 16 49

4 25 64

0 36 81

2.5.

Algunos comandos u tiles


a continuaci on otros comandos que pueden resultar u tiles. determinante de A, rango de A, matriz inversa de A, traza de A, norma de A, n umero de condicionamiento de A, polinomio caracter stico de A, c alculo de autovalores de A (equivalente a roots(poly(A))),

Destacamos det(A) rank(A) inv(A) trace(A) norm(A) cond(A) poly(A) eig(A)

Recordemos hacer help comando para tener m as detalles sobre cada uno de estos comandos as como sobre sus sintaxis. >> D = inv(A) D = -0.3333 -2.0000 0.6667 1.0000 -0.3333 0.6667

1.3333 -0.6667 -0.3333

2.6 Resoluci on de sistemas lineales >> d = det(A) d = 9 >> rank(A) ans = 3

21

2.6.

Resoluci on de sistemas lineales

Matlab nos permite resolver de forma sencilla y eciente, sin preocuparnos del m etodo que utiliza, sistemas lineales de la forma A x = b. Para ello, en primer, lugar habr a que introducir la matriz A de coecientes y el vector b conteniendo el segundo miembro de alguna de las formas que se han visto en este cap tulo. Por ejemplo, si tomamos la matriz A ya denida y cuyo determinante hemos visto que es distinto de cero, y como segundo miembro tomamos >> b = [3; 4; 6] b = 3 4 6 A continuaci on podemos resolver el sistema lineal de varias maneras. Una ser a utilizando la matriz inversa, aunque este m etodo no es en general recomendable, ya que el c alculo de la inversa de una matriz s olo debe realizarse si se necesita expl citamente. >> x = inv(A)*b x = -1.0000 2.0000 -0.3333 La forma m as adecuada y eciente de resolver un sistema lineal es mediante la utilizaci on del operador divisi on(\) o del operador divisi on inversa(/). Ambos operadores producen id enticos resultados salvo que el primero nos proporciona un vector columna y el segundo un vector la. >> x = A\b x = -1.0000 2.0000 -0.3333 >> x = b/A x = -1.0000

2.0000

-0.3333

22

Operaciones con vectores y matrices

Cap tulo 3 Representaciones gr acas


En este tema daremos los comandos b asicos para realizar unas primeras representaciones gr acas con Matlab. Evidentemente no trataremos todas las potencialidades de Matlab en el campo gr aco que son muy amplias.

3.1.

Gr acas de funciones discretas

En primer lugar Matlab permite representar f acilmente las gr acas de datos num ericos almacenados en vectores o en matrices mediante el comando plot. Estos datos pueden ser el resultado de la evaluaci on de una funci on anal tica o datos que se leen de un chero. La sintaxis b asica del comando plot es simple: >> x = [0 1 2 3 4 5]; >> y = [3 5 -2 1 0 4]; >> plot(x,y) Si no se indica nada plot une los puntos de la gr aca mediante una l nea continua negra. Para cambiar el tipo de l nea o el color escribiremos, por ejemplo, >> plot(x,y,xg) para obtener los datos de la gr aca marcados con una equis y en color verde. Para ver las posibilidades disponibles ver la tabla 3.1.

3.2.

Gr acas de funciones anal ticas

Resulta evidente que para representar gr acamente una funci on denida anal ticamente habr a que discretizarla en primer lugar y luego representar la funci on en los puntos considerados mediante el comando plot o, de forma m as autom atica, sin necesidad de discretizaci on previa por parte del usuario, mediante el comando fplot. As , si queremos representar gr acamente la funci on cos x en el intervalo [0, ] haremos, por ejemplo,

24 S mbolo y m c r g b w k Color amarillo magenta cian rojo verde azul blanco negro S mbolo . o x + * : -. Tipo de l nea puntos c rculos equis (x) mases (+) asteriscos (*) l nea continua l nea de puntos punto-gui on l nea de guiones

Representaciones gr acas S mbolo s d ^ v < > p h Tipo de l nea cuadrados diamantes tri angulos tri angulos tri angulos tri angulos pentagrama hexagrama

Cuadro 3.1: Estilos y colores para las representaciones gr acas. Comando plot. >> x = 0:0.1:2*pi; >> y = cos(x); >> plot(x,y) O tambi en >> x = linspace(0,2*pi,101); >> plot(x,cos(x)) Para realizar la gr aca mediante el comando fplot escribir amos >> fplot(cos(x),[0 2*pi]) sin necesidad de especicar los puntos de la discretizaci on del eje de abscisas.

3.3.

Algunas opciones gr acas

Repasemos ahora de forma r apida algunas de las principales opciones gr acas que nos proporciona Matlab. En primer lugar veamos que comandos nos permiten incluir texto en los ejes de la gr aca. Para ello debemos utilizar los comandos xlabel e ylabel. Si lo que queremos es escribir un texto en la parte superior de la gura utilizamos el comando title. >> xlabel(coordenada x) >> ylabel(coordenada y) >> title(Grafica de la funcion f(x)=cos(x)) Podemos a nadir una cuadr cula a la gr aca de forma autom atica mediante el comando grid on y eliminarla tecleando grid off. El comando grid sin m as activa/desactiva esta opci on gr aca. Para controlar la apariencia y escalado de los ejes de forma m as personalizada contamos con el comando axis. As axis([xmin xmax ymin ymax]) ja los l mites

3.3 Algunas opciones gr acas

25

de representaci on para la gr aca a la que hace referencia. Otras opciones para este comando son: axis axis axis axis axis tight equal image square normal ajusta los ejes a los valores de los datos toma iguales factores de escala en ambos ejes igual que axis equal pero ajustando los ejes a los datos hace que los ejes formen un cuadrado deshace los efectos de axis square y axis equal y elimina toda restricci on en el escalado elimina el texto de los ejes, la cuadr cula y devuelve el escalado autom atico restablece el texto de los ejes, marcas y cuadr cula vuelve a los par ametros de escalado por defecto mantiene el escalado jo al activar el comando hold y realizar posteriores gr acas

axis off axis on axis auto axis manual

Si queremos a nadir texto en una posici on de la gura cualquiera dada utilizaremos la orden text(x,y,texto), donde (x,y) representa las coordenadas del punto medio del texto en su extremo izquierdo (como unidades se toman las de los ejes de la gr aca). El comando gtext sirve para la colocaci on de texto en la gr aca en la posici on que indiquemos mediante el rat on. Adem as podemos poner una leyenda a todas o algunas de las curvas representadas en una gr aca mediante el comando legend como veremos en el ejemplo de la gura 3.1. Para ampliar una parte de la gr aca tecleamos zoom en la ventana de comandos y luego cliquearemos con el rat on en la zona de la gr aca que queremos ampliar tantas veces como sucesivos zooms queramos realizar. Un doble click restablece la gr aca a sus dimensiones iniciales. Al realizar un nuevo comando plot la gr aca anteriormente representada desaparece autom aticamente. Si queremos que dicha gr aca permanezca y superponer la nueva curva que vamos a representar, una de las posibilidades es utilizar el comando hold, o hold on y hold off para desactivar esta opci on. El comando print nos permite guardar la gr aca como un m-chero o en formato postscript para su posterior impresi on. En el siguiente ejemplo se recogen algunos de los comandos introducidos hasta el momento, la gura 3.1 nos muestra el resultado que se obtiene. >> >> >> >> >> >> >> >> x = 0:0.1:2*pi; plot(x,cos(x),--,x,sin(x),-o) axis([0 2*pi -1 1]) legend(coseno,seno) text(0.8,0.2,cos(x)) text(3,0.2,sen(x)) title(Graficas de las funciones seno y coseno) xlabel(eje de abscisas)

26 >> ylabel(eje de ordenadas) >> print figura


Graficas de las funciones seno y coseno 1

Representaciones gr acas

coseno seno 0.8

0.6

0.4

eje de ordenadas

0.2

cos(x)

sen(x)

0.2

0.4

0.6

0.8

3 eje de abscisas

Figura 3.1: Algunas opciones del comando plot. Si queremos representar una nueva gr aca en una nueva ventana sin perder la que ya tenemos utilizaremos el comando figure. Para borrar la u ltima gura haremos clf. Tambi en en una misma gura pueden aparecer varias gr acas con sus correspondientes ejes. Esto se consigue con el comando subplot. Veamos la utilizaci on de este comando junto a otros ya estudiados mediante el siguiente ejemplo, cuyo resultado aparece en la gura 3.2.
>> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> x=0:0.1:2*pi; % Discretizacion del eje de abcisas figure % Generar una nueva figura subplot(2,3,1) % Primera grafica plot(x,sin(x),*b) % Funcion seno con asteriscos y en negro axis ([0 2*pi -1 1]) % Defino los ejes hold on % Sigo dibujando en la misma grafica plot(x,sin(2*x),.) % La funcion seno(2x) punteada title(Funcion seno) % Ponemos titulo a la grafica text(5.4,0.85,(a)) % Incluimos texto en la posicion indicada hold off subplot(2,3,2) % Segunda grafica plot(x,cos(x),-o,x,cos(2*x),.) % Funciones cos(x) y cos(2x) axis tight % Los ejes deben ajustarse a los datos title(Funcion coseno) % Titulo para la segunda grafica text(4.8,0.85,(b)) % Insertamos texto en la posicion indicada subplot(2,3,3) % Tercera grafica semilogy(x,exp(x),-^) % Escala logaritmica en el eje de ordenadas grid on % Activamos la cuadricula axis tight % Los ejes deben ajustarse a los datos title(Funcion exponencial) % Titulo para la tercera grafica text(4.8,325,(c)) % Aado texto en la posicion indicada

3.4 Gr acos 3D
>> >> >> >> >> >> subplot(2,3,4:6) plot(x,x.^2.*sin(x),-+) grid on legend(x exp(x)) title(Otra funcion) text(0.1,2,(d))
Funcion seno 1 (a) 0.5 0.5 1 (b) 10
2

27
% % % % % % Cuarta grafica!!! Funcion x sen(x) linea continua y + Activamos la cuadricula Ponemos texto tipo leyenda Titulo cuarta grafica Insertamos texto en la posicion indicada
Funcion coseno Funcion exponencial (c)

0 10
1

0.5

0.5
0

10

Otra funcion 5 (d) 0 5 10 15 20 25 0 1 2 3 4 5 6 7 x exp(x)

Figura 3.2: Comandos plot y subplot.

3.4.
3.4.1.

Gr acos 3D
Curvas en tres dimensiones

El equivalente del comando plot para gr acas en tres dimensiones es el comando plot3 cuya sintaxis es tambi en an aloga a la de aquel pero donde habr a que dar ahora tripletas de datos. Ve amoslo mediante el siguiente ejemplo, cuyo resultado gr aco aparece en la gura 3.3. >> >> >> >> >> x = linspace(0,10*pi); plot3(x,sin(x),cos(x),x-) title(Helice,FontSize,24) xlabel(x,FontSize,18), ylabel(sen(x),FontSize,18) zlabel(cos(x),FontSize,18)

En esta gr aca hemos aumentado el tama no de letra utilizada para el t tulo y las etiquetas de los ejes para que fueran legibles al insertar el chero postscript que nos proporciona Matlab A en el documento L TEXque genera este texto. Por u ltimo observar que todos los comandos vistos para gr acas 2D se aplican de forma an aloga para las gr acas en tres dimensiones (axis, text, legend, etc.).

28
Hlice

Representaciones gr acas

0.5

cos(x)

0.5

1 1 0.5 30 0 0.5 15 10 1 5 0 25 20 35

sen(x)

Figura 3.3: Gr aca generada con el comando plot3d.

3.4.2.

Supercies 3D

Para poder representar gr acamente una supercie tridimensional mediante Matlab es necesario denir en primer lugar una malla rectangular1 en el plano x y y debemos conocer el valor de la coordenada z en los nodos (intersecciones) de esa malla. Esto har a necesario utilizar t ecnicas de interpolaci on cuando los datos de la supercie que queremos representar vengan dados de cualquier otra forma que no sea la descrita. Veamos como representar amos la supercie denida por una funci on de dos variables z = f (x, y ). En primer lugar habr a que denir la malla donde se evaluar a la funci on. Esto se hace mediante el comando meshgrid de la siguiente forma: >> x = -10:0.5:10; >> y = x; >> [xm,ym] = meshgrid(x,y); sen x2 +y 2 Consideremos, por ejemplo, la funci on f (x, y ) = 2 2 , que debemos evaluar en los nodos
x +y

de la malla. >> r = sqrt(xm.^2+ym.^2)+eps; % sumamos eps para evitar dividir entre 0 >> zm = sin(r)./r; Por u ltimo, para generar la supercie 3D, haremos >> mesh(xm,ym,zm) El resultado de estos comandos puede verse en la gura 3.4. Ligeras variantes del comando mesh son meshc que representa adem as de la supercie las isol neas de la funci on f (x, y ) y meshz que dibuja una pared lateral de referencia. Otros comandos an alogos son surf, surfc y surfl, los cuales producen una supercie 3D coloreada o tambi en el comando waterfall. Se recomienda jugar con estos comandos tomando el ejemplo suministrado o cualquier otro para ver las diferencias entre cada uno de ellos.
1

Puede tratarse tambi en de mallas triangulares cuesti on que nosotros no abordaremos.

3.4 Gr acos 3D

29

1 0.8 0.6 0.4 0.2 0 0.2 0.4 10 5 0 0 5 10 10 5 5 10

Figura 3.4: Gr aca de una supercie denida por z = f (x, y ) (comando mesh). Datos dados por una nube de puntos
Para realizar la representaci on gr aca de una supercie que pasa una nube de puntos 3D arbitraria es necesario, en primer lugar interpolar los datos sobre una malla, para luego representar la supercie de forma est andard. Ve amos los pasos a seguir mediante un ejemplo.

% Coordenadas aleatorias de los puntos en la nube puntos 3D. xd=random(unid,20,100,1) % coordenadas x, yd=random(unid,20,100,1) % y, zd=random(norm,10,2,100,1) % z dadas de forma aleatoria % Representar la nube de puntos. plot(xd,yd,o) % Construimos una malla que contenga a los puntos de coordenadas (xd,yd). [xi,yi] = meshgrid(0:.5:20,0:.5:20); % Interpolamos los valores de zd en la malla (xi,yi). zi = griddata(xd,yd,zd,xi,yi,cubic); % Representamos graficamente. mesh(xi,yi,zi) El resultado de este conjunto de comandos puede verse en la gura 3.5.

Algunos comandos m as
Como indic abamos al principio las posibilidades gr acas de Matlab son amplias y, por tanto, existen tambi en un gran n umero de comandos. A continuaci on nos limitamos a enumerar algunos de los que consideramos pueden sernos de alguna utilidad (aunque podremos vivir sin ellos). No hay que olvidar que, si en cualquier momento, estamos interesados en conocer la sintaxis exacta de cualquiera de estos comandos u otros, as que acci on realizan, bastar a hacer help comando en una ventana Matlab.

30

Representaciones gr acas

15

10

5 20 15 10 10 5 0 0 5 15 20

Figura 3.5: Representaci on de la supercie que pasa por una nube de puntos 3D.
contour3 shading view rotate hidden fill3 representa isol neas sombreado en colores (opciones flat, interp, faceted) especica el punto de observaci on para una gr aca 3-D rota respecto a un origen y direcci on dados oculta la malla rellena pol gonos 3D

Cap tulo 4 C alculo simb olico


Matlab no es s olo una herramienta num erica, tambi en posee capacidades de c alculo simb olico. Estas herramientas de c alculo simb olico permiten realizar operaciones algebraicas, integrar y diferenciar funciones, resolver sistemas lineales de ecuaciones o ecuaciones diferenciales.

4.1.

Variables simb olicas

Para denir variables simb olicas la sintaxis m as sencilla entre las varias posibles es, >> syms x a b c en el caso de que queramos denir x, a, b y c como variables simb olicas. Ahora podemos denir la siguiente matriz simb olica >> A = [a 1 b; c 1 c; 0 x 0] y calcular su determinante en funci on de las variables simb olicas >> d= det(A) d = -a*c*x+c*b*x

4.2.

Funciones simb olicas

Si ahora quisi eramos denir una funci on con variables simb olicas bastar a con hacer, por ejemplo, >> f = a*x^2 + b*x + c + x*cos(x)

Diferenciaci on
Para diferenciar (en este caso respecto de x1 ) esta expresi on simb olica basta hacer >> diff(f) ans = 2*a*x+b+cos(x)-x*sin(x)
El comando diff de Matlab calcula la derivada respecto de la variable simb olica que hallamos denido m as pr oxima a la x en el alfabeto.
1

32

C alculo simb olico

Para obtener la derivada respecto a otra variable, por ejemplo a, haremos >> diff(f,a) ans = x^2 Tambi en se pueden obtener derivadas de orden superior haciendo >> diff(f,2) ans = 2*a-2*sin(x)-x*cos(x) Tambi en podemos diferenciar cada una de las componentes de una matriz simb olica mediante el comando diff, >> A = [cos(a*x) sin(a*x); -sin(a*x) cos(a*x)]; >> diff (A) ans = [ -sin(a*x)*a, cos(a*x)*a] [ -cos(a*x)*a, -sin(a*x)*a] Por u ltimo comentar que Matlab permite, mediante el comando jacobian(f,v), calcular la matrix Jacobiana del escalar o vector f con respecto al vector v (hacer help jacobian para ver alg un ejemplo). Ejercicio: obtener el Jacobiano de la transformacion de coordenadas Eucl deas a coordenadas esf ericas usando el comando jacobian de Matlab.

Integraci on
Para integrar una funci on simb olica haremos >> int(f) ans = 1/3*a*x^3+1/2*b*x^2+c*x+cos(x)+x*sin(x) este comando nos proporciona una primitiva a la cual habr a que a nadirle una constante arbitraria. Para el c alculo de integrales denidas la sintaxis del comando ser a, >> int(f,0,2) ans = 8/3*a+2*b+2*c+cos(2)+2*sin(2)-1 Si hubieramos querido integrar respecto de la variable a deber amos haber escrito, >> int(f,a) ans = 1/2*a^2*x^2+b*x*a+c*a+x*cos(x)*a Para ver m as ejemplos hacer help sym/int.m.

4.2 Funciones simb olicas

33

L mites
La herramienta de c alculo simb olico de Matlab nos permite calcular el l mite de funciones de forma sencilla, por ejemplo, >> syms h >> limit((sin(x+h) - sin(x))/h,h,0) ans = cos(x) >> syms n >> limit((1 + x/n)^n,n,inf) ans = exp(x) En el caso de estar interesados en calcular l mites laterales se usar an las opciones left y right, as se tiene, >> limit(1/x,x,0) ans = NaN >> limit(1/x,x,0,left) ans = -inf >> limit(1/x,x,0,right) ans = inf

Suma simb olica


Podemos realizar sumas simb olicas, cuando estas existan, usando el comando symsum, por ejemplo, >> s1 ans = >> s2 ans = = symsum(1/n^2,1,inf) 1/6*pi^2 = symsum(x^n,n,0,inf) -1/(x-1)

Series de Taylor
El comando taylor(f,n,a) nos permite obtener el desarrollo de Taylor de grado n de la funci on f en el punto x0 = a. As , por ejemplo, >> h = exp(x); >> T = taylor(h,6) T = 1+x+1/2*x^2+1/6*x^3+1/24*x^4+1/120*x^5 >> pretty(T) Si queremos comparar gr acamente la funci on f y la correspondiente suma de Taylor haremos, >> xd = -2:0.05:2; yd = double(subs(h,x,xd)); >> ezplot(T,[-2,2]); hold on; >> plot(xd, yd, r-.) Nota: los comandos subs, double y ezplot se estudiar an en los apartados 4.3 y 4.5.

34

C alculo simb olico

4.3.

Evaluaci on de funciones simb olicas

Veremos ahora c omo podemos especicar los valores de los par ametros en una expresi on simb olica o c omo evaluar una funci on simb olica en un punto dado. Para ello utilizaremos el comando de sustituci on subs. Por ejemplo, si queremos evaluar la funci on f anteriormente denida en x = 6, manteniendo a a, b, c como par ametros, haremos >> subs(f,x,6) ans = 36*a+6*b+c+6*cos(6) El resultado sigue siendo una expresi on simb olica. Si ahora queremos especicar los valores de los par ametros a, b y c, haremos, por ejemplo, >> g = subs(f, [a b c], [3 2 -1]) g = 3*x^2+2*x-1+x*cos(x) Se tiene ahora una expresi on simb olica que depende s olo de la variable x. Si ahora queremos evaluar esta funci on en un punto dado, por ejemplo x = 3,5, tendremos hacer una nueva sustituci on mediante el comando subs, >> w = subs(g, x, 3.5) w = 171/4+7/2*cos(7/2) De nuevo w sigue siendo una cantidad simb olica, si queremos convertir w en un n umero en coma otante en doble precisi on haremos, >> w = double (w) w = 39.4724 Para obtener m as informaci on y varios ejemplos hacer help sym/subs.m.

4.4.

Resoluci on de ecuaciones simb olicas

Resoluci on de ecuaciones algebraicas


El comando solve(f) trata de encontrar los valores para las variables simb olicas que aparecen en f 2 para los cuales f se anula, por ejemplo, >> f = a*x^2 + b*x + c >> solve(f) ans = [ 1/2/a*(-b+(b^2-4*c*a)^(1/2))] [ 1/2/a*(-b-(b^2-4*c*a)^(1/2))] El resultado es un vector simb olico cuyos elementos son las dos soluciones de la ecuaci on de segundo orden. Si queremos resolver la misma expresi on pero para otra variable, por ejemplo para la variable b haremos
2

Hacer findsym(f) para saber cuales son estas variables

4.4 Resoluci on de ecuaciones simb olicas


>> solve(f,b)

35

Tambi en podemos resolver sistemas de ecuaciones como se muestra mediante el siguiente ejemplo, >> [u,v] = solve(a*u^2 + v^2 = 0,u - v = 1) u = [ 1/2/(a+1)*(-2*a+2*(-a)^(1/2))+1] [ 1/2/(a+1)*(-2*a-2*(-a)^(1/2))+1] v = [ 1/2/(a+1)*(-2*a+2*(-a)^(1/2))] [ 1/2/(a+1)*(-2*a-2*(-a)^(1/2))] >> vs = subs(v,a,2) vs = [ -2/3+1/3*(-2)^(1/2)] [ -2/3-1/3*(-2)^(1/2)] >> vv= double (vs) vv = -0.6667 + 0.4714i -0.6667 - 0.4714i

Resoluci on de ecuaciones diferenciales


Para realizar el c alculo simb olico de las soluciones de una ecuaci on diferencial ordinaria debemos utilizar el comando dsolve. La ecuaci on o ecuaciones que se pretenden resolver deben darse como expresiones simb olicas en las que la letra D denota diferenciaci on y los s mbolos D2, D3, . . . representan las sucesivas derivadas. Por tanto los nombres de las variables simb olicas que se utilicen no podr an contener la letra D. La variable independiente, sino se especica otra, ser a t as , por ejemplo, D2y representa d2 y/dt2 . >> dsolve(Dy=y+y^2) ans = 1/(-1+exp(-t)*C1) Si adem as se quiere imponer una determinada condici on de contorno haremos >> y = dsolve(Dy=y+y^2,y(0)=1) y = 1/(-1+2*exp(-t)) Para una ecuaci on de segundo orden >> y = dsolve(D2y=-y,x) y = C1*sin(x)+C2*cos(x) El comando dsolve tambi en nos puede proporcionar la soluci on de sistemas de ecuaciones diferenciales. >> [x,y] = dsolve(Dx = 5*x + 3*y, Dy = -3*x + 5*y) x = exp(5*t)*cos(3*t)*C1+exp(5*t)*sin(3*t)*C2 y =-exp(5*t)*sin(3*t)*C1+exp(5*t)*cos(3*t)*C2

36

C alculo simb olico

4.5.

Representaci on gr aca de funciones simb olicas

Para la representaci on gr aca de funciones denidas simb olicamente con una u nica variable simb olica se utiliza el comando ezplot. As , para representar gr acamente una funci on simb olica en un intervalo [a, b] haremos ezplot(f,[a,b]), por ejemplo, >> ezplot(g, [0,10]) o tambi en, >> ezplot tan(sin(x))-sin(tan(x)) >> ezplot (tan(sin(x))-sin(tan(x)))

4.6.

Funciones simb olicas

SYMBFACT Symbolic factorization analysis. DEMOS Demo list for the Symbolic Math Toolbox DSOLVE Symbolic solution of ordinary dierential equations. POLY2SYM Polynomial coecient vector to symbolic polynomial. SOLVE Symbolic solution of algebraic equations. SYMS Short-cut for constructing symbolic objects. ZETA Symbolic Riemann zeta function. SUBS Symbolic substitution. SYMDEMOS Set up Symbolic Math Toolbox command-line demos. SYMEQNDEMO Demonstrate symbolic equation solving. SYMINTRO Introduction to the Symbolic Math Toolbox. SYMLINDEMO Demonstrate Symbolic Linear Algebra. ACOS Symbolic inverse cosine. ACOSH Symbolic inverse hyperbolic cosine. ACOT Symbolic inverse cotangent. ACOTH Symbolic inverse hyperbolic cotangent. ACSC Symbolic inverse cosecant. ACSCH Symbolic inverse hyperbolic cosecant. ASEC Symbolic inverse secant. ASECH Symbolic inverse hyperbolic secant. ASIN Symbolic inverse sine. ASINH Symbolic inverse hyperbolic sine. ATAN Symbolic inverse tangent. ATANH Symbolic inverse hyperbolic tangent. BESSELI Symbolic Bessel function, I(nu,z). BESSELJ Symbolic Bessel function, J(nu,z). BESSELK Symbolic Bessel function, K(nu,z). BESSELY Symbolic Bessel function, Y(nu,z). COS Symbolic cosine function. COSH Symbolic hyperbolic cosine. COT Symbolic cotangent. COTH Symbolic hyperbolic cotangent.

4.6 Funciones simb olicas


CSC Symbolic cosecant. CSCH Symbolic hyperbolic cosecant. ctranspose.m: DET Symbolic matrix determinant. DIAG Create or extract symbolic diagonals. DOUBLE Converts symbolic matrix to MATLAB double. EIG Symbolic eigenvalues and eigenvectors. EQ Symbolic equality test. EVAL Evalute a symbolic expression. EXP Symbolic matrix element-wise exponentiation. EXPAND Symbolic expansion. FACTOR Symbolic factorization. FINDSYM Finds the symbolic variables in a symbolic expression or matrix. INV Symbolic matrix inverse. LATEX LaTeX represention of a symbolic expression. LDIVIDE Symbolic array left division. LOG Symbolic matrix element-wise natural logarithm. MINUS Symbolic subtraction. MLDIVIDE Symbolic matrix left division. mpower.m: MRDIVIDE Symbolic matrix right division. mtimes.m: NE Symbolic inequality test. NUMDEN Numerator and denominator of a symbolic expression. PLUS Symbolic addition. POLY Symbolic characteristic polynomial. POLY2SYM Polynomial coecient vector to symbolic polynomial. POWER Symbolic array power. PRETTY Pretty print a symbolic expression. RDIVIDE Symbolic array right division. SEC Symbolic secant. SECH Symbolic hyperbolic sechant. SIMPLE Search for simplest form of a symbolic expression or matrix. SIMPLIFY Symbolic simplication. SIN Symbolic sine function. SINH Symbolic hyperbolic sine. SOLVE Find the zeros of symbolic expressions. SQRT Symbolic matrix element-wise square root. SUBS Symbolic substitution. SVD Symbolic singular value decomposition. SYM Construct symbolic numbers, variables and objects. SYM2POLY Symbolic polynomial to polynomial coecient vector. SYMSUM Symbolic summation. TAN Symbolic tangent function. TANH Symbolic hyperbolic tangent. TIMES Symbolic array multiplication. TRANSPOSE Symbolic matrix transpose. TRIL Symbolic lower triangle.

37

38
TRIU Symbolic upper triangle. UMINUS Symbolic negation. CCODE C code represention of a symbolic expression. COLON Symbolic colon operator. CONJ Symbolic conjugate. ERF Symbolic error function. EXPM Symbolic matrix exponential. FORTRAN Fortran represention of a symbolic expression. GAMMA Symbolic gamma function. IMAG Symbolic imaginary part. RANK Symbolic matrix rank. REAL Symbolic real part. ZETA Symbolic Riemann zeta function. DIFF Alternative entry to the symbolic dierentiation function. INT Alternative entry to the symbolic integration function.

C alculo simb olico

Cap tulo 5 Ajuste de curvas e interpolaci on


En este cap tulo abordaremos las cuestiones del ajuste de curvas y de la interpolaci on mediante Matlab.

5.1.

Ajuste de curvas

Mediante las t ecnicas de ajuste de curvas lo que buscamos es aproximar una cierta nube de puntos (datos) mediante una curva regular que se ajuste lo mejor posible a esos datos sin tener que pasar necesariamente por ellos. En Matlab el problema del ajuste de curvas mediante m nimos cuadrados lo implementa el comando polyfit. Veamos como utilizar este comando. >> x = [0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1.]; >> y = [0.34 2.39 4.33 6.87 7.56 8.88 9.01 10.77 9.33 9.05 12.1]; >> plot(x,y,o-) >> p = polyfit(x,y,2) p = -11.9103 21.8821 0.5576 Si queremos ahora representar el polinomio de segundo grado que hemos obtenido como mejor aproximaci on m nimo cuadrado de estos datos haremos uso del comando polyval: >> xd = linspace(0,1,100); % Generar discretizacion del eje x >> yp = polyval(p,xd); % Evaluar el polinomio en esos puntos >> plot(x,y,o-,xd,yp,:) % Representar graficamente La gura 5.1 nos presenta los datos y la gr aca del polinomio de segundo grado que los ajusta en el sentido de los m nimos cuadrados. Si ahora queremos comparar esta aproximaci on con el ajuste polin omico de grado 10 (es decir con la interpolaci on de Lagrange de los datos) har amos: >> >> >> >> pp = ypp= hold axis polyfit(x,y,10) polyval(pp,xd); on; plot(xd,ypp,-r) tight % % % % Polinomio de grado 10 (de Lagrange) Evaluar el polinomio de Lagrange Representamos en la misma grafica Ejes ajustados a los datos

40
14 20 12 18 16 14 8 12 10 6 8 4 6 4 2 2 0

Ajuste de curvas e interpolaci on

10

0.2

0.4

0.6

0.8

0.2

0.4

0.6

0.8

Figura 5.1: Ajuste polin omico.

5.2.

Interpolaci on 1D

La diferencia entre interpolaci on y ajuste polin omico reside en que en la interpolaci on nuestros datos son esencialmente correctos y lo que se pretende es construir una funci on cuya gr aca pase por esos puntos y que nos permita describir el comportamiento de la variable representada en los puntos intermedios. El ejemplo m as sencillo de interpolaci on (lineal a trozos) es la forma en que Matlab realiza sus gr acas. As para valores intermedios entre dos datos la interpolaci on lineal a trozos supone un valor dado por la recta que une los dos puntos contiguos dados por los datos. Obviamente cuanto mayor sea el n umero de puntos considerados y menor la distancia entre ellos, mejor ser a la aproximaci on a la funci on subyacente. Veamos esto con un ejemplo. >> >> >> >> xf = linspace(0,2*pi,100); % Discretizacion fina. xg = linspace(0,2*pi,8); % Discretizacion grosera. plot(xf,sin(xf),xg,sin(xg),-o) % Representacion grafica axis([0,2*pi,-1.1,1.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

Figura 5.2: Interpolaci on lineal a trozos de la funci on seno en [0, 2 ].

5.2 Interpolaci on 1D

41

El comando espec co que implementa Matlab para realizar la interpolaci on 1d es el comando interp1. Continuemos con el ejemplo de la funci on seno, y consideremos la siguiente tabla de valores del sen(x).

x sen(x)

60 65 70 75 80 0.866025 0.906308 0.939693 0.965926 0.984808

Para aproximar el valor del sen(72) a partir de estos datos podemos seguir varias estrategias de interpolaci on. Veamos algunas de ellas. % Introducir los datos. x = 60:5:80; sx = [0.866025 0.906308 0.939693 0.965926 0.984808]; % o tambien sx = sin(x); % % 1) Interpolacion lineal a trozos. s72 = interp1(x,sx,72) s72 = 0.9502 % o tambien s72 = interp1(x,sx,72,linear) % % 2) Interpolacion cubica a trozos. s72 = interp1(x,sx,72,cubic) s72 = 0.9511 % % 3) Interpolacion mediante splines. s72 = interp1(x,sx,72,spline) s72 = 0.9511 % 4) Interpolacion mediante el vecino mas cercano. s72 = interp1(x,sx,72,nearest) s72 = 0.9397 Por u ltimo, si quisi eramos llevar a cabo una interpolaci on de Lagrange de grado 4 construyendo el polinomio de grado n = 4 que pasa por los n + 1 datos suministrados, har amos uso del comando polyfit. As pues, bastar a hacer, >> format long % Formato largo para que no parezca que varios % coeficientes del polinomio son cero >> ps = polyfit(x,sx,4) >> ps = Columns 1 through 4 0.00000000366667 -0.00000132866667 0.00002808833333 0.01653771666672 Column 5 0.01211599999911

42
>> s72 = polyval(ps,72) s72 = 0.95105681600000

Ajuste de curvas e interpolaci on

Tambi en se pueden realizar interpolaciones de Lagrange de menor grado (no merece la pena hacer interpolaciones lineal o c ubica pues esto, como ya lo hemos visto, lo hace Matlab de forma autom atica y es de esperar que tambi en de forma optima, mediante el comando interp1). Probemos por ello a construir el polinomio de interpolaci on de grado 2 que interpola la funci on seno en x0 = 65, x1 = 70, x2 = 75. >> xx = x(2:4); >> sxx = sx(2:4); >> pss = polyfit(xx,sxx,2) pss = -0.00014304000000 0.02598740000000 >> s72 = polyval(pss,72) s72 = 0.95104444000000

-0.17852900000002

Si queremos conocer el valor que Matlab calcula para el sen(72) con 15 cifras signicativas basta teclear, >> format long >> sin(72*pi/180) >> ans = >> 0.95105651629515

5.3.

Interpolaci on 2D

Veremos a continuaci on los comandos b asicos que nos van a permitir resolver problemas de interpolaci on en el plano. Los valores a interpolar podr an venir dados bien por una nube de puntos distribuidos de forma regular o arbitraria, o bien dados por una funci on z = f (x, y ) discretizada. En el caso de que los datos est en dados en todos los nodos de un mallado rectangular, entoces el problema de la interpolaci on bidimensional se resuelve f acilmente con Matlab. Ve amoslo con un ejemplo. Supongamos que tenemos los valores de una cierta variable dados en los nodos equidistribuidos de una malla del rect angulo [0, 5] [0, 4], por ejemplo, >> x = 0:5; y = 0:4; donde dichos valores vienen dados en la matriz z, >> z = [ 9 10 9.5 8 10 11 8 11 10.5 11.5 9 9 7 9 11 10 10 8 9 10 10.5 11 10.5 9 10 9 8.5 9 8 8];

5.3 Interpolaci on 2D
Para dibujar estos valores bastar a hacer >> mesh(x,y,z)

43

cuyo resultado puede verse en la gura 5.3. Ahora para obtener el valor interpolado en un

11.5 11 10.5 10 9.5 9 8.5 8 7.5 7 4 3 2 1 1 0 0 2 4 3 5

Figura 5.3: Comando mesh para representar datos dados sobre una malla rectangular.
punto de este rect angulo, por ejemplo en el punto (3,5, 2,8) har amos, >> zi = interp2(x,y,z,3.5,2.8) zi = 10.6000 La interpolaci on utilizada por defecto es la lineal pero tambi en podemos utilizar interpolaci on cubica, cubic, o la interpolaci on que toma como valor en el punto dado el del nodo m as pr oximo, nearest, por ejemplo, >> zi = interp2(x,y,z,3.5,2.8,cubic) zi = 10.8975 En el caso de que queramos interpolar los valores dados en una malla m as na haremos lo siguiente: >> >> >> >> >> >> >> >> >> xi = linspace(0,5,30); % Refinamos la malla en la direcci\on de x. yi = linspace(0,4,25); % Refinamos la malla en la direcci\on de y. [xxi,yyi] = meshgrid(xi,yi); % Generamos una malla rectangular. zzi = interp2(x,y,z,xxi,yyi,cubic); % Interpolamos. mesh(xxi,yyi,zzi) % Representamos graficamente los datos interpolados. hold on [xx,yy] = meshgrid(x,y); % Malla de los datos originales. plot3(xx,yy,z,or) % Representamos los datos originales. hold off

44

Ajuste de curvas e interpolaci on

12 11 10 9 8 7 6 4 3 2 1 1 0 0 2 4 3 5

Figura 5.4: Datos interpolados en una malla m as na.


La gura 5.4 nos presenta el resultado obtenido tras introducir esta serie de comandos. Por u ltimo veamos que har amos en el caso en que los datos vinieran dados en un conjunto de puntos distribuidos de manera no regular. Para ello consideraremos un ejemplo que consistir a en la representaci on gr aca de los datos de profundidades en la zona del Golfo de C adiz, Estrecho de Gibraltar y Mar de Albor an. Supondremos que estos datos batim etricos est an contenidos en el chero batimetria.dat en tres columnas conteniendo la coordenada x, la coordenada y y la profundidad z , respectivamente. Para ello en primer lugar habr a que abrir el chero con el comando fopen, habr a que proceder a la lectura del chero con el comando fscanf y para concluir con la lectura de los datos habr a que cerrar el chero con el comando fclose. M as concretamente haremos, % Ejemplo batimetria Golfo de Cadiz - Mar de Alboran % Lectura de los datos del fichero de batimetrias >> fid = fopen(batimetria.dat) % Apertura del fichero. >> B = fscanf(fid,%g %g %g,[3 inf]); % Lectura de los daros. >> fclose(fid) % Cerramos el fichero. Mediante el comando fscanf procedemos a la lectura del chero formateado que tiene por identicador el valor de la variable fid y procedemos a la lectura de sus 3 columnas y de todas sus las ([3, inf]). A continuaci on llamamos xd, yd y zd a las coordenadas x e y de los puntos y a sus profundidades, respectivamente. >> xd=B(1,:); >> yd=B(2,:); >> zd=B(3,:); Una vez extraidos los datos generamos una malla rectangular que contega a todos estos puntos mediante el comando meshgrid e interpolamos las profundidades en esta malla mediante el comando griddata. Ahora ya es posible representar gr acamente la batimetr a haciendo uso del comando mesh o alguna de sus variantes. Es decir, tendr amos que hacer,

5.3 Interpolaci on 2D
>> >> >> >>

45

plot(xd,yd,.) % Puntos donde tenemos dadas profundidades. [xi,yi] = meshgrid(-40:2:160,0:2:120); % Crear malla rectangular. zi = griddata(xd,yd,zd,xi,yi,cubic); % Interpolar datos en la malla. meshc(xi,yi,-zi) % Representar graficamente.

El resultado del conjunto de estos comandos puede verse en la gura 5.5.


120 100 80 60 40 20 0 50 0 50 100 150 200

500 0 500 1000 1500 2000 120 100 140 160 100 120

80

60

40

20

0 40 20

20

40

60

80

Figura 5.5: Comando mesh para representar datos dados sobre una malla rectangular.

46

Ajuste de curvas e interpolaci on

Cap tulo 6 Programaci on en Matlab


En este cap tulo abordaremos las cuestiones mediante Matlab.

6.1.

Prealocaci on de memoria en matrices y vectores

x = random(norm,10,2,1,100); for i = 1:length(x) if x(i) > 0 sx(i) = sqrt(x(i)); else sx(i) = 0; end end x = random(norm,10,2,1,100); sx = zeros(size(x)) for i = 1:lenght(x) if x(i) > 0 sx(i) = sqrt(x(i)); end end

48

Bibliograf a

Bibliograf a
[1] P. Quintela. Introducci on a Matlab y sus Aplicaciones. Servicio de Publicaciones de la Universidad de Santiago, 1997. [2] Inc. The MathWorks. Matlab. Edici on de Estudiante. Versi on 4. Prentice Hall, 1996. [3] Inc. The MathWorks. The Student Edition of Matlab. Version 5 Users Guide. Prentice Hall, 1997.

Indice alfab etico

Potrebbero piacerti anche