Está en la página 1de 39

BREVES APUNTES DE MATLAB

UNA INTRODUCCIN RPIDA PERO NO TRIVIAL

MATLAB es un potente paquete de software para computacin cientfica, orientado al clculo numrico, a las operaciones matriciales y especialmente a las aplicaciones cientficas y de ingeniera. Puede ser utilizado como simple calculadora matricial, pero su inters principal radica en los cientos de funciones tanto de propsito general como especializadas que posee, as como en sus posibilidades para la visualizacin grfica. MATLAB posee adems un lenguaje de programacin propio, muy prximo a los habituales en clculo numrico (Fortran, C,) que permite al usuario escribir sus propios scripts (conjunto de comandos escritos en un fichero, que se pueden ejecutar con una nica orden) para resolver un problema concreto y tambin escribir nuevas funciones con, por ejemplo, sus propios algoritmos. MATLAB dispone, adems, de numerosas Toolboxes, que le aaden funcionalidades especializadas. Numerosas contribuciones de sus miles de usuarios en todo el mundo pueden encontrarse en la web de The MathWorks: www.mathworks.es 1. DOCUMENTACIN Y AYUDA ON-LINE Ayuda on-line en la ventana de comandos: >> help nombre_de_comando Ayuda on-line en la ventana del navegador: Help en la barra de mens, bien: >> helpwin

A travs del navegador del Help se pueden descargar, desde The MathWorks, guas detalladas, en formato pdf, de cada captulo. 2. SCRIPTS Y FUNCIONES. EL EDITOR INTEGRADO 2.1 Scripts Un script es un conjunto de instrucciones (de cualquier lenguaje) guardadas en un fichero (usualmente de texto) que son ejecutadas normalmente mediante un intrprete. Son tiles para automatizar pequeas tareas. Tambin puede hacer las veces de un "programa principal" para ejecutar una aplicacin. As, para llevar a cabo una tarea, en vez de escribir las instrucciones una por una en la lnea de comandos de MATLAB, se pueden escribir una detrs de otra en un fichero. Para ello se puede utilizar el Editor integrado: icono hoja en blanco del men de herramientas, opcin New M-file del Men File o bien usando la orden >> edit Los scripts de MATLAB deben guardarse en un fichero con sufijo .m para ser reconocidos. Para ejecutar un script que est en el directorio de trabajo, basta escribir su nombre (sin el sufijo) en la linea de comandos. 2.2 Funciones Una funcin (habitualmente denominadas M-funciones en MATLAB), es un programa con una "interfase" de comunicacin con el exterior mediante argumentos de entrada y de salida. Las funciones MATLAB responden al siguiente formato de escritura (la clusula end del final no es obligatoria, excepto en el caso de funciones anidadas, que se explica ms adelante):

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB function [argumentos de salida] = nombre(argumentos de entrada) % comentarios % .... instrucciones (normalmente terminadas por ; para evitar pantalla) .... end (opcional salvo en las funciones anidadas )

eco

en

Las funciones deben guardarse en un fichero con el mismo nombre que la funcin y sufijo .m . Se pueden incluir en el mismo fichero otras funciones, denominadas subfunciones, a continuacin de la primera, pero slo sern visibles para las funciones del mismo fichero. Tambin es posible definir funciones anidadas, esto es, funciones insertadas dentro del cdigo de otras funciones. (Se exponen aqu para conocer su existencia. Su utilizacin es delicada.) EJEMPLO : fichero tresxcuadrado.m function z=tresxcuadrado(x) % Ejemplo de una funcion anidada % %%%%%%%% function [y]=cuadrado(x) y=x*x; end %%%%%%% z=3*cuadrado(x); end 2.3 Funciones on-line (annimas) Algunas funciones sencillas, que devuelvan el resultado de una expresin, se pueden definir mediante una sla instruccin, en mitad de un programa (script o funcin) o en la lnea de comandos. Se llaman funciones annimas: handle = @(argumentos) expresion

EJEMPLO >> ... >> mifun = @(x) sin(2*x); >> mifun(pi/4) ans = 1 Pueden tener varias variables y hacer uso de variables previamente definidas: EJEMPLO >> a=2; >> mifun = @(x,t) sin(a*x*t); >> mifun(pi/4,1) ans = 1 Si, con posterioridad a la definicin de la funcin mifun, se cambia el valor de la variable a, la funcin no se modifica: en el caso del ejemplo, seguir siendo mifun(x,t)=sin(2*x*t). 2.4 Workspace y mbito de las variables Workspace (espacio de trabajo) es el conjunto de variables que en un momento dado estn definidas en la memoria del MATLAB Las variables creadas desde la linea de comandos de MATLAB pertenecen al base workspace (espacio de trabajo base). Los mismo sucede con las variables creadas por scripts que se ejecutan desde la linea de comandos. Estas variables permanecen en el base workspace cuando se termina la ejecucin del script y se mantienen all durante toda la sesin de trabajo o hasta que se borren. Sin embargo, las variables creadas por una funcin pertenecen al espacio de trabajo de dicha funcin, que es independiente del espacio de trabajo base. Es decir, las variables de las funciones son LOCALES : MATLAB reserva una zona de memoria cuando comienza a ejecutar una funcin, almacena en esa zona las variables creadas por esa funcin, y borra dicha zona cuando termina la ejecucin de la funcin. Para hacer que una variable de una funcion pertenezca al base workspace, hay que declararla GLOBAL: la orden
Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB global a suma error en una funcin hace que las variables a , suma y error pertenezcan al base workspace.

Sin embargo, las variables que se crean en una funcin son locales y temporales, es decir, no son accesibles desde otros programas, y no viven en el Workspace: MATLAB reserva una zona de memoria cuando comienza a ejecutar una funcin, almacena en esa zona las variables creadas por esa funcin, y borra dicha zona cuando termina la ejecucin de la funcin. Esta es una de las principales diferencias entre los scripts y las funciones: cuando finaliza la ejecucin de un script se puede ver y utilizar el valor de todas las variables que ha creado el script en el Workspace; en cambio, cuando finaliza una funcin no hay rastro de sus variables en el Workspace (salvo las que se hayan declarado globales). Otras diferencias son que, como ya se ha dicho, los scripts no pueden tener argumentos de entrada ni de salida, y que tampoco pueden contener subfunciones.

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB 3. OBJETOS Y SINTAXIS BSICOS

Los tipos bsicos de datos que maneja MATLAB son nmeros reales, booleanos (valores lgicos) y cadenas de caracteres (string). Tambin puede manipular distintos tipos de nmeros enteros, aunque slo suele ser necesario en circunstancias especficas. En MATLAB, por defecto, los nmeros son codificados como nmeros reales en coma flotante en doble precisin. La precisin, esto es, el nmero de bits dedicados a representar la mantisa y el exponente, depende de cada (tipo de) mquina. MATLAB manipula tambin otros objetos, compuestos a partir de los anteriores: nmeros complejos, matrices, cells, estructuras definidas por el usuario, clases Java, etc. El objeto bsico de trabajo de MATLAB es una matriz bidimensional cuyos elementos son nmeros reales o complejos. Escalares y vectores son considerados casos particulares de matrices. Tambin se pueden manipular matrices de cadenas de caracteres, booleanas y enteras. Algunas constantes numricas estn predefinidas: i , j pi Inf unidad imaginaria : 2+3i -1-2j nmero ! Infinito, nmero mayor que el ms grande que se puede almacenar. Se produce con operaciones como x/0, con x\neq 0 Not a Number : magnitud no numrica resultado de clculos indefinidos. Se produce con clculos del tipo 0/0 o Inf/Inf . (0+2i)/0 da como resultado NaN + Inf i

NaN

El lenguaje de MATLAB es interpretado, esto es, las instrucciones se traducen a lenguaje mquina una a una y se ejecutan antes de pasar a la siguiente. Es posible escribir varias instrucciones en la misma lnea, separndolas por una coma o por punto y coma. Las intrucciones que terminan por punto y coma no producen salida de resultados por pantalla. MATLAB distingue entre maysculas y minsculas: Log no es lo mismo que log. MATLAB conserva un historial de las instrucciones escritas en la lnea de comandos. Se pueden recuperar instrucciones anteriores, usando las teclas de flechas arriba y abajo. Con las flechas izquierda y derecha nos podemos desplazar sobre la lnea de comando y modificarlo. Se pueden salvaguardar todas las instrucciones y la salida de resultados de una sesin de trabajo de MATLAB a un fichero: >> diary nombre_fichero >> diary off % suspende la salvaguarda

3.1 Constantes y operadores aritmticos Reales: 8.01 -5.2 .056 1.4e+5 0.23E-2 8.003D-12 Complejos: 1+2i -pi-3j Booleanos: true false Caracteres (entre apstrofes o comillas): esto es una cadena de string Operadores aritmticos: + * / ^ Operadores de comparacin: == ~= ( <>) < > <= >= Operadores lgicos (lo dos ltimos slo para escalares): & | ~ && (&& y || no evalan el operando de la derecha si no es necesario.) 3.2 Funciones elementales Los nombres de las funciones elementales son los habituales.

-.567d-21

caracteres

||

Los argumentos pueden ser, siempre que tenga sentido, reales o complejos y el resultado se devuelve en el mismo tipo del argumento. La lista de todas las funciones matemticas elementales se puede consultar en: Help ! MATLAB ! FunctionsCategorical List ! Mathematics ! Elementary Math
Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB Algunas de ellas son: sqrt(x) abs(x) conj(z) real(z) imag(z) exp(x) log(x) log10(x) rat(x) mod(x,y) rem(x,y) fix(x) ceil(x) floor(x) round(x) raiz cuadrada mdulo complejo conjugado parte real parte imaginaria exponencial logaritmo natural logaritmo decimal aprox. racional resto de dividir x por y . Iguales si x,y>0 . Ver help para definicin exacta Redondeo hacia 0 Redondeo hacia + infinito Redondeo hacia - infinito Redondeo al entero ms prximo sin(x) cos(x) tan(z) cotg(x) asin(x) acos(x) atan(x) cosh(x) sinh(x) tanh(x) seno (radianes) coseno (radianes) tangente (radianes) cotangente (radianes) arcoseno arcocoseno arcotangente cos. hiperblico seno hiperblico tangente hiperblica

acosh(x) asinh(x) atanh(x)

arcocoseno hiperb. arcoseno hiperb. arcotangente hiperb.

3.3 Uso como calculadora Se puede utilizar MATLAB como simple calculadora, escribiendo expresiones aritmticas y terminando por RETURN (<R>). Se obtiene el resultado inmediatamente a travs de la variable del sistema ans (answer). Si no se desea que MATLAB escriba el resultado en el terminal, debe terminarse la orden por punto y coma (til, sobre todo en programacin). EJEMPLO >> sqrt(34*exp(2))/(cos(23.7)+12) ans = 1.3058717 >> 7*exp(5/4)+3.54 ans = 27.97240 >> exp(1+3i) ans = - 2.6910786 + 0.3836040i 3.4 Variables En MATLAB las variables no son nunca declaradas: su tipo y su tamao cambian de forma dinmica de acuerdo con los valores que le son asignados. As, una misma variable puede ser utilizada, por ejemplo, para almacenar un nmero complejo, a continuacin una matriz 25x40 de nmeros enteros y luego para almacenar un texto. Las variables se crean automticamente al asignarles un contenido. Asimismo, es posible eliminar una variable de la memoria si ya no se utiliza. EJEMPLOS >> a=10 a = 10. >> pepito=exp(2.4/3) pepito = 2.2255 >> pepito=a+pepito*(4-0.5i) pepito = 18.9022 - 1.1128i >> clear pepito Para conocer en cualquier instante el valor almacenado en una variable basta con teclear su nombre (Atencin: recurdese que las variables AB ab Ab y aB SON DISTINTAS, ya que MATLAB distingue entre maysculas y minsculas). Otra posibilidad es hojear el Workspace espacio de trabajo, abriendo la ventana correspondiente. Ello nos permite ver el contenido de todas las variables existentes en cada momento e, incluso, modificar su valor. Algunos comandos relacionados con la inspeccin y eliminacin de variables son:
Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB

who whos clear clear a b c

lista las variables actuales como el anterior, pero ms detallado elimina todas las variables que existan en ese momento elimina las variables a, b y c (atencin: sin comas!)

3.5 Formatos Por defecto, MATLAB muestra los nmeros en formato de punto fijo con 5 dgitos. Se puede modificar esto mediante el comando format: format format format format format format Cambia el formato de salida a su valor por defecto, short El valor por defecto Muestra 15 dgitos Formato short, en coma flotante Formato long, en coma flotante Muestra los nmeros como cociente de enteros

short long short e long e rat

3.6 Algunos comandos utilitarios Estn disponibles algunos comandos utilitarios, como: ls dir pwd cd clc date Lista de ficheros del directorio actual (como Unix) Lista de ficheros del directorio (de otra forma) Devuelve el nombre y path del directorio actual Para cambiar de directorio Limpia la ventana de comandos Fecha actual

3.7 Algunas observaciones sobre las funciones de MATLAB 1. Las explicaciones sobre las funciones/comandos que se presentan en estas notas estn muy resumidas y slo incluyen las funcionalidades que, segn el parecer subjetivo de la autora, pueden despertar ms inters. La mayora de las funciones tienen mas y/o distintas funcionalidades que las que se exponen aqu. Para una descripcin exacta y exhaustiva es preciso consultar la Ayuda on-line.

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB 4. MATRICES

Como ya se ha dicho, las matrices bidimensionales de nmeros reales o complejos son los objetos bsicos con los que trabaja MATLAB. Los vectores y escalares son casos particulares de matrices. 4.1 Construccin de matrices La forma ms elemental de introducir matrices en MATLAB es describir sus elementos de forma exhaustiva (por filas y entre corchetes rectos [ ]) : elementos de una fila se separan unos de otros por comas y una fila de la siguiente por punto y coma. EJEMPLOS (construcciones elementales de matrices) >> v=[1,-1,0,sin(2.88)] >> w=[0;1.003;2;3;4;5*pi] >> a=[1,2,3,4;5,6,7,8;9,10,11,12] >> mat=[Hola,Mari;Como,estas?] % vector fila longitud 4 % vector columna longitud 6 % matriz 3x4 % matriz 2x2 de caracteres

Observaciones: Lo que se escribe en cualquier lnea detrs de % es considerado como comentario. El hecho de que, al introducirlas, se escriban las matrices por filas no significa que internamente, en la memoria del ordenador, estn as organizadas: en la memoria las matrices se almacenan como un vector unidimensional ordenadas por columnas, como siempre. Otras rdenes para crear matrices son: >> v1=a:h:b % % >> v2=a:b % >> v3=v2 % >> v4=v2. % crea un vector fila de nmeros desde a hasta un n mero c <= b tal que c+h > b, con incrementos de h como el anterior, con paso h=1 matriz traspuesta (conjugada si es compleja) matriz traspuesta sin conjugar

Se pueden tambin utilizar los vectores/matrices como objetos para construir otras matrices (bloques): EJEMPLOS (construcciones elementales de matrices) >> v1=1:4 >> v2=[v1,5;0.1:0.1:0.5] >> v3=[v2',[11,12,13,14,15]']

MATLAB posee, adems, decenas de funciones tiles para generar distintos tipos de matrices. Para ver una lista exhaustiva consultar: Help ! MATLAB Matrices ! FunctionsCategorical List ! Mathematics ! Arrays and

Las siguientes funciones generan vectores de elementos regularmente espaciados, tiles en muchas circunstancias, especialmente para creacin de grficas. linspace(a,b,n) Si a y b son nmeros reales y n un nmero entero, genera una particin regular del intervalo [a,b] con n nodos (n-1 subintervalos) Como el anterior, pero se asume n=100 Vector con n elementos logartmicamente espaciados desde 10^e hasta 10^f, es decir, cuyos logaritmos estn regularmente espaciados. (logspace(e,f,n) = 10.^linspace(e,f,n) ) Como el anterior, pero se asume n=50

linspace(a,b) logspace(e,f,n)

logspace(e,f)

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB

diag(v) diag(A) diag(A,k) blkdiag(A,...,K) triu(A) tril(A) triu(A,k) tril(A,k) zeros(n,m) ones(n,m) eye(n,m) reshape(A,n,m)

Si v es un vector, diag(v) es una matriz cuadrada de ceros con diagonal principal = v Si A es una matriz, diag(A) es un vector = diagonal principal de A Si A es una matriz y k es un entero, diag(A,k) es un vector = k-sima sub o super diagonal de A (segn sea k<0 k>0) Construye una matriz diagonal por bloques con las matrices A, ... K Extrae la parte triangular superior (inferior) de la matriz A Extrae la parte superior (inferior) de la matriz A, desde la ksima diagonal hacia arriba (abajo) matriz nxm con todas sus componentes iguales a cero. matriz nxm con todas sus componentes iguales a uno matriz unidad: matriz nxm con diagonal principal =1 y el resto de las componentes =0 Re-dimensiona una matriz: si A es una matriz hxk, reshape(A,n,m) es otra matriz con los mismos elementos que A, pero de dimensiones nxm (tiene que ser h*k=n*m)

rand(n) rand(n,m) randn(n) randn(n,m) compan(p) magic(n) pascal(n) vander(v)

Construye una matriz nxn nxm con nmeros aleatorios con distribucin uniforme dem con distribucin normal Es la matriz compaera ( de Frobenius) del vector p, es decir, que tiene como autovalores las races de p Devuelve una matriz nxn que es un cuadrado mgico matriz de Pascal de dimensin nxn matriz de Vandermonde asociada al vector v: a(i,j) = v(i)^(n-j)

EJEMPLOS >> A=[eye(2,2),ones(2,3);linspace(1,2,5);zeros(1,5)] >> w=diag(A) >> B=reshape(A,5,4) >> C=diag(diag(A,1))+diag(diag(B, -2),1)

4.2 Operadores y funciones Los operadores aritmticos representan las correspondientes operaciones matriciales siempre que tengan sentido. Cuando van precedidos de un punto deben entenderse en el sentido de que la operacin se efecta "elemento a elemento". Sean: A+B A*B A+k A-k k*A A/k matrices de elementos a ij y b ij y k un escalar matriz de elementos a ij + b ij ( a ij - b ij ) (si las (A-B) dimensiones son iguales) producto matricial de A y B (si las dimensiones son adecuadas) matriz de elementos a ij + k matriz de elementos a ij - k matriz de elementos k * a ij =(1/k)*A matriz de elementos a ij / k A y B

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB matriz A elevada a la potencia k: si k entero > 0, A^k=A*A*...*A si k entero <0, A^k= (inv(A))^(-k) si no, A^k se calcula por diagonalizacin: A^k=V*A.^k*inv(V), donde [V,D]=eig(A) matriz de elementos k / a ij matriz de elementos ( a ij ) ^ k matriz de elementos k ^ ( a ij ) matriz de elementos a ij * b ij (si dimensiones iguales) matriz de elementos a ij / b ij (si dimensiones iguales) matriz de elementos a ij ^ b ij (si dimensiones iguales)

A^k

k./A A.^k k.^A A.*B A./B A.^B

La mayora de las funciones MATLAB estn hechas de forma que admiten matrices como argumentos. Esto se aplica en particular a las funciones matemticas elementales y su utilizacin debe entenderse en el sentido de "elemento a elemento": si A es una matriz de elementos a ij , exp(A) es otra matriz cuyos elementos son exp(a ij ). No debe confundirse con la funcin exponencial matricial que, a una matriz cuadrada A, asocia la suma de la serie exponencial matricial, y que en MATLAB se calcula mediante la funcin expm. EJEMPLO (diferencia entre exp y expm) >> A=[1,0;0,2] >> B=exp(A) >> C=expm(A)

Por otra parte, algunas funciones tiles en clculos matriciales son: sum(A) sum(A,1) sum(A,2) trace(A) prod(A) prod(A,1), prod(A,2) max(v) max(A) mean(v), mean(A) norm(v) norm(v,2) norm(v,p) norm(v,inf) norm(v,-inf) norm(A) norm(A,2) norm(A,1) norm(A,inf) size(A) length(A) suma de las componentes de la matriz A es un vector fila conteniendo la suma de los elementos de cada columna de A es un vector columna conteniendo la suma de los elementos de cada fila de A traza de A : sum(diag(A)) producto de las componentes de la matriz A es un vector fila / columna conteniendo el producto de los elementos de cada columna / fila de A si v es un vector, mximo de sus componentes si A es una matriz, es un vector fila conteniendo el mximo elemento de cada columna. Como max, pero para la media norma eucldea del vector v norma-p del vector v: sum(abs(v).^p)^(1/p) max(abs(v)) min(abs(v)) mximo autovalor de la matriz A norma-1 de la matriz A: mximo entre las sumas de sus columnas: max(sum(abs(A))) norma infinito de la matriz A: mximo entre las sumas de sus filas: max(sum(abs(A))) devuelve, en un vector fila, las dimensiones de la matriz A longitud: length(A) = max(size(A))

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB 4.3 Manipulacin de los elementos de una matriz. Extraccin, insercin y eliminacin Para especificar los elementos de una matriz se usa la sintaxis: v(i) A(i,j) A(k) Si v es un vector es v i Si A es una matriz, es a ij Si A es una matriz, es el k-simo elemento de A, en el orden en que est almacenada en la memoria (por columnas)

10

Los subndices, en MATLAB, siempre comienzan en 1. Pero MATLAB posee un buen nmero de facilidades para designar globalmente un conjunto de elementos de una matriz o vector, consecutivos o no. Por ejemplo, si v es un vector y h es un vector de subndices, v(h) hace referencia al subconjunto de componentes de v correspondientes a los valores contenidos en h. Anlogamente con A(h,k) si A es una matriz bidimensional y h y k son vectores de subndices. EJEMPLOS (referencias a subconjuntos mediante vectores de subndices) >> v = [11,12,13,14,15,16,17,18,19 ,20] >> ind = [2,5,1,8] >> v(ind) ans = 12 15 11 18 >> A=[1.1,1.2,1.3;2.1,2.2,2.3;3.1,3.2,3.3] >> A(2:3,1:2) % submatriz de A formada por la interseccin de las % filas 2 y 3 con las columnas 1 y 2 es el vector [n,n+1,n+2,...,m] de elementos de una matriz

Recurdese que n:m

El smbolo : (dos puntos) en el lugar de un ndice indica que se toman todos. El smbolo end indica el ltimo valor del subndice. EJEMPLOS >> A(:,2) >> A(:,2:end) >> A(:) % la segunda columna de A % las columnas de A desde la 2 hasta la ltima % todos los elementos de A, en una sola columna

Si B es un vector booleano (sus elementos son true y false, que MATLAB muestra como 1 y 0) entonces A(B) es la submatriz que se obtiene considerando o no cada elemento en funcin del valor verdadero o falso del vector booleano:

EJEMPLOS (referencias a subconjuntos mediante vectores booleanos) >> v=linspace(1,5,9);

de

elementos

de

una

matriz

>> b=[true,true,true,false,f alse,true,true,false,false] b = 1 1 1 0 0 1 1 0 0 >> w=v(b)

Esta sintaxis para designar conjuntos de elementos de un matriz puede usarse tanto para recuperar los valores que contienen (para, por ejemplo, utilizarlos en una expresin), como para asignarles valores. Cuando estas expresiones aparecen a la izquierda de un signo igual (es decir, en una instruccin de asignacin) pueden tener distintos significados:

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB EJEMPLOS (asignacin de valores a partes de una matri z y modificacin de su dimensin) (se recomienda ejecutarlos para comprender sus efectos) >> A=rand(4,4) >> A(2,2)=0 >> A(5,2)=1 % Se almacena en A una matriz 4x4 de num. aleatorios % Se modifica el segundo elem. diagonal de A % % % % Obsrvese que A(5,2) no exista:: de hecho, se MODIFICAN LAS DIMENSIONES de la matriz, para AADIR el elemento A(5,2). El resto se llena con ceros. Ahora A es una matriz 5x4

11

>> A(2:3,1:2)=1 >> A(:,2)=[]

% La submatriz A(2:3,1:2) se llena con unos % El smbolo [] representa una "matriz vaca" % Esta instruccin ELIMINA la segunda columna de A % Ahora A tiene dimensin 5x3 % Se aade a A una nueva columna al final

>> A=[A,[1:5]']

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB 5. REPRESENTACIN GRFICA DE FUNCIONES DEFINIDAS POR UNA FRMULA

12

Los comandos que se presentan en este apartado son funciones MATLAB fciles de usar (easy-to-use) para representar grficamente, de forma rpida, funciones definidas por una expresin matemtica. Tienen slo un pequeo nmero de parmetros que se pueden especificar. Todas ellas hacen uso de otras funciones MATLAB que disponen de un nmero superior de opciones y parmetros que podemos modificar. Cuando se necesite hacer grficas de funciones que no vienen definidas por una frmula (definidas a trozos, definidas a travs de programas o por sus valores en un nmero finito de puntos, ) habr que recurrir a dichas funciones ms generales. 5.1 Curvas planas El comando ms fcil de usar de que dispone MATLAB para dibujar curvas planas definidas por una frmula matemtica (no por un conjunto de valores) es el comando ezplot, que puede ser usado de varias formas. donde f es una cadena de caracteres conteniendo la expresin de una funcin y=f(x) dibuja la funcin y=f(x) para x en el intervalo [-2! ,2! ] Ejemplo: >> ezplot('2*sin(x/2)*cos(3*x)')

ezplot(f)

lo mismo que la anterior para x variando en el intervalo [a,b] ezplot(f,[a,b]) Ejemplo: >>ezplot('2*sin(x/2)*cos(3*x)',[0,pi /2])

ezplot(f) ezplot(f,[a,b])

si f es una expresin de (x,y), dibuja la curva implcitamente definida por f(x,y)=0, para x e y variando en el intervalo [-2! ,2! ] en el primer caso y para x e y variando en el intervalo [a,b] en el segundo caso. Ejemplo: >> ezplot('x^2*y-1')

ezplot(x,y) ezplot(x,y,[a,b])

donde x e y son dos cadenas de caracteres conteniendo las expresiones de dos funciones x(t) e y(t) dibuja la curva de ecuaciones paramtricas x=x(t) y=y(t) para t en el intervalo [0,2! ], en el primer caso y para t en el intervalo [a,b] en el segundo Ejemplo: >> ezplot('sin(3*t)','cos(t)')

ezpolar(f) ezpolar(f,[a,b])

donde f es una cadena de caracteres conteniendo la expresin de una funcin f(") dibuja la curva definida en coordenadas polares por #= f(") para " variando en el intervalo [0,2! ], en el primer caso y en el intervalo [a,b] en el segundo Ejemplo: >> ezpolar('sin(2*t)*cos(3*t)',[0,pi])

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB 5.2 Curvas en el espacio Para dibujar curvas en el espacio tridimensional, MATLAB dispone del comando ezplot3: donde x , y , z son tres cadenas de caracteres conteniendo las expresiones de tres funciones x(t) , y(t) , z(t) dibuja la curva de ecuaciones paramtricas x=x(t) y=y(t) z=z(t) para t en el intervalo [0,2! ], en el primer caso y para t en el intervalo [a,b] en el segundo Ejemplo: >>ezplot3('3*cos(t)','t*sin(t^2)','sqrt(t)')

13

ezplot3(x,y,z) ezplot3(x,y,z,[a,b])

5.3 Superficies donde f es una expresin de dos variables dibuja la superficie z=f(x,y) para (x,y) variando en el cuadrado [-! ,! ]x[-! ,! ] en el primer caso, en el cuadrado [a,b]x[a,b] en el segundo, y en el rectngulo [a,b]x[c,d] en el tercer caso. El mtodo de dibujo es una malla con segmentos coloreados, en funcin de los valores en los extremos. Ejemplo: >> ezmesh('x*exp(-x^2 - y^2)')

ezmesh(f) ezmesh(f,[a,b]) ezmesh(f,[a,b,c,d])

ezmesh(x,y,z) ezmesh(x,y,z,[a,b]) ezmesh(x,y,z,[a,b,c,d])

donde x, y, z son expresiones de funciones de dos variables dibuja la superficie de coordenadas paramtricas x=x(s,t) y=y(s,t) z=z(s,t) para (s,t) variando en el cuadrado [-2! ,2! ]x[2! ,2! ] en el primer caso, en el cuadrado [a,b]x[a,b] en el segundo, y en el rectngulo [a,b]x[c,d] en el tercer caso Ejemplo: >> ezmesh('s*cos(t)','s*sin(t)','t',[ pi,pi])

en cualquiera de los usos anteriores, dibuja la funcin correspondiente sobre un crculo centrado en el origen ezmesh(... , circ) Ejemplo: >> ezmesh('x*exp(-x^2 - y^2)','circ')

ezcontour(f) ezcontour(f,[a,b]) ezcontour(f,[a,b,c,d])

dibuja las lneas de nivel (isovalores) de la funcin z=f(x,y) Ejemplo: >> ezcontour('x*exp(-x^2 - y^2)')

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB hace lo mismo que ezcontour, pero rellenando con un color slido las distintas zonas determinadas por las lneas de nivel Ejemplo: >> ezcontourf('x*exp(-x^2 - y^2)')

14

ezcontourf(. . . )

con los mismos argumentos que ezmesh, dibuja simultneamente las lneas de nivel y la superficie ezmeshc(f) Ejemplo: >> ezmeshc('sin(u/2)*sin(v/2)')

dibuja una superficie coloreada z=f(x,y). Sus argumentos son como en ezmesh ezsurf(f) Ejemplo: >> ezsurf('sin(sqrt(x^2+y^2))/sqrt(x^2+y^2)')

como la anterior pero, adems, dibuja las lneas de nivel Ejemplo: ezsurfc(f) >>ezsurfc('sin(sqrt(x^2+y^2))/sqrt(x^2+y^2)')

En los comandos expuestos en este apartado aparecen los argumentos f, x , y z , que representan las funciones a dibujar. En todos los ejemplos se ha escrito directamente la expresin en la llamada a la funcin ez*** correspondiente, como una cadena de caracteres. No obstante, tambin se pueden suministrar dichas funciones de otras dos formas: 1. Mediante un handle (manejador) de una funcin annima (vase apartado 2.3)

en vez de >> ezmeshc('sin(u/2)*sin(v/2)') se podra haber escrito: ezmeshc(f) >> fun=@(u,v) sin(u/2)*sin(v/2) >> ezmeshc(fun)

2.

Mediante un handle de una M-funcin escrita en un fichero (vase apartado 2.2) >> ezmeshc(@fun)

ezmeshc(f)

siendo fun la M-funcin, almacenada en el fichero fun.m, siguiente: function [z]=fun(u,v) z= sin(u/2)*sin(v/2);

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB 5.4 Algunos comandos grficos auxiliares

15

Se ven aqu algunos comandos que modifican el aspecto de un grfico. En estas notas no se exponen todas las posibilidades de estos comandos. Utilizando el help de MATLAB, se pueden ver el resto de las opciones. Para mostrar el efecto de los comandos se utilizar la siguiente figura, creada con la orden >> ezsurf('sin(sqrt(x^2+y^2))/sqrt(x^2+y^2)')

grid on grid off muestra esconde la cuadrcula

xlabel(Etiqueta para el eje x) ylabel(Etiqueta para el eje y) zlabel(Etiqueta para el eje z) title(Ttulo de la grfica)

axis on axis off

axis([x1,x2,y1,y2,z1,z2]) Determina los lmites de la grfica. En grficos bidimensionales no se incluyen z1, z2. axis auto impone los lmites establecidos por defecto por MATLAB, determinados en funcin de los lmites de la grfica actual Ejemplo: axis([-10,10,-10,10,0,4])

axis equal determina los mismos factores de escala para todos los ejes (esto hara, por ejemplo, que una circunferencia se vea redonda en vez de elptica...)

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB

16

Z
Punto de observacin

view(r,e) en las grficas tridimensionales permite cambiar el punto de observacin del objeto representado. Los valores por defecto son r=-37.5, e=30 >> view(10,50)

e r

shading determina la forma de utilizar los colores de las superficies coloreadas: shading flat la funcin color es constante a trozos (en cada segmento o panel) shading interp la funcin color es bilineal a trozos (en cada segmento o panel) shading faceted (es la opcin por defecto) la funcin color es constante a trozos (como en flat), pero adems se superpone el dibujo de la malla con los segmentos en negro

hold on . . . hold off figure figure(h)

Todas las rdenes de dibujo entre ambos comandos se ejecutan sobre la misma ventana grfica, sin borrar lo anterior. Crea una nueva ventana grfica, la activa y la trae al frente, delante de todas las ventanas abiertas. En el primer caso le asigna un nmero de forma automtica. En el segundo caso le asigna el nmero h, es decir, el nombre Figure No. h Devuelve el nmero de la ventana grfica activa en ese momento. Trae la ventana grfica activa al frente de todas. Borra la figura de la ventana grfica activa. No cierra la ventana; slo borra su contenido. Cierra la ventana grfica activa, en el primer caso, o la de nmero h, en el segundo.

gcf shg clf close close(h)

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB subplot(m,n,p) Este comando permite dividir la ventana grfica en una matriz mxn de sub-ventanas grficas, activando para dibujar la p-sima de ellas. Ver ejemplo siguiente: >> subplot(2,2,1); ezcontour('x* exp(-x^2 - y^2)');

17

>> subplot(2,2,2); ezmeshc('sin(u/2)*sin(v/2)');

>> subplot(2,2,3); ezmesh('x*exp( -x^2 - y^2)');

>> subplot(2,2,4); ezplot('sin(3*x)');

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB 6. SISTEMAS LINEALES. AUTOVALORES Y AUTOVECTORES Para la resolucin "rpida" de sistemas lineales MATLAB dispone del "operador" \ (backslash): Si A es una matriz cuadrada nxn no singular y b es un vector columna de longitud n, entonces >> x = A\b;

18

calcula la solucin del sistema lineal de ecuaciones Ax=b . Para recordar la sintaxis, debe asimilarse el operador \ con una "divisin por la izquierda", es decir A\b es como A-1b . Este operador debe ser usado con precaucin: Si la matriz A es singular o mal condicionada, la instruccin A\b emite un mensaje de advertencia, pero devuelve en cualquier caso un resultado, que puede ser disparatado. Si la matriz A no es cuadrada (teniendo el mismo nmero de lneas que el segundo miembro) entonces la instruccin A\b devuelve, sin advertir absolutamente nada, una solucin de mnimos cuadrados:

En el caso en que la solucin de mnimos cuadrados no es nica (la matriz A no es de rango mximo), la solucin que devuelve NO es la de norma mnima. Para obtener esta ltima es mejor utilizar la instruccin siguiente, que utiliza la pseudo-inversa de la matriz A: >> pinv(A)*b Los autovalores de una matriz se pueden calcular mediante la funcin: >> eig(A) Si se desean obtener, adems, los vectores propios, hay que llamar a la funcin spec de la siguiente forma: >> [V,D]=eig(A) mediante la cual se obtienen D : matriz cuadrada diagonal con los autovalores y V : matriz cuadrada invertible cuya i-sima columna es un vector propio asociado al i-simo autovalor. Otras funciones de inters pueden ser:

A/B

El operador / (slash) representa la divisin por la derecha: A/B es como A*B -1 . Luego X= A*B -1 es la solucin de X*B=A. Por esta razn, si k es un escalar y A es una matriz, A/k es A*k -1 = A*(1/k)

determinante de la matriz cuadrada A Atencin: este clculo se lleva a cabo a partir de los factores det(A) triangulares LU que se obtienen por eliminacin gaussiana. Por ello, si la matriz es mal condicionada, los errores de redondeo pueden producir respuestas patolgicas. rank(A) rango de la matriz A (mtodo basado en descomposicin SVD) Nmero de condicin de la matriz A en norma 2: $ max / $ min cond(A) (Si es muy grande, la matriz est mal condicionada) Inverso del nmero de condicin de la matriz A en norma 1: rcond(A) (Si es prximo a 1, la matriz est bien condicionada; si es prximo a cero est mal condicionada) Base ortonormal del ncleo de la matriz A null(A) (subespacio {x : Ax=0} ) inv(A) inversa de la matriz A lu(A) factorizacin LU de la matriz A chol(A) factorizacin de Cholesky de la matriz A qr(A) factorizacion QR de la matriz A Casi todas las funciones MATLAB relacionadas con el lgebra lineal numrica estn basadas en rutinas de la librera LAPACK. Para explicaciones ms completas sobre estos y otros temas relacionados con el lgebra lineal ver: Help ! MATLAB ! Mathematics ! Matrices and Linear Algebra Para referencias completas sobre estas y otras funciones relacionadas ver: Help ! MATLAB ! Functions-Categorical List ! Mathematics ! Linear Algebra
Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB 7. POLINOMIOS, INTERPOLACIN Y GEOMETRA COMPUTACIONAL

19

7.1 Polinomios MATLAB representa los polinomios como vectores fila que contienen los coeficientes ordenados de mayor a menor potencia. >> p=[c1, c2, c3,..., cn]

representa el polinomio A continuacin se muestran algunas funciones relacionadas con polinomios: roots(p) poly(r) poly(A) polyval(p,x) conv(p,q) [c,r]= deconv(p,q) [r,p,k]= residue(p,q) [p,q]= residue(r,p,k) polyder(p) p=polyfit(x,y,n) Calcula las races del polinomio de coeficientes p Coeficientes del polinomio cuyas races son r Coeficientes del polinomioco de la matriz A Devuelve el valor en x del polinomio cuyos coeficientes son p Producto de los polinomios p y q Cociente y resto de la divisin p/q : p = conv(c,q) + r Calcula los coeficientes de la descomposicin en fracciones simples de la expresion racional p/q y viceversa Ver HELP para detalles derivada del polinomio p Calcula los coeficientes del polinomio de grado n que se ajusta a un conjunto de puntos, de coordenadas (x_i, y_i), en el sentido de los mnimos cuadrados.

Ms informacin en: Help ! MATLAB ! Mathematics ! Polinomials and Interpolation ! Polinomials Help ! MATLAB ! Functions-Categorical List ! Mathematics ! Polinomials 7.2 Interpolacin MATLAB dispone de una gran cantidad de funciones relacionadas con la interpolacin. Para una descripcin completa vase Help ! MATLAB ! Mathematics ! Polinomials and Interpolation ! Polinomials Help ! MATLAB ! Functions-Categorical List ! Mathematics ! Polinomials Algunas de ellas son: Interpolacin en dimensin 1 Devuelve, en el vector yi, los valores en los puntos contenidos en el vector xi, de la funcin que interpola los valores X , Y El mtodo, por defecto, es lineal a trozos Son funciones anlogas, pero en dimensin 2, 3 y n respectivamente Ver HELP Similar a interp2 pero los datos que se interpolan (x, y, z) no necesitan estar ordenados Ver HELP Similares a griddata, en dimensiones 3 y n respectivamente Ver HELP Devuelve el valor en xi del spline cbico que interpola los valores (X,Y) Devuelve los coeficientes del spline cbico que interpola los valores (X,Y) (para ser usados con la funcin ppval) Calcula el valor en x del spline cbico determinado por pp (previamente calculado con la funcin spline) x puede ser un vector, en cuyo caso tambin lo es y Derivada del polinomio p

yi=interp1(X,Y,xi)

interp2 interp3 interpn griddata(x,y,z,xi,yi) griddata3 griddatan yi=spline(X,Y,xi) pp=spline(X,Y)

y = ppval(x,pp) polyder(p)

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB Calcula los coeficientes del polinomio de grado n que se ajusta a un conjunto de puntos, de coordenadas (x_i, y_i), en el sentido de los mnimos cuadrados

20

p=polyfit(x,y,n)

7.3 Geometra computacional Para una descripcin detallada, vase: Help ! MATLAB ! Mathematics ! Polinomials and Interpolation ! Interpolation ! Triangulation and Interpolation of Scattered Data Help ! MATLAB ! Functions-Categorical List ! Mathematics ! Interpolation and Computational Geometry k=convhull(x,y) [k,a]=convhull(x,y) tri=delaunay(x,y) tri=delaunay3(x,y,z) Envolvente convexa de los puntos dados: k son los ndices de los vrtices del polgono Devuelve, tambin, el rea del polgono Triangulacin de Delaunay (2D) Ver HELP Teselacin de Delaunay 3D (tetraedros, por defecto) Ver HELP Devuelve true si el punto (x,y) est en el polgono de vrtices (xp(i),yp(i)) x e y pueden ser vectores Dibuja el diagrama de Voronoi asociado a los puntos (x(i),y(i)) Ver HELP rea del polgono de vrtices (xp(i),yp(i)) rea de la interseccin de dos rectngulos: A y B A=[x,y,anchura,altura]; (x,y)=vrtice inf. izq. B anlogo Dibuja el polgono de vrtices (xp(i),yp(i)), relleno con el color c Ver en HELP ms detalles (muchos) Dibuja un polgono en el espacio 3D Dibuja la triangulacin tri de vrtices x e y Dibuja la superficie definida por la triangulacin tri, de vrtices x e y, y la funcin z : altura en el punto (x,y) Igual que trisurf, salvo que trimesh no da color a las facetas

in=inpolygon(x,y,xp,yp) voronoi(x,y) voronoi(x,y,,tri) a=polyarea(xp,yp) a=rectint(A,B)

patch(xp,yp,c) patch(xp,yp,zp,c) triplot(tri,x,y) trisurf(tri,x,y,z) trimesh(tri,x,y,z)

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB 8. RESOLUCIN DE ECUACIONES NO LINEALES Para resolver ecuaciones no lineales MATLAB dispone de la funcin fzero, cuya utilizacin ms sencilla es: >> x = fzero(fun,x0) >> [x,fval] = fzero(fun,x0) donde: fun x0 x fval

21

es un handle de la funcin que calcula f(x) (ver apartados 2.2 y 2.3 y ejemplos) Debe responder a la forma: [y]=fun(x) es el valor inicial de x , a partir del cual se comienza a buscar la solucin. En general, debe ser un valor prximo a la solucin buscada. es la solucin de la ecuacin (opcional) es el valor de f en la solucin

EJEMPLO Calcular la solucin de >> fun = @(x) 2*sin(x+2)+3*x -1 >> sol = fzero(fun , 0 ) sol = - 0.3301

El buen funcionamiento de la funcin fzero requiere que la funcin sea continua y que cruce el eje X. Si la funcin no es continua el algoritmo puede converger a un punto de discontinuidad. EJEMPLO : utilizacin fallida de fzero con una funcin discontinua La funcin y=tg(x) tiene discontinuidades en todos los mltiplos de pi/2

>> fzero(@tan , 1) ans = 1.5708

Si la funcin tiene un cero en el que no cambia de signo, el algoritmo no converger. EJEMPLO : utilizacin fallida de fzero con una funcin que no cambia de signo La funcin y=x^2 tiene un cero en x=0 en el que no cambia de signo >> fzero(@(x) x^2, 0.5) Exiting fzero: etc. ans = NaN

En el mejor de los casos, fzero slo calcula UNA solucin de la ecuacin. En caso de mltiples soluciones, hay que utilizarla una vez para cada solucin que interese encontrar y cobra ms importancia el hecho de que el punto inicial, x0, est prximo a la solucin.

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB EJEMPLO : utilizacin de fzero con multiplicidad de soluciones La funcin y=x sen(4ln(x)) tiene infinitas soluciones positivas. Aqu se calculan algunas: >> fun=@(x) x.*sin(4*log(x)); >> sol1 = fzero(fun , 0.5) sol1 = 0.4559 >> sol2 = fzero(fun , 1) sol2 = 1 >> sol3 = fzero(fun, 2) sol3 = 2.1933 La funcin fzero, puede tambin ser usada con un argumento opcional >> x = fzero(fun,x0,options)

22

que permite determinar varios parmetros relativos al modo de funcionamiento de la funcin fzero, como tolerancia a los errores admitida, mximo de nmero de iteraciones y/o de evaluaciones de la funcin permitidas, etc. (consultar HELP). A veces es preciso calcular ceros de funciones que dependen, adems de la variable independiente, de uno o varios parmetros. En el ejemplo siguiente se muestra cmo se pueden usar las funciones annimas para calcular dichos ceros utilizando fzero, sin tener que re-escribir la funcin coste para cada valor de los parmetros. Se desean calcular las coordenadas del punto de la curva y=sen(x) ms prximo a un punto dado, (a,b), que se determina en tiempo de ejecucin. Lo que hay que hacer para ello es minimizar la funcin

o bien hallar una raiz de la ecuacin

EJEMPLO : function PtoProx.m function [xs,ys]=PtoProx(a,b) % % [xs,ys] = punto de la curva y=sen(x) % mas proximo al punto (a,b) % fun=@(x) x-a+(sin(x)-b)*cos(x); xs= fzero(fun,a); ys=sin(xs);

La funcin fzero admite tambin ser utilizada con uno o varios argumentos de entrada ms, en la forma: >> x = fzero(fun,x0,options,p1,p2,p3,...)

Esto sirve para pasar parmetros auxiliares a la funcin fun : fzero no hace nada con ellos, simplemente los aade a lista de argumentos que enviar a fun cuando la llame. El ejemplo anterior tambin se podra haber hecho como sigue: EJEMPLO : function PtoProxBis.m function [xs,ys]=PtoProxBis(a,b) % % [xs,ys] = punto de la curva y=sen(x) % mas proximo al punto (a,b) % options=[]; xs= fzero(@fun,a,options,a,b); ys=sin(xs); % % function [y]=fun(x,a,b) y=x-a+(sin(x)-b)*cos(x);

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB 9. CLCULO DE MNIMOS DE FUNCIONES Para resolver el problema

23

MATLAB dispone de la funcin fminbnd, cuya utilizacin ms sencilla es: >> x = fminbnd(fun,a,b) >> [x,fval] = fminbnd(fun,a,b) donde: fun a,b x fval es un handle de la funcin que calcula f(x) (ver apartados 2.2 y 2.3 y ejemplos) Debe responder a la forma: [y]=fun(x) son los extremos del intervalo es una aproximacin del punto que produce el mnimo (opcional) es el valor de f en la solucin

Otras posibles utilizaciones de fminbnd son >> x = fminbnd(fun,a,b,options) >> [x,fval] = fminbnd(fun,a,b,options,p1,p2,...) El significado de los argumentos y la utilizacin de esta funcin debe resultar obvio despus de la lectura del epgrafe anterior sobre la funcin fzero. MATLAB dispone de la funcin fminsearch para calcular mnimos de funciones escalares de varias variables: >> >> >> >> x [x,fval] x x = = = = fminsearch(fun,x0) fminsearch(fun,x0) fminbnd(fun,x0,options) fminbnd(fun,x0,options,p1,p2,...)

fminsearch lleva a cabo una bsqueda del mnimo, partiendo de la aproximacin inicial x0. La utilizacin de esta funcin es similar a las dos anteriores. Si la funcin a minimizar depende de N variables, entonces fun debe responder a la forma [y]=fun(x), siendo x un vector de N componentes. Ver el ejemplo siguiente: EJEMPLO : Calcular, comenzando en (1,1), un mnimo de la funcin

>> fun = @(x) sin(x(1)/2)*sin(x(2)/2) ; >> xsol = fminsearch(fun,[1,1]) xsol = 3.1416 -3.1416

El algoritmo utilizado por fminsearch no utiliza informacin alguna sobre el gradiente de la funcin. En consecuencia no se puede esperar gran cosa de l en segn qu casos ... El punto encontrado puede ser slo un mnimo local.

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB 10. CLCULO DE INTEGRALES DEFINIDAS La funcin MATLAB quad sirve para calcular integrales definidas:

24

Su utilizacin ms sencilla es: >> v = quad(fun,a,b) donde: fun a,b es un handle de la funcin que calcula el integrando f(x) Debe responder a la forma: [y]=fun(x) y su cdigo debe estar vectorizado, esto es, debe poder admitir como argumento x un vector y devolver un vector. son los lmites de integracin

EJEMPLO Calcular

>> fun = @(x) x.*sin(4*log(x)); >> area = quad(fun,0.2,3) area = -0.2837

Otros argumentos opcionales de la funcin quad son: >> v = quad(fun,a,b,tol,trace) que permiten determinar el nivel de tolerancia del error admitido, as como el nivel de parloteo durante los clculos (ver HELP). La funcin quad permite tambin el paso de parmetros a la funcin integrando, mediante >> v = quad(fun,a,b,tol,trace,p1,p2,..) EJEMPLO Calcular

>> fun = @(x,k) x.*sin(4*log(k*x)); >> k=3.33; >> area = quad(fun,0.2,3,[],[],3.33) area = 1.9558 >> k=0.22; >> area = quad(fun,0.2,3,[],[],0.22) area = -0.7245

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB Para calcular integrales dobles

25

se puede usar la funcin dblquad >> w = dblquad(fun,a,b,c,d) La funcin fun debe responder a la forma [v]=fun(x,y) y admitir un vector como argumento x (y devolver un vector de su misma dimensin).

EJEMPLO Calcular

>> fun = @(x,y) 1./(1+x.^2+y^2); >> dblquad(fun,-1,1,0,1) ans = 1.2790

La funcin >> w = triplequad(fun,a,b,c,d ,e,f) permite calcular una integral triple:

La funcion integrando debe responder a la forma [w]=fun(x,y,z) y admitir un vector como argumento x (y devolver un vector de su misma dimensin).

EJEMPLO

Calcular

>> fun=@(x,y,z) x.*sin(x)+z*cos(y)*cos(x); >> triplequad(fun,0,1,0,1,0 ,1) ans = 0.6552

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB 11. RESOLUCIN DE ECUACIONES DIFERENCIALES

26

Para resolver problemas relativos a (sistemas de) ecuaciones diferenciales ordinarias MATLAB dispone de una buena cantidad de funciones. La resolucin numrica de (un problema relativo a) una ecuacin diferencial consiste en hallar valores numricos que aproximen los valores en determinados puntos de la solucin exacta del problema en cuestin.

11.1 Problemas de valor inicial para ecuaciones diferenciales ordinarias Para resolver problemas de valor inicial como

MATLAB dispone de la familia de funciones ode***. Cada una de ellas implementa un mtodo numrico distinto de resolucin de ecuaciones diferenciales ordinarias, siendo adecuado usar unas u otras en funcin de las dificultades de cada problema concreto. La utilizacin de todas las funciones de la familia ode** es similar, al menos en lo ms bsico. En primera instancia, para resolver problemas no demasiado difciles, se deben usar las funciones ode45 y ode23. Su utilizacin ms sencilla es: >> ode45(fun,[t0,tf],y0) donde: fun [t0,tf] y0 es un handle de la funcin que calcula el segundo miembro f(t,y) Debe responder a la forma: [dy]=fun(t,y) y puede ser una funcin annima o una M-funcin es el intervalo en el que se desea resolver la ecuacin es el valor de la condicin inicial

EJEMPLO: Problema de valor inicial para una ed. diferencial ordinaria

RESOLUCIN INTERACTIVA En este caso e f(t,y) = 0.3(2-y)y, y0= 0.1 [t0,tf] = [0,20]

>> fun= @(t,y) 0.3*y*(2-y) ; >> ode45(fun,[0,20],0.1) Como resultado de la ejecucin de esta orden se obtiene la grfica de la solucin numrica

Si lo que se desea es recuperar los valores de la solucin numrica se debe usar la funcin ode45 en la forma: >> [t,y] = ode45(fun,[t0,tf],y0)

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB

27

De esta manera se obtienen dos vectores, t e y, conteniendo, respectivamente, las abscisas y las ordenadas de la solucin numrica, que luego se podrn utilizar a conveniencia.

Para el mismo problema del ejemplo anterior, se desea calcular el valor en t=20 de la solucin: >> fun= @(t,y) 0.3*y*(2-y) ; >> [t,y] = ode45(fun,[0,20],0.1); >> plot(t,y,'Color','red') >> y(end) ans = 1.9998

Si se desea conocer el valor de la solucin numrica en puntos intermedios del intervalo [t0,tf], se puede utilizar la funcin ode45 en combinacin con la funcin deval de la siguiente forma: >> sol = ode45(fun,[t0,tf],y0); >> yint = deval(xint,sol); donde xint es el punto del intervalo en el que se desea evaluar la solucin. xint puede ser un vector, en cuyo caso yint ser un vector de la misma dimensin.

Para el mismo problema del ejemplo anterior, se desea calcular el valor en t=2.333 de la solucin: >> fun = @(t,y) 0.3*y*(2-y) ; >> sol = ode45(fun,[0,20],0.1); >> yint = deval(2.333,sol) ; yint = 0.3517

Las mismas funciones de la familia ode*** sirven para resolver numricamente sistemas de ecuaciones diferenciales ordinarias. Para ello basta escribir dichos sistemas en notacin vectorial, es decir, como una ecuacin diferencial de la forma

cuyas soluciones son funciones dependientes de t con valores vectoriales . El ejemplo siguiente ayudar a comprender esto y a explicar cmo utilizar la funcin ode45 (u otra de la familia) para resolver numricamente un problema de valores iniciales asociado a un sistema diferencial.

El problema de valores iniciales siguiente

se escribe en notacin vectorial

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB Las rdenes siguientes permiten calcular la solucin de este problema: obsrvese que fun(t,y) es un vector columna con dos componentes, igual que la condicin inicial. >> fun = @(t,y) [ 0.5*y(1) -0.2*y(1)*y(2) ; -0.5*y(2)+0.1*y(1)*y(2) ]; >> ode45(fun,[0,20],[ 10 ; 4 ])

28

Estas rdenes dibujarn las grficas de las dos componentes de la solucin. Las leyendas se han insertado con la orden >> legend('y_1(t)','y_2(t)')

De la misma manera que antes, se pueden usar las funciones ode** para recuperar los valores de la solucin numrica:

Para el mismo problema del ejemplo anterior, dibujar la primera componente de la solucin:

>> [t,y]= ode23(fun,[0,20],[ 10 ; 4 ]); >> plot(t,y(:,1),'Color',[1,0,0],'LineWidth',1.5) >> legend('y_1(t)')

Tambin se puede evaluar la solucin numrica con ayuda de la funcin deval, como antes.

Dibujar la grfica de la solucin en el plano de fases (grfica de y_2 frente a y_1) >> >> >> >> sol = ode23(fun,[0,20],[ 10 ; 4 ]); tt = linspace(0,20,100) ; yy = deval(tt,sol) ; plot(yy(1, :),yy(2, :))

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB

29

11.2 Problemas de valor inicial para ecuaciones diferenciales ordinarias de orden superior a 1 Las mismas funciones son tambin vlidas para resolver problemas de valor inicial relativos a ecuaciones diferenciales ordinarias de orden superior a 1, como:

Un problema como este siempre se puede, mediante un sencillo cambio de variable, escribir como un sistema diferencial de primer orden equivalente. En efecto, el cambio de variable: transforma el problema anterior en el siguiente sistema, cuya expresin vectorial se da al lado:

EJEMPLO: ecuacin de van der Pol La ecuacin de segundo orden llamada de van der Pol, es equivalente al sistema diferencial de primer orden

en el sentido de que, si se conoce una solucin (z1(t),z2(t)) del sistema, entonces y(t)=z1(t) es una solucin de la ecuacin. El problema de valor inicial

es as equivalente a

RESOLUCIN

>> >> >> >>

alpha = 5; fun=@(t,z) [z(2) ; alpha*(1-z(1).^2).*z(2)-z(1) ]; [t,y] = ode23(fun,[0,50],[2;0]); plot(t,y( :,1)) % 1a. componente

>> plot(y(:,1),y(:,2)) % rbita en el plan o de fases

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB 11.3 Ecuaciones diferenciales ordinarias con retardo En construccin. 11.4 Problemas de contorno para sistemas diferenciales de primer orden Consideramos aqui problemas diferenciales del tipo siguiente:

30

donde son las condiciones de contorno, esto es, condiciones que involucran los valores de la solucin buscada en ambos extremos del intervalo. Por ejemplo, el problema diferencial (con condiciones de contorno) (que tiene dos soluciones) se puede escribir en la forma anterior:

La funcion MATLAB bvp4c permite resolver este tipo de problemas. Su uso es el siguiente: >> sol = bvp4c(odefun,bcfun, solinit) donde odefun es la funcin que evala el segundo miembro del sistema diferencial, Debe ser de la forma [dzdt] = odefun(t,z) es la funcin que describe la condicin de contorno Debe ser de la forma [res] = bcfun(za,zb) es una estructura que proporciona un ensayo inicial para la solucin. Puede ser construida con ayuda de la funcin bvpinit, cuya forma ms sencilla de uso es solinit = bvpinit(tmesh,zinit) donde tmesh es una particin inicial del intervalo [a,b] y zinit es un valor inicial para la solucin, por ejemplo un vector constante (tambin puede ser una funcin; ver HELP). es una estructura que permite recuperar los valores de la solucin numrica. sol.x es la particin final del intervalo [a,b] (vector fila 1 x N) sol.z son los valores de las componentes de la solucin en los puntos de la particin anterior (matriz n x N) (n = nmero es sistema) Tambin permite, con ayuda de la funcin deval, evaluar la solucin en cualquier punto del intervalo [a,b]: z = deval(t,sol)

bcfun solinit

sol

EJEMPLO: problema de contorno para una e.d.o. de 2o. orden Calcular una solucin de

RESOLUCIN >> >> >> >> >> >> >> >> >> >> ftz = @(t,z) [ z(2) ; -abs(z(1)) ] ; fbc = @(za,zb) [ za(1) ; zb(1)+2 ] ; tt = linspace(0,4,10) ; zinit = [ 1 ; 0 ] ; solinit = bvpinit(tt,zinit) ; sol = bvp4c(ftz,fbc,solinit) ; t = sol.x ; z = sol.y ; plot(t,z) legend('z_1(t)','z_2(t)')

(La otra solucin se puede encontrar eligiendo zinit = [-1 ; 0] )

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB 11.5 Problemas de contorno para sistemas diferenciales de primer orden con parmetros La funcin bvp4c tambin puede resolver problemas de contorno con parmetros desconocidos:

31

En ese caso bvp4c se utiliza en la misma forma, pero cambia la definicin de sus argumentos: >> sol = bvp4c(odefun,bcfun,solinit) donde odefun bcfun solinit es la funcin que evala el segundo miembro del sistema diferencial, Debe ser de la forma [dzdt] = odefun(t,z,p) es la funcin que describe la condicin de contorno Debe ser de la forma [res] = bcfun(za,zb,p) es una estructura que proporciona un ensayo inicial para la solucin. Puede ser construida con ayuda de la funcin bvpinit, cuya forma ms sencilla de uso es solinit = bvpinit(tmesh,zinit,pinit) donde tmesh es una particin inicial del intervalo [a,b], zinit es un valor inicial para la solucin, por ejemplo un vector constante (tambin puede ser una funcin; ver HELP), y p es el valor inicial para el los parmetros es una estructura que permite recuperar los valores de la solucin numrica. sol.x es la particin final del intervalo [a,b] (vector fila 1 x N) sol.z son los valores de las componentes de la solucin en los puntos de la particin anterior (matriz n x N) (n= nmero de ecuaciones) sol.parameters es el valor encontrado para la incgnita p Tambin permite, con ayuda de la funcin deval, evaluar la solucin en cualquier punto del intervalo [a,b]: z = deval(t,sol)

sol

EJEMPLO: clculo de un autovalor y una autofuncin para una e.d.o. de 2o. orden Se considera el siguiente problema de autovalores

Este problema tiene infinitas soluciones : Es equivalente al siguiente problema de contorno para un sistema diferencial de primer orden

Al haber ahora una incgnita ms (el parmetro

$ ) se necesita imponer una incgnita ms


o lo que es

(que fije una entre todas las autofunciones). Imponemos, por ejemplo, lo mismo . Con ello, el sistema a resolver queda

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB RESOLUCIN >> >> >> >> >> >> >> >> >> funode = @(t,z,lambda) [ z(2) ; -z(2)/t - lambda*z(1)/(t*t) ]; funbc = @(za,zb,lambda) [ za(1) ; zb(1) ; za(2) -1 ]; solinit = bvpinit(linspace(1,exp(1),10),[1;1],100); sol = bvp4c(funode,funbc,solinit); tt = linspace(1,exp(1)); zz = deval(tt,sol); plot(tt,zz) lambda = sol.parameters ; title(['Autofuncion asoc. al autovalor ',num2str(lambda)])

32

11.6 Ecuaciones y sistemas de ecuaciones en derivadas parciales parablicas y elpticas dependientes de una variable espacial y del tiempo En construccin.

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Breves apuntes para comenzar con MATLAB 12. INSTRUMENTOS BSICOS DE PROGRAMACIN 12.1. Decisiones y bucles

33

Las sentencias MATLAB para implementar las tomas de decisin (bifurcaciones) y los bucles (repeticiones) son las siguientes: Sentencia IF En su forma ms simple se escribe en la forma siguiente: if condicion sentencias end Tambin se puede utilizar en la forma: if condicion sentencias-1 else sentencias-2 end Su forma ms compleja es: if condicion-1 sentencias-1 elseif condicion-2 sentencias-2 elseif condicion-3 sentencias-3 else sentencias-4 end En estas instrucciones, condicion es una expresin con valor lgico (true o false). Si el valor de la expresin es una matriz, slo se ejecuta el conjunto de sentencias si todos los elementos son true (o, igualmente, distintos de cero). Sentencia SWITCH Es anloga a un conjunto de if ... elseif concatenados. Su forma general es: switch expresion case caso-1 sentencias-1 case caso-2 sentencias-2 case {caso-3, caso-4,caso-5,...} sentencias-3 otherwise sentencias-4 end Aqu, expresion debe tener un valor numrico o de cadena de caracteres. Ejemplo tonto de uso de SWITCH % % Ver ms adelante el uso de las instrucciones input y disp % resp=input('escribe un numer o del 0 al 9 :: '); % switch resp case 0 disp('Has escrito 0 (cero)') case 1 disp('Has escrito 1') case {2,3,4,5} disp('Has escrito un numero entre 2 y 5') otherwise disp('has escrito un numero mayor que 5') end;

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Sentencia FOR Repite un conjunto de sentencias un numero predeterminado de veces. Su forma general es la siguiente: for variable=vector-fila sentencias end Se ejecuta el conjunto de sentencias tantas veces como elementos tenga el vector-fila, y en cada repeticin, la variable toma el valor del elemento correspondiente. Por ejemplo, se puede usar en la forma: for i=1:n sentencias end que ejecutar el conjunto de sentencias n veces, para i=1,2,3,...,n. En la forma: for i=n:-1:1 sentencias end se ejecuta el conjunto de sentencias tambin n veces, pero en orden inverso: i=n,n-1,...,1.

Sentencia WHILE Repite la ejecucin de un conjunto de sentencias mientras que una determinada condicin se verifique. Su forma general es: while condicion sentencias end Se ejecutar el bloque de sentencias mientras que condicion tome el valor true, o mientras que condicion sea distinto de cero.

Sentencia CONTINUE Detiene la ejecucin de la iteracin actual en un bucle for o while y pasa el control a la siguiente iteracin. Sentencia BREAK Detiene completamente la ejecucin de un bucle for o while. Si hay bucles anidados, se detiene la ejecucin del ms interno.

12.2. Operadores de relacin y lgicos Operadores de relacin o comparacin Los siguientes operadores producen como resultado un valor lgico: true false (cualquier valor distinto de cero) (cero)

Cuando estos operadores se utilizan para comparar dos matrices de las mismas dimensiones, el resultado es otra matriz de la misma dimensin y la comparacin se realiza elemento a elemento. Cuando se utilizan para comparar un escalar con una matriz, el resultado es una matriz, y se compara el escalar con cada uno de los elementos. == ~= < > <= >= Igual a No igual a Menor que Mayor que Menor o igual que Mayor o igual que

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Una introduccin rpida a MATLAB Operadores lgicos Son operadores que actuan entre valores lgicos: & Y lgico A&B produce los resultados que se reflejan en la tabla A&B es equivalente a and(A,B) O lgico A|B produce los resultados que se reflejan en la tabla A|B es equivalente a or(A,B) Negacin lgica ~A produce los resultados que se reflejan en la tabla ~A es equivalente a not(A)

35

A T F T T F B F F F &

A T F T T T B F T F |

A T F NOT(A) F T

MATLAB dispone, adems, de los operadores && y || llamados respectivamente short-circuit and y short-circuit or , que slo son vlidos entre operandos escalares y que se diferencian de los anteriores en que, si no es necesario, no calculan el segundo operando. Por ejemplo, suponiendo que A=1 y que B=2, la operacin (A==2) & (B==2) evaluara en primer lugar A==2 (resultado false), evaluara en segundo lugar B==2 (resultado true) y evaluara por ltimo false & true (resultado false). Sin embargo, la operacin (A==2) && (B==2) evaluara A==2 (resultado false) y dara directamente false como resultado, sin evaluar el segundo operando. 12.3. Instrucciones sencillas de entrada/salida Funcin INPUT Permite imprimir un mensaje en la linea de comandos y leer datos desde el teclado. La instruccin >> resp=input(Mensaje que se imprime) imprime Mensaje que se imprime en una linea de la ventana de comandos y se queda esperando a que el usuario teclee un valor o una expresin. Si se teclea un valor (escalar o matricial), MATLAB lo almacena en la variable resp. Si se teclea una expresin, MATLAB la evalua con los valores actuales de las variables del Workspace, y el resultado se almacena en la variable resp. Si en el mensaje se incluye el comando \n, se produce un salto de linea. Funcin DISP Permite imprimir en la pantalla un mensaje de texto: >> disp(Mensaje que se imprime) Tambin permite imprimir el valor de una variable, sin imprimir su nombre: >> a=[1,2;3,4]; >> disp(a) 1 2 3 4 Para mezclar texto con el valor numrico de una variable o expresin, hay que transformar el valor numrico en la cadena de texto equivalente y concatenar las cadenas. Por ejemplo: >> disp([ 'El numero pi vale : ' , num2str(pi) ]) El numero pi vale : 3.1416

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Una introduccin rpida a MATLAB 12.4. Instrucciones detalladas de entrada/salida En construccin. 12.4. Lectura y escritura en/desde ficheros En construccin.

36

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Una introduccin rpida a MATLAB 13. COMANDOS DE DIBUJO 2D Y 3D

37

Vemos aqu los comandos ms completos de que dispone MATLAB para dibujar curvas planas y en el espacio, superficies, lineas de nivel, etc. La diferencia con los que se vieron en la Seccin 5 es que aqu hay que proporcionar a las funciones los datos numricos para construir la grfica. Si x e y son dos vectores de la misma dimensin, n, dibuja una curva (lineal a trozos) que pasa por los puntos (xi , yi), i=1, n plot(x,y) Ejemplo: >> x=0:pi/100:4*pi; >>y=sin(x).*cos(x/3); >> plot(x,y)

Dibuja las dos curvas (x1i , y1i), i=1, n1 y (x2i , y2i), i=1, n2 en la misma ventana y en los mismos ejes plot(x1,y1,x2,y2) Ejemplo: >> x=0:pi/100:4*pi; >> y=sin(x).*cos(x/3); >> z=sin(x).*cos(x/2); >> plot(x,y,x,z)

donde x es un vector-columna (resp. fila) y A es una matriz, dibuja tantas curvas (xi , Aij), i=1, n (como columnas (resp. filas) tenga la matriz A plot(x,A) Ejemplo: >> x=0:pi/100:4*pi; >>A=[sin(x);sin(x/2);sin(x/3);sin(x/4)]; >> plot(x,A)

El comando plot asigna, por defecto, determinados colores a las grficas. Estos colores, as como el tipo de lnea a utilizar para dibujar (continua, de puntos, con marcadores, etc.) se pueden modificar. donde param es una cadena de caracteres como mximo, cada uno a elegir de una de las columnas siguientes: b amarillo . asteriscos - lnea slida b azul . puntos - lnea slida g verde o crculo : l. de puntos r rojo x aspas -. punto-guin c cyan + cruces -- guiones m magenta * asteriscos y amarillos s square k negro d diamantes v tringulos etc. (consultar help plot) Ejemplo: >> x=0:pi/100:4*pi; >> y=sin(x).*cos(x/3); >> plot(x,y,r*)

plot(x,y,param)

plot3(x,y,z) plot3(x,y,z,param)

Si x , y , z son tres vectores de la misma dimensin, n, dibuja una curva tridimensional (lineal a trozos) que pasa por los puntos (xi , yi , zi), i=1, n Ejemplo: >> alpha=0:pi/80:8*pi; >> z=alpha/8; >> x=z/(8*pi)+z.*cos(alpha); >> y=z/(8*pi)+z.*sin(alpha); >> plot3(x,y,z)

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Una introduccin rpida a MATLAB Representa una superficie z=f(x,y) sobre una malla rectangular. Los argumentos x , y , z son matrices de la misma dimensin conteniendo, respectivamente, las coordenadas x , y , z de los nodos de la malla. Los segmentos de la malla se colorean segn los valores de la funcin (coordenada z) La funcin meshc hace lo mismo, pero dibujando adems las lneas de nivel en el plano XY La funcion meshgrid sirve para construir la malla de base, en el plano XY: Si xp es una particin del intervalo [x0,x1] e yp es una particin del intervalo [y0,y1], entonces >> [x,y]=meshgrid(xp,yp) construye dos matrices, x e y, que definen una malla del rectngulo [x0,x1]x[y0,y1] . La matriz x contiene las coordenadas X de los puntos de la malla y la matriz y sus coordenadas Y Ejemplo: >> >> >> >> xp=linspace(pi/4,2*pi,50); [x,y]=meshgrid(xp,xp); z=(cos(x)./x).*(sin(y)./sqrt(y)); mesh(x,y,z)

38

meshgrid(xp,yp) mesh(x,y,z) meshc(x,y,z)

La funcin surf hace lo mismo que mesh, pero dibujando los segmentos de la malla en color negro y rellenando los rectngulos de la malla de color, segn los valores de la funcin La funcin surfc hace lo mismo, pero dibujando adems las lneas de nivel en el plano XY La funcion surfl hace lo mismo que surf, pero adems aade una fuente de luz lateral

surf(x,y,z) surfc(x,y,z) surfl(x,y,z)

La funcin contour dibuja las proyecciones sobre el plano XY de las lneas de nivel (isovalores) La funcin contour3 dibuja las lneas de nivel sobre la misma superficie En ambos casos n es el nmero de lneas a dibujar. contour(x,y,z,n) contour3(x,y,z,n) Se puede usar la funcin colorbar para aadir a la grfica una barra con la graduacin de colores y la correspondencia con los valores de la funcin representada. (Esta funcin puede ser usada con cualquier otra funcin grfica que utilice colores).

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

Una introduccin rpida a MATLAB

39

colormap(m) permite cambiar el mapa de colores que se utiliza en la representacin. En general, m es una matriz con tres columnas, de modo que la i-sima fila determina las proporciones, en la escala RGB, del i-simo color utilizado. Para ms comodidad, MATLAB dispone de una serie de mapas de colores pre-definidos, que se pueden imponer mediante colormap(mapa) mapa puede tomar uno de los valores siguientes: hsv - la escala por defecto (hue-saturation-value). cool - Gama de colores entre cyan y magenta. hot - Gama de colores entre rojo oscuro y amarillo. gray - Gama de colores grises. copper - Gama de colores cobrizos. pink - Gama de colores rosados. flag - Alterna rojo blanco azul - negro. colorcube - Contraste de colores. autumn - Colores entre el rojo y el amarillo. spring - Colores entre el magenta y el amarillo. winter - Colores entre el azul y el verde. summer - Colores entre el verde y el amarillo. . . . para ms mapas ver help graph3d

cool

hot

pink

colorcube

autumn

summer

Rosa Echevarra Lbano Dpto. Ecuaciones Diferenciales y Anlisis Numrico Universidad de Sevilla

También podría gustarte