Sie sind auf Seite 1von 90

Funciones definidas por el usuario

El usuario pude agregar nuevas funciones al vocabulario de la MATLAB


MATLAB,
expresadas en trminos de las funciones existentes. Los comandos
existentes y las funciones que componen la nueva funcin de residir en un
archivo de texto llamado M-file ((*.m)
m)

Los m-archivos pueden ser una secuencias de comandos (scripts) o funciones.

Los scripts son simplemente los archivos que contienen una secuencia de
instrucciones de MATLAB.

Las funciones hacen uso de sus propias variables locales y aceptan argumentos de
entrada.

El nombre de un archivo-m debe comenzar con un carcter alfabtico (a,b,..) y tiene


una extensin de archivo *.m. El m-nombre de archivo, menos su extensin, es lo
que MATLAB busca cuando intenta utilizar la secuencia o funcin.
Ejemplo:

g ; b12_g
Nombre valido: algo123.m; g.m;; archivo de calculo.m

Nombre no valido: 12nombre.m; ?123.m; 3d45+23.m; a+3-2.m


SCRIPTS
Un script es una secuencia de instrucciones que Matlab guardada en un
archivo con extensin .m
Un SCRIPT no aceptan entrada de argumentos ni salida de argumentos
El Script,
p , almacena las variables en el workspace
p y estas pueden
p ser
utilizadas por otros scripts y/o la lnea de comandos de MATLAB

Existen dos formas de crear un Script

1. Desde la ventana de historia de comandos (esto se realiza una vez que


se tenga
t una serie
i de
d iinstrucciones
t i o sentencias
t i d desarrolladas
ll d en lla
ventana de comandos)

2.- Desde el editor de textos de MATLAB. Sin embargo, tambin se puede


utilizar un editor de texto.
Desde la ventana de historia de comandos
Se seleccionan la lneas (sentencias)
(sentencias),
que deber contener el script

Se da clic con el botn derecho del


ratn, y se selecciona crear M-file

Se abre el editor, y se puede


modificar y guardar con un
nombre
b adecuado
d d a llas
sentencias que se ejecutan
Desde el editor de textos de MATLAB

Para crear o editar un archivo-m


Seleccionar : File
File>New
>New o File>Open
File>Open

Editor Matlab

rea de trabajo

El editor proporciona una interfaz


grfica de usuario para la edicin de
texto, as como para la depuracin del
M-archivo
Ejercicio

Crear un script, que resuelva la siguiente funcin

log( ax bx c) sin( ax bx c)
2 2
f
4x cos(( x 2) * (ax bx c)
2 2

Obtener los valores para


a).
) x=9, a=1, b=3 y c=5
b). x=12, a=1, b=3 y c=5
c). x=9, a=7, b=3 y c=8

Modificar el script, (tomando de base el anterior), de tal forma que las variables de
evaluacin
l i estn
contenidos
id en una matriz,
i es ddecir:
i A
A=[x,a,b,c];
[ b ]
Ejercicio 2

Crear un script, que resuelva la practica 2.


Ejemplo de un script

Vamos a introducir en un script la secuencia de comandos que produzca la


grfica de la funcin sen x - cos(sqrt(2)x).

Creando el archivo desde el editor de texto:

x=-2
x= 2*pi:
pi:.1:2
1:2*pi;
pi;
y=sin(x)-cos(sqrt(2)*x);
plot(x,y,'r','linewidth',2)
axis tight
grid on
xlabel('eje
xlabel( eje x')
x)
ylabel('eje y')
title('Grafica de y=sin(x)-cos(sqrt(2)*x)','FontSize',14)

Crearla desde la ventana de comandos


Ejemplo de un script
Preparar un script solucion.m que resuelva el siguiente sistema de
ecuaciones:

5x + 2ry + rz = 2
3x + 6y + (2r - 1)z = 3
2x + (r - 1)y + 3rz = 5

para un valor arbitrario del parmetro r que introduciremos antes de ejecutar el


programa, de
d estat forma:
f

>> r=10;
>> solucion
Caractersticas generales de las funciones de MATLAB
El concepto de funcin en MATLAB es semejante al de C y al de otros lenguajes de
programacin, aunque con algunas diferencias importantes. Al igual que en C, una
funcin tiene nombre, valor de retorno y argumentos.

function (y,w) = fact(x,z)


input argument
output function name
argument
Una funcin se llama utilizando su nombre en una expresin o utilizndolo como un
comando ms.
Las funciones se definen en ficheros de texto *.m en la forma q
que se ver ms
adelante.
Los valores de retorno son el resultado de la funcin y sustituyen a sta en la
expresin
p donde la funcin aparece
p
Los argumentos de cada funcin van a continuacin del nombre entre parntesis
(y separados por comas si hay ms de uno)..
En MATLAB las funciones pueden tener valores de retorno matriciales
mltiples; los valores de retorno se recogen entre corchetes, separados por
comas
Caractersticas generales de las funciones de MATLAB

Una caracterstica de MATLAB es que las funciones que no tienen argumentos


no llevan parntesis

Los nombres de las funciones de MATLAB no son palabras reservadas del


lenguaje

Es posible crear una variable llamada sin o cos


cos,, que ocultan las funciones
correspondientes..
correspondientes

Para poder acceder a las funciones hay que eliminar (clear


clear)) las variables del
mismo nombre que las ocultan, o bien haber definido previamente una
referencia a funcin (function handle
handle)).

MATLAB permite que una funcin tenga un nmero de argumentos de


retorno, variables; determinado slo en tiempo de
entrada y valores de retorno
ejecucin.
Sintaxis general de una funcin

function (y,w)
(y w) = fact(x,z)
fact(x z)
input argument
output function name
arg ment
argument
Cuando se crea un archivo .m, que se utilizara como funcin, en la primera
lnea debe llevar siempre el nombre de la funcin, la sintaxis de la primer lnea es

function [out1, out2, ...] = funname(in1,


funname(in1, in2, ...)

Ejemplo:

function c = poly(x) Sintaxis


%
%POLY Convert roots to polynomial.
% POLY(A), when A is an N by N matrix, is a row vector with
Comentarios
% N+1 elements which are the coefficients of the
% characteristic polynomial, DET(lambda*EYE(SIZE(A)) - A) . de
% Ayuda

[m,n] = size(x);
Operaciones
if m == n
Subfunciones
Las variables contenidas en el cuerpo de la funcin son variables
locales
locales.
Dentro del mismo archivo se puede crear una subfuncin.
subfuncin.

La creacin de una subfuncin es definiendo una nueva funcin,


funcin
utilizando al sintaxis de creacin
creacin..

Se
S genera dentro
d t deld l cuerpo de
d la
l funcin
f i o subfuncin.
subfuncin
bf i .

Las salidas de las subfunciones no son visibles solo son utilizadas


dentro de la funcin
funcin..
Ejemplo: Crear el siguiente archivo solu.m y ejecutarla para diferentes
valores de xx.
function [mean,stdev]
mean,stdev] = stat(x)
stat(x)
Funcin
n = length
length(x);
(x); principal
mean = avg(
avg(x,n);
x,n);
stdev = sqrt(
sqrt(sum((x
sum((x--avg(
avg(x,n
x,n)).^2)/n);
)).^2)/n);

function mean = avg


avg((x,n)
x,n)
Subfuncin
mean = sum
sum(x)/n;
(x)/n;
RESOLUCIN DE ECUACIONES NO LINEALES LINEALES

Ejemplo: El factor de friccin f para los fluidos turbulentos en una


tubera est dado por:

llamada correlacin de Colebrook, donde Re es el nmero de Reynolds,


e es la rugosidad de la superficie de la tubera y D es el dimetro de la
tubera Resolver la ecuacin para f,
tubera. f creando un archivo de funcin
utilizando el mtodo de punto fijo para los siguientes casos:

(a) D = 0.1m, 0 0025m Re = 3 104


0 1m e = 0.0025m,
(b) D = 0.1m, e = 0.0005m, Re = 5 106
Solucin: Para resolver el problema empleando el mtodo de punto fijo
se debe llevar la ecuacin a la forma:

Sugerencia: Realizar el siguiente cambio


Solucin

Realizar el cambio

La ecuacin resulta

E t
Entonces l funcin
la f i de
d iteracin
it i del
d l punto
t fijo
fij es es:

Se resuelve la funcin de iteracin de p


punto fijo,
j , dando valores a x
hasta que x~~g(x)

Considerar el intervalo de x[1,2]


x[1 2]
Solucin

function [sol,f]=pfijo(x,e,D,Re)

% resuelve la ecuacin de correlacin de Colebrook


%por el mtodo de punto fijo

g=1.14-2*log10(e/D+((9.35/Re)*x));
s=[x'
[ g'];
g ];
sol=s;
f=1./sqrt(g);
f=f ;
f=f';
RESOLUCIN DE ECUACIONES NO LINEALES

De manera ms fcil podemos utilizar las rutinas internas de MATLAB, que


encuentran races de ecuaciones no lineales. Algunas de estas son:

fzero(fun,x0):
fzero(fun x0): Encuentra una raz de la funcin f (x) = fun,
fun que debe ser
definida antes o all mismo con la instruccin inline. Esta instruccin busca
un cero de f un cerca del punto x0 especificado por el usuario, y se basa
en los mtodos de la secante
secante, biseccin e interpolacin ccuadrtica
adrtica in
inversa,
ersa
por lo que la funcin ingresada debe ser continua.

Por ejemplo:

>> x=fzero(inline(0.5*exp(x/3)-sin(x)),0)
>> x = 6.7721e-001.

>> x=fzero(inline('1.14-2*log10(0.025+3.1167e-4*x)'),0)
x fzero(inline( 1.14 2 log10(0.025 3.1167e 4 x) ),0)
Exiting fzero: aborting search for an interval containing a sign change
because complex function value encountered during search.
(Function value at -81.92 is 7.6882-2.7288i.)
Ch k ffunction
Check ti or ttry again
i with
ith a different
diff t starting
t ti value.
l
x=
NaN
RESOLUCIN DE ECUACIONES NO LINEALES LINEALES
roots(p): Encuentra todas las races de un polinomio p, tanto reales como
complejas.
l j P
Para usarla
l es necesarioi ttener en cuenta
t que en MATLAB,
MATLAB un
polinomio se representa por medio de un vector de coeficientes.

Por ejemplo, para calcular todas las races del polinomio


P (x) = x5 + 3x3 2x + 1,

Se debe digitar la instruccin:


(donde el vector [1 0 3 0 -2 1]
>> rr=roots([1
roots([1 0 3 0 -2
2 1]) representa los coeficientes del
polinomio P).
r= con la cual obtenemos:
-3.3865e-002
3 3865e 002 +1.8892e+000i
+1 8892e+000i
-3.3865e-002 -1.8892e+000i
-9.0261e-001
4 8517e-001
4.8517e 001 +2.7374e
+2 7374e-001i
001i
4.8517e-001 -2.7374e-001i

Como vemos coincide con lo que esperbamos: Las races complejas siempre
vienen por pares conjugados y hay al menos una raz real.
RESOLUCIN DE ECUACIONES NO LINEALES LINEALES

En general para un polinomio de orden n esto es:

Pn(x) = anxn + an-1xn -1+ + a3x3 + a2x2+ a1x1 + a0 ,

El vector de coeficientes del polinomio es:

A [an ,a
A=[a an-1,,a
a3 ,a
a2 ,a1 ,a
a0];
]

La aplicacin de la funcin roots es:

x=roots(an ,an-1,,a3 ,a2 ,a1 ,a0);


o
x=roots(A);
( );

Con los datos del ejemplo anterior:

>>a=[1 0 3 0 -2 1];
>>r=roots(a) ;
Funciones para clculos con polinomios

l (A)
poly(A) li
polinomioi caracterstico
i d de lla matrizi A
roots(pol) races del polinomio pol
p y (p )
polyval(pol,x) evaluacin del p polinomio p pol ppara el valor de x. Si x es un vector,
pol se evala para cada elemento de x
polyvalm(pol,A) evaluacin del polinomio pol de la matriz A
conv(p1 p2)
conv(p1,p2) producto de convolucin de dos polinomios p1 y p2
[c,r]=deconv(p,q) divisin del polinomio p por el polinomio q. En c se devuelve el
cociente y en r el resto de la divisin
residue(p1 p2) descompone el cociente entre p1 y p2 en suma de fracciones
residue(p1,p2)
simples (ver >>help residue)
polyder(pol) calcula la derivada de un polinomio
polyder(p1,p2) calcula la derivada de producto de polinomios
polyfit(x,y,n) calcula los coeficientes de un polinomio p(x) de grado n que se
ajusta a los datos p(x(i)) ~= y(i),
interp1(xp,yp,x) calcula el valor interpolado para la abscisa x a partir de un
conjunto de puntos dado por los vectores xp e yp.
interp1(xp,yp,x,'m')
interp1(xp,yp,x, m ) como la anterior, pero permitiendo especificar tambin el
mtodo de interpolacin. La cadena de caracteres m admite los
valores 'nearest', 'linear', 'spline', 'pchip', 'cubic' y 'v5cubic'.
FUNCIONES DE FACTORIZACIN Y/O DESCOMPOSICIN MATRICIAL

Normas de matrices:

norm(A) norma 2, es decir, mximo valor singular de A, max(svd(A)).


norma-2,
normest(A) calcula una estimacin o aproximacin de la norma-2. til para
matrices grandes en las que norm(A) necesita demasiado tiempo
norm(A 2)
norm(A,2) lo mismo que norm(A).
norm(A)
norm(A,1) norma-1 de A, mxima suma de valores absolutos por columnas,
es decir: max(sum(abs((A)))).
norm(A,inf)
(A i f) norma- ded A,
A mxima
i suma dde valores
l absolutos
b l t por fil
filas, es
decir: max(sum(abs((A')))).
Normas de vectores:
norm(x,p) norma-p, es decir sum(abs(x)^p)^(1/p).
norm(x) norma-2 norma eucldea; equivale al mdulo o norm(x,2).
norm(x inf)
norm(x,inf) norma-, es decir max(abs(x)).
norma max(abs(x))
norm(x,1) norma-1, es decir sum(abs(x)).
Ejemplo de algunas funciones
para clculos con polinomios

Para MATLAB un polinomio se puede definir mediante un vector de coeficientes.


Por ejemplo,
ejemplo x4 8 x2 + 6x 10 = 0

Se puede representar mediante el vector [1, 0, -8, 6, -10].

MATLAB puede realizar diversas operaciones sobre l, como por ejemplo evaluarlo
para un determinado valor de x (funcin polyval()) y calcular las races (funcin
roots())
Evaluacin del polinomio
Races de la ecuacin
>> polyval(pol,1)
>> pol=[1 0 -8 6 -10]; ans =
>> roots(pol); -11
>> polyval(pol,0)
ans =
ans =
-3.2800
-10
2.6748
>> polyval(pol,[0
polyval(pol [0 1 5])
0.3026 + 1.0238i
ans =
0.3026 - 1.0238i
-10 -11 445
Ejemplo de algunas funciones
para clculos con polinomios
Derivadas de polinomios utilizando la funcin

polyder(pol)

Por ejemplo, calcular la derivada de x4 8 x2 + 6x 10 = 0

>> pol=[1 0 -8 6 -10]; Vector del polinomio

>> polyder(pol)
ans =
4 0 -16 6

Calculo de la derivada de un producto de polinomios


Por ejemplo, calcular la derivada de (3x2 + 6x +9)(x2 + 2x)

>> a = [3 6 9]; b = [1 2 0]; Declaracin de Vectores


>> p=conv(a,b); p = 3 12 21 18 0 Producto de Vectores del polinomio
>>polyder(p); 12 36 42 18 V t d
Vector de la
l derivada
d i d
>>polyder(a,b); 12 36 42 18 Vector de la derivada
Ejemplo de algunas funciones
para clculos con polinomios
calculo los coeficientes de un polinomio p(x) de grado n que se ajusta a los datos
p(x(i)) ~= y(i),

polyfit(x,y,n)
Por ejemplo, ajustar la funcin de error, erf (x), por un polinomio en x.
Este es un proyecto arriesgado porque erf (x) es una funcin acotada, mientras
que los polinomios son ilimitados, por lo que el ajuste podra no ser muy buena.

En primer lugar generar un vector de x puntos, igualmente espaciados en el


intervalo [0, 2.5], despus evaluar erf (x) en estos puntos.

>>x = (0: 0.1: 2.5)';


>>y = erf(x);
Calcular los coeficientes del polinomio de aproximacin de grado 6
6, utilizando la
funcin polifit
0.0084 x6 -0.0983x5+ 0.4217x4 -0.7435x3 +0.1471x2 +
>>p
p=p polyfit(x,y,6)
y ( y ) 1 1064 x + 0.0004=0
1.1064 0 0004=0
p=
0.0084 -0.0983 0.4217 -0.7435 0.1471 1.1064 0.0004
Evaluar los valores de x en el polinomio

>> f = polyval(p,x);

Obtener una tabla que muestra los datos, el ajuste, y el error


>>tabla = [x, y, f ,y-f]
tabla =

0 0 0.0004 -0.0004
0.1000 0.1125 0.1119 0.0006
0 2000
0.2000 0
0.2227
2227 0
0.2223
2223 0
0.0004
0004 2
0.3000 0.3286 0.3287 -0.0001
0.4000 0.4284 0.4288 -0.0004
0 5000
0.5000 0
0.5205
5205 0
0.5209
5209 -0
0.0004
0004 15
1.5

Grficamente el resultado es:.


1

>> x = (0: 0.1: 5)';


>>y = erf(x); 0.5
>>f = polyval(p,x);
polyval(p x);
>>plot(x,y,'o',x,f,'-')
>>axis([0 5 0 2]) 0
0 1 2 3 4 5
Ejemplo de interpolacin
interp1(xp,yp,x) calcula el valor interpolado
Interp1 para la abscisa x a partir de un conjunto de
Sintaxis puntos dado por los vectores xp e yp.
yi = interp1(x,Y,xi)
yii = interp1(Y,xi)
i t 1(Y i)
interp1(xp,yp,x,'m') como la anterior, pero
yi = interp1(x,Y,xi,method)
permitiendo especificar tambin el mtodo de
yi = interp1(x,Y,xi,method,'extrap')
p
interpolacin. La cadena de caracteres m
yi = interp1(x
interp1(x,Y,xi,method,extrapval)
Y xi method extrapval)
admite los valores 'nearest', 'linear', 'spline',
pp = interp1(x,Y,method,'pp')
'pchip', 'cubic' y 'v5cubic'.

Por ejemplo: Considerar dos vectores que representan el censo de los aos 1900 a
1990 y la correspondiente poblacin de Estados Unidos en millones de personas.
t = 1900:10:1990;
p = [75.995 91.972 105.711 123.203 131.669 150.697 179.323 203.212 226.505
249.633];

Utilizar la funcin interp1, para interpolar entre los datos del censo, para estimar la
poblacin en 1975

>> interp1(t,p,1975) >>interp1(t,p,1975,'cubic') >>interp1(t,p,1995,'cubic','extrap')


ans = ans = ans =
214.8585 214.9056 261.1350
RESOLUCIN DE SISTEMAS DE ECUACIONES LINEALES

En esta pparte se p presenta como usar MATLAB p para resolver sistemas de


ecuaciones lineales. Al igual que en la seccin anterior se utilizan tanto funciones
internas de MATLAB como funciones propias creadas por el usuario. Pero
adems se ppuede usar una combinacin de los dos p procedimientos.

Comencemos con las fciles y sencillas funciones internas de MATLAB:

Para resolver un sistema de ecuaciones lineales utilizando Matlab, lo primero que


se debe hacer es escribirlo en la forma matricial Ax = b. Por ejemplo
consideremos el siguiente sistema de ecuaciones:

La forma matricial Ax = b es:


OPERADORES PARA LA RESOLUCIN DE SISTEMAS DE ECUACIONES
LINEALES
MATLAB utiliza
tili l
los operadores
d di i i para la
d divisin
de l resolucin
l i ded sistemas
i t d
de
ecuaciones lineales.
Por su gran importancia, estos operadores requieren una explicacin

Considrese el siguiente sistema de ecuaciones lineales,

Ax = b
donde x y b son vectores columna, y A una matriz cuadrada invertible.

La resolucin de este sistema de ecuaciones se puede escribir en las 2 formas


siguientes (Atencin a la 2a forma, basada en la barra invertida (\), que puede
resultar un poco extraa!):

x = inv(A)*b
x = A\b
As pues, el operador divisin-izquierda por una matriz (barra invertida \) equivale
a pre-multiplicar por la inversa de esa matriz
OPERADORES PARA LA RESOLUCIN DE
SISTEMAS DE ECUACIONES LINEALES

Por ejemplo, considrese el siguiente ejemplo de matriz (12) que conduce a un


sistema de infinitas soluciones

>> A=[1 2], b=[2]


A= 5x y z 5
12
b=
2
x 4y z 4
>> x=A\b x y 3z 3
x=
0
1

A=[1
[ 2;; 1 0;; 0 1],
], b=[2
[ 0 0]'
]
x=A\b, resto=A*x-b A=[5
A [5 1 1;
1 1 4 1;
1 1 1 3]
3],
x= b=[5 4 3]
0.3333 x=A\b,
x A\b, resto
resto=A*x-b
Axb
0.6667
matriz de coeficientes Singular

Una matriz cuadrada A es singular si no tiene columnas linealmente


independientes. Si A es singular, la solucin de Ax = B, o bien no existe, o no es
nica. El operador barra invertida, A\B, emite una advertencia si A es casi singular
y plantea
l t una condicin
di i de
d error sii detecta
d t t singularidad
i l id d exacta.
t

Si A es singular y Ax
Ax= b tiene una solucin, entonces se puede encontrar una
solucin particular que no es nica, escribiendo
PINV Pseudoinverse. X = PINV(A) produces a
matrix
t i X off the
th same dimensions
di i as A' so th
thatt
P = pinv(A)*b
pinv(A)*b A*X*A = A, X*A*X = X and A*X and X*A are
Hermitian

P es la matriz seudoinversa de A. Si Ax = b no tiene una solucin exacta, pinv (A)


devuelve una solucin de mnimos cuadrados.
OTROS TIPOS DE DATOS DE MATLAB

p
Se ha visto la especialidad j
de MATLAB: trabajar con vectores y
matrices.

MATLAB puede
d tambin
t bi trabajar
t b j con otros
t ti
tipos d datos:
de d t

1. Conjuntos o cadenas de caracteres,


1 caracteres fundamentales en cualquier
lenguaje de programacin.
2. Hipermatrices, o matrices de ms de dos dimensiones.
3. Estructuras, o agrupaciones
4. Vectores o matrices de celdas (cell arrays), que son vectores o
matrices cuyos elementos pueden ser cualquier otro tipo de dato.
dato
5. Matrices dispersas, que son matrices que pueden ser de muy
gran tamao con la mayor parte de sus elementos cero
Cadenas de caracteres
MATLAB trabaja tambin con cadenas de caracteres, con ciertas semejanzas y
diferencias respecto a C/C++ y Java

A continuacin se pueden ver algunos ejemplos y practicar con ellos:


>> c='cadena'
c=
cadena
>> size(c) % dimensiones del array
ans =
16
>> double(c) % convierte en nmeros ASCII cada carcter
ans =
99 97 100 101 110 97
>> char(abs(c)) % convierte nmeros ASCII en caracteres
ans =
cadena
>> cc=char('ms','madera') % convierte dos cadenas en una matriz
cc =
ms
madera
>> size(cc) % se han aadido tres espacios a 'ms'
Funciones ms importantes para manejo de cadenas de caracteres

double(c) convierte en nmeros ASCII cada carcter


char(v) convierte un vector de nmeros v en una cadena de caracteres
char(c1,c2) crea una matriz de caracteres, completando con blancos las cadenas
ms cortas
deblank(c) elimina los blancos al final de una cadena de caracteres
disp(c) imprime el texto contenido en la variable c
ischar(c) detecta si una variable es una cadena de caracteres
isletter() detecta si un carcter es una letra del alfabeto.
isspace() detecta si un carcter es un espacio en blanco.
strcmp(c1 c2)
strcmp(c1,c2) comparacin de cadenas
cadenas. Si las cadenas son iguales devuelve un uno,
uno
y si no lo son, devuelve un cero
strcmpi(c1,c2) igual que strcmp(c1,c2), pero ignorando la diferencia entre maysculas y
minsculas
strncmp(c1,c2,n) compara los n primeros caracteres de dos cadenas c1==c2 compara
dos cadenas carcter a carcter. Devuelve un vector o matriz de unos y
ceros
int2str(v) convierte un nmero entero en cadena de caracteres
num2str(x,n) convierte un nmero real x en su expresin por medio de una cadena de
caracteres, con cuatro cifras decimales por defecto (pueden
especificarse
f ms
cifras,
f con un argumento opcional n))
str2double(str) convierte una cadena de caracteres representando un nmero real en el
nmero real correspondiente
Ejemplos

>> num2str(pi) % el resultado es una cadena de caracteres, no un nmero


ans =
3.142
>>
ans =num2str(pi,8)
=num2str(pi 8)
3.1415927

Es habitual convertir los valores numricos en cadenas de caracteres para


poder imprimirlos como ttulos en los dibujos o grficos. Vase el siguiente
ejemplo:

>> fahr =70; grd=(fahr-32)/1.8;


>> title([
title(['Temperatura
Temperatura ambiente:
',num2str(grd),' grados centgrados'])

>> st1=strcat(C:\Documents
t1 t t(C \D t and
d
Settings\personal\Mis documentos\ ');
Hipermatrices (arrays de ms de dos dimensiones)

MATLAB permite trabajar con hipermatrices, es decir con matrices de


ms de dos dimensiones

Las funciones que operan con matrices de ms de dos dimensiones son


anlogas a las funciones vistas previamente, aunque con algunas
diferencias. Por ejemplo, las siguientes sentencias generan, en dos pasos,
una matriz de 232:

>> AA(:,:,1)=[1
AA(: : 1)=[1 2 3; 4 5 6]
>>AA =
123
456
>> AA(:,:,2)=[2 3 4; 5 6 7]
>>AA(:,:,1)
(,, )=
123
456
>>AA(:,:,2)
>>AA(: : 2) =
234
567
FUNCIONES QUE TRABAJAN CON HIPERMATRICES
Algunas
g funciones de MATLAB parap generar
g matrices admiten ms de dos
subndices y pueden ser utilizadas para generar hipermatrices.

Entre ellas estn rand(), randn() zeros() y ones()


rand() randn(),

>> BB
BB= =randn(2,3,2)
randn(2,3,2)
BB(:
BB(:,:,1)
BB (: : 1) =
(:,:,1)
-0.4326 0.1253 -1.1465
-1.6656 0.2877 1.1909
BB(:,:,2)
BB (:,:,2) =
1.1892 0.3273 -0.1867
-0.0376 0.1746 0.7258

La funcin cat () permite concatenar matrices segn las distintas dimensiones:


cat()

>> A=
A=zeros
zeros(2,3);
(2,3); B=
B=ones
ones(2,3);
(2,3);
>> cat(1,A,B)
>> cat(2,A,B)
cat(2 A B)
>> cat(3,A,B)
FUNCIONES QUE TRABAJAN CON HIPERMATRICES
Las siguientes
g funciones de MATLAB se pueden
p emplear
p tambin con
hipermatrices

size() devuelve tres o ms valores (el nn de elementos en cada


dimensin)
ndims() devuelve el nmero de dimensiones
squeeze() elimina las dimensiones que son igual a uno
reshape() distribuye el mismo nmero de elementos en una matriz con
distinta forma o con distintas dimensiones
permute(A,v)
permute(A v) permuta las dimensiones de A segn los ndices del vector v
ipermute(A,v) realiza la permutacin inversa

Respecto al resto de las funciones de MATLAB, se pueden establecer las siguientes


reglas

1. Todas las funciones de MATLAB que operan sobre escalares (sin(), cos(), etc.) se
aplican
li sobre
b hipermatrices
hi ti elemento
l t a elemento
l t
2. Las funciones que operan sobre vectores (sum(), max(), etc.) se aplican a matrices e
hipermatrices segn la primera dimensin, resultando un array de menor dimensin
3 Las funciones matriciales propias del lgebra Lineal (det (),
3. inv() etc.)
() inv(), etc ) no se pueden
aplicar a hipermatrices. Para poderlas aplicar hay que extraer primero las matrices
correspondientes (por ejemplo, con el operador dos puntos (:).
Estructuras
Una estructura (struct) es una agrupacin de datos de tipo diferente
bajo un mismo nombre.
nombre
Estos datos se llaman miembros (members) o campos (fields).
Una estructura es un nuevo tipo de dato, del que luego se pueden
crear muchas variables (objetos o instances).
Por ejemplo, la estructura alumno puede contener los campos
nombre (una cadena de caracteres) y carnet (un nmero).

CREACIN DE ESTRUCTURAS
Una posible forma de hacerlo es crear uno a uno los distintos campos,
campos
como en el ejemplo siguiente

>> alu.nombre='Miguel'
g
alu =
nombre: 'Miguel'
>> al
alu.carnet=75482
carnet=75482
alu =
nombre: 'Miguel'
carnet: 75482
>> alu
Estructuras
Tambin ppuede crearse la estructura ppor medio de la funcin st
struct()
uct()
>> al = struct('nombre', 'Ignacio', 'carnet', 76589)
al =
nombre:
b 'I'Ignacio'
i '
carnet: 76589

Los nombres de los campos se pasan a la funcin struct() entre apstrofos ((')),
seguidos del valor que se les quiere dar. Este valor puede ser la cadena
vaca ('') o la matriz vaca ([ ]).

FUNCIONES PARA OPERAR CON ESTRUCTURAS

fieldnames() devuelve un vector de celdas con cadenas de caracteres que recogen


los nombres de los campos de una estructura
isfield(ST,s)
( ) ppermite saber si la cadena s es un campo
p de una estructura ST
isstruct(ST) permite saber si ST es o no una estructura
rmfield(ST,s) elimina el campo s de la estructura ST
getfield(ST,s)
g ( , ) devuelve el valor del campo
p especificado.
p Si la estructura es un arrayy
hay que pasarle los ndices como cell array (entre llaves {}) como
segundo argumento
Vectores o matrices de celdas (Cell Arrays)

Un vector (matriz o hipermatriz) de celdas es un vector (matriz o hipermatriz)


cuyos elementos son cada uno de ellos una variable de tipo cualquiera.

En un array ordinario todos sus elementos son nmeros o cadenas de


caracteres. Sin embargo, en un array de celdas, el primer elemento puede ser
un nmero; el segundo una matriz; el tercero una cadena de caracteres; el
cuarto una estructura,, etc..

CREACIN DE VECTORES Y MATRICES DE CELDAS


La creacion de Cell Arrays
Arrays,, es utilizando llaves {}, por ejemplo:

>> vc(1)={[1
vc(1)={[1 2 3]}
vc =
[1x3 double
double]]
>> vc(2)={'mi
vc(2)={'mi nombre'}
vc =
[1x3 double
double]] 'mi nombre'
>> vc(3)={rand(3,3)}
vc(3)={rand(3,3)}
vc =
[1x3 double
double]] 'mi nombre' [3x3 double
double]]
Matrices dispersas (sparse)

Las matrices dispersas o sparse son matrices de un gran tamao con la mayor
parte de sus elementos cero.

Operar sobre este tipo de matrices con los mtodos convencionales lleva a
obtener
bt tiempos d
ti de clculo
l l prohibitivos.
hibiti Por esta
P t razn
se han
h d desarrollado
ll d
tcnicas especiales para este tipo de matrices.

En ingeniera es muy frecuente encontrar aplicaciones en las que aparecen


matrices sparse. MATLAB dispone de numerosas funciones para trabajar con
estas matrices.
Las matrices dispersas se almacenan de una forma especial: solamente se
guardan en memoria los elementos distintos de cero, junto con la posicin que
ocupan en la matriz. MATLAB usa 3 arrays para matrices reales sparse con nnz
elementos distintos de cero:
1. Un array con todos los elementos distintos de cero (nnz elementos)
2. Un array con los ndices de fila de los elementos distintos de cero (nnz
elementos)
3. Un array con punteros a la posicin del primer elemento de cada columna (n
elementos)
En total se requiere una memoria de (nnz*8+(nnz+n)*4) bytes
Ejemplo de una matriz dispersa

>> A=[1,
A=[1 00, 0
0, -1,
-1 0; 0
0, 2
2, 0,
0 0,
0 1; 0
0, 0
0, 1
1, 1
1, 0; 0
0, 2
2, 0
0, 1,
1 0; -3,
-3 00, 0,
0 0,
0 2]
A=
1 0 0 -1 0
020 01
001 10
020 10
-3 0 0 0 2

>> S
S=sparse(A)
(A)
S=
(1,1) 1 (5,1) -3
(2,2) 2 (4,2) 2
(3,3) 1 (1,4) -1
(3 4) 1
(3,4) (4 4)
(4,4) 1
(2,5) 1 (5,5) 2
FUNCIONES PARA CREAR MATRICES DISPERSAS

Las siguientes
g funciones permiten crear matrices dispersas.Se recomienda ver
el Help de MATLAB para tener una informacin ms detallada.

speye(m,n) Matriz identidad dispersa de tamao mn


sprand(m,n) Matriz aleatoria dispersa con distribucin uniforme
sprandn(m,n) Matriz aleatoria dispersa con distribucin normal
sprandsym(n) Matriz aleatoria simtrica
spdiags(A) Matriz dispersa a partir de las diagonales de otra matriz
sparse(m,n) Crea una matriz dispersa de tamao mn con todos los
elementos cero
sparse(A) Crea una matriz dispersa a partir de una matriz llena
sparse(i,j,val,m,n) Construye una matriz dispersa a partir de: i vector de

ndices f
de fila,
j vector de ndices de columna, val vector
de valores, m nmero de filas, n nmero de columnas, y
un 6 argumento que permite definir el mximo nnz (por
d f t en ell tamao
defecto t de
d val) l) por sii se quieren
i aadir
di
despus ms elementos
full(S) Convierte una matriz dispersa en una matriz llena
find(S) Encuentra los ndices de los elementos distintos de cero
y los evuelve como si la matriz fuera un vector (por
columnas).
Grficos en MATLAB

Matlab
M tl b permite
it crear grficos
fi de
d varios
i tipos,
ti que se utilizan
tili para:
visualizar el contenido de las variables
crear imgenes/pelculas/VR/GIS
generar interfaces de usuario
Tipos de Grficos (1D, 2D)
Tipos de Grficos (>=3D)
GRFICOS BIDIMENSIONALES

L grficos
Los fi 2 Dd
2-D de MATLAB estn t ffundamentalmente
d t l t orientados
i t d a lla
representacin grfica de vectores (y matrices).

MATLAB utiliza un tipo especial de ventanas para realizar las operaciones


grficas.
Funciones g
grficas 2D elementales
MATLAB dispone de cinco funciones bsicas para crear grficos 2-D.
Estas funciones se diferencian principalmente por el tipo de escala que
utilizan en los ejes de abscisas y de ordenadas.
ordenadas
Estas cuatro funciones son las siguientes:

plot() crea un grfico a partir de vectores y/o columnas de matrices


matrices, con
escalas lineales sobre ambos ejes
plotyy() dibuja dos funciones con dos escalas diferentes para las
ordenadas una a la derecha y otra a la izquierda de la figura
ordenadas, figura.
loglog() dem con escala logartmica en ambos ejes
semilogx() dem con escala lineal en el eje de ordenadas y logartmica en
ell eje
j dde abscisas
b i
semilogy() dem con escala lineal en el eje de abscisas y logartmica en el
eje de ordenadas
FUNCIN PLOT

Esta es la funcin clave de todos los grficos 2-D en MATLAB.

Ya se ha dicho q g
que el elemento bsico de los grficos bidimensionales es el
vector.

Se utilizan tambin cadenas de 1


1, 2 3 caracteres para indicar colores y tipos
de lnea.

La funcin
L f i plot(),
l t() en sus diversas
di variantes,
i t no hace
h otra
t cosa que dibujar
dib j
vectores.

Su sintaxis es la siguiente:
plot (Y)
plot (X1,Y1,...)
plot (X1,Y1,LineSpec,...)
plot (...,'PropertyName',PropertyValue,...)
plot (axes_handle,...)
(axes handle,...)
h = plot(...)
hlines = plot('v6',...)
Ejemplos de la FUNCIN PLOT

Esta es la funcin clave de todos los grficos 2-D en MATLAB.

>> x [1 3 2 4 5 3]
x=[1
x=
132453
>> plot(x)

>> x=[1 6 5 2 1]; y=[1 0 4 3 1];


>> plot(x,y)

La funcin plot() permite tambin dibujar mltiples curvas introduciendo


varias parejas de vectores como argumentos.

Dibujar la funcin sin y cos en el intervalo de [0,6] (el valor de =pi )

>> x=0:pi/25:6
x=0:pi/25:6*pi;
pi;
>> y=sin(x); z=cos(x);
>> plot(x,y,x,z)
Ejemplos de la FUNCIN PLOT

Crear una matriz con las funciones seno y coseno


>>W=[y;z];

Graficar ambas funciones

>>plot( W)
>>plot(x,W);

>>plot(W,x);

El comando plot puede utilizarse tambin con matrices como argumentos.

plot(A) ordenadas frente al ndice de los


dibuja una lnea por cada columna de A en ordenadas,
elementos en abscisas
plot(x,A) dibuja las columnas (o filas) de A en ordenadas frente al vector x en
abscisas. Las dimensiones de A y x deben ser coherentes: si la matriz A es
cuadrada se dibujan las columnas, pero si no lo es y la dimensin de las filas
coincide con la de x, se dibujan las filas
plot(A,x) anlogo al anterior, pero dibujando las columnas (o filas) de A en
abscisas, frente al valor de x en ordenadas
plot(A,B) dibuja las columnas de B en ordenadas frente a las columnas de A en
abscisas, dos a dos.
ESTILOS DE LNEA Y MARCADORES EN LA FUNCIN PLOT

El conjunto
j bsico de argumentos
g de esta funcin es una tripleta formada por
dos vectores y una cadena de 1, 2 3 caracteres que indica el color y el tipo de
lnea o de marker

Sintaxis:
plot(x,y,'-.rs', 'LineWidth',4, 'MarkerEdgeColor','k', 'MarkerFaceColor''g',...
'MarkerSize',10)
Ejemplos de grficos

Ejemplo1:
Ej l 1
>> x=0:pi/100:4*pi; 1

>> y=sin(x).*cos(x/3); 0.8

>> plot(x,y) 0.6


1

0.4
0.8

j p
Ejemplo2: 0.2
0.6

>> x=0:pi/100:4*pi; 0
0.4

1
-0.2
0.2
>> y=sin(x).*cos(x/3); z=sin(x).*cos(x/2); 0.8
1
-0.4
0
>> plot(x,y,x,z)
plot(x y x z) 0.8
0.6
-0.6
-0.2
0.6
0.4
-0.8
-0.4
0.4

Ejemplo3: 0.2
-1
-0.6
0.20 2 4 6 8 10 12 14
0
>> x=0:pi/100:4*pi; -0.80

-0.2
>> A=[sin(x);sin(x/2);sin(x/3);sin(x/4)]; -1
-0.2

-0.4
0 2 4 6 8 10 12 14
-0.4
>> p
plot(x,A)
( , ) -0
-0.6
0 66
-0.6

-0.8
-0.8

Ejemplo4: -1
-1
00 22 44 66 8 8 10 10 12 12 14 14
>> p
plot(x,y,r*)
( ,y, )
>>plot(x,y,'-.rh', 'MarkerEdgeColor','k', 'MarkerFaceColor''g)
Ejemplos de grficas de funciones

y 25 x 2

x y 25
2 2
x r cos(
cos(tetha
tetha)
y rsen (tetha
(tetha)

y x 3x x
4 2

x ((2,2)
AADIR LNEAS A UN GRFICO YA EXISTENTE

Existe la posibilidad de aadir lneas a un grfico ya existente, sin destruirlo o sin


abrir una nueva ventana.

Para ello se utilizan los comandos hold on y hold off.

El siguiente ejemplo muestra cmo se aaden las grficas de x2 y x3 a la grfica


de x previamente creada (cada una con un tipo de lnea diferente):

Ejemplo:

>> xx=0:pi/100:4*pi;
0:pi/100:4*pi;
>> y=sin(x).*cos(x/3); z=sin(x).*cos(x/2);
>> plot(x,y)
>> hold on
>> plot(x,z)
>> hold off
COMANDO SUBPLOT

Una ventana
U t grfica
fi se puede
d dividir
di idi en m particiones
ti i h i
horizontales
t l y n verticales,
ti l
con objeto de representar mltiples grficos en ella.

Cada una de estas subventanas tiene sus propios ejes, aunque otras
propiedades son comunes a toda la figura.

La sintaxis es: subplot(m,n,i)

donde
d d m y n son ell nmero
d subdivisiones
de bdi i i en filas
fil y columnas,
l e i es la
l
subdivisin que se convierte en activa
Ejemplo:
>>x=0:pi/25:pi;
>>y=sin(x); z=cos(x); w=exp(-x*.1).*y; v=y.*z;
>> subplot(2,2,1), plot(x,y)
>> subplot(2,2,2), plot(x,z)
>> subplot(2,2,3),
(2 2 3) plot(x,w)
( )
>> subplot(2,2,4), plot(x,v)
CONTROL DE LOS EJES: FUNCIN AXIS()
d bsico
El comando b i es ell comando
d axis. P defecto,
i Por d f t MATLAB ajustaj t la
l escalal de
d
cada uno de los ejes de modo que vare entre el mnimo y el mximo valor de los
vectores a representar .

Otros posibles usos de este comando son los siguientes:


v=axis devuelve un vector v con los valores [[xmin, xmax, ymin,
y ymax]
y ]
axis('ij') utiliza ejes de pantalla, con el origen en la esquina superior
izda. y el eje j en direccin vertical descendente
axis('xy')
axis( xy ) utiliza ejes cartesianos normales,
normales con el origen en la esquina
inferior izda. y el eje y vertical ascendente
axis('auto x') utiliza el escalado automtico slo en direccin x
axis('auto xz') utiliza el escalado automtico slo en direcciones x, x z
axis(axis) mantiene los ejes en sus actuales valores, de cara a posibles
nuevas grficas aadidas con hold on
axis('tight') establece los mismos lmites para los ejes que para los datos
axis('equal') el escalado es igual en ambos ejes
axis('square')
( q ) la ventana ser cuadrada
CONTROL DE LOS EJES: FUNCIN AXIS()

Es posible
E ibl ttambin
bi ttener un control
t l preciso
i sobre
b llas marcas y llos rtulos
t l que
aparecen en los ejes, como por ejemplo en la forma siguiente:

>>x = -pi:.1:pi; y = sin(x);


>>plot(x,y)
>>set(gca,'XTick',-pi:pi/2:pi)
set(gca, XTick , pi:pi/2:pi)
>>set(gca,'XTickLabel',{'-pi','-pi/2','0','pi/2','pi'})

Obsrvese
Ob cmo
llas propiedades
i d d se establecen
t bl sobre
b llos ejes
j actuales,
t l a llos que
se accede con la funcin gca (get current axis).
Manipulacin de grficos
Existen diversas funciones para la manipulacin de grficos:

title( ') Adiciona un titulo al grfico


xlabel( ', 'FontSize', 16) Adiciona la etiqueta del eje x
ylabel( ','FontSize',16) Adiciona la etiqueta del eje y
grid on
g Aade una rejilla
j a la g
grafica actual
grid off Elimina la rejilla
text(x,y,string) Aade una etiqueta o cualquier texto en una localizacin
especifica xx,y.
y
gtext(string) Aade una etiqueta o cualquier texto, su posicin se elige en
cualquier punto de la figura, con el ratn.

Smbolos matemticos, letras griegas, y caracteres TEX


Se ppueden incluir smbolos matemticos y letras g g
griegas, utilizando la secuencia
caracteres del estilo. Esto es:
Tabla de caracteres TEX
Ejemplo

>>title( {\itAe} {-\alpha\itt}sin\beta{\itt} \alpha<<\beta


>>title('{\itAe}^{-\alpha\itt}sin\beta{\itt} \alpha<<\beta'))
>>xlabel('Time \musec.')
>>
Control de ventanas grficas: Funcin figure

Si se llama a la funcin figure sin argumentos, se crea una nueva ventana


grfica con el nmero consecutivo que le corresponda

El comando figure(n) hace que la ventana n pase a ser la ventana o figura


activa.

Si dicha ventana no existe, se crea una nueva ventana con el nmero


consecutivo que le corresponda

La funcin close cierra la figura activa, mientras que close(n) cierra la ventana
o figura nmero n.

El comando clf elimina el contenido de la figura activa

La funcin gcf devuelve el nmero de la figura activa en ese momento.

El comando figure(gcf) (get current figure) permite hacer visible la ventana de


grficos desde la ventana de comandos.
Control de ventanas grficas: Funcin figure

>> x=[
x=[--4*pi:pi/20:4*pi];
>> plot(x,sin(x),'r',x,cos(x),'g')
>> title('Funcin
titl ('F i seno(x)( ) -en rojo
rojo-
j - y funcin
f i coseno(x)( ) -en verde-
verde
d -')
>> xlabel('ngulo en radianes'), figure(gcf)
>> ylabel(
ylabel('valor
valor de la funcin trigonomtrica
trigonomtrica')), figure(gcf)
>> axis([-
axis([-12,12,-
12,12,-1.5,1.5]), figure(gcf)
>> axis('equal'), figure(gcf)
>> axis('normal'), figure(gcf)
>> axis('square'), figure(gcf)
>> axis('off'),
i (' ff') figure(gcf)
fi ( f)
>> axis('on'), figure(gcf)
>> axis(
axis('on')
on ), grid
grid, figure(gcf)

La funcin figure tambin admite que se fijen algunas de sus propiedades, como por
ejemplo
eje p o la
a posicin
pos c y e
el ta
tamao
a o co
con que apa
aparecer
ece e
en la
a pa
pantalla.
ta a
Por ejemplo, el comando: figure('position',[left,botton, width,height])
Otras funciones grficas 2-D
bar() crea diagramas de barras
barh() diagramas de barras horizontales
bar3() diagramas de barras con aspecto 3-D
bar3h() diagramas de barras horizontales con aspecto 3-D3D
pie() grficos con forma de tarta
pie3() grficos con forma de tarta y aspecto 3-D
area()() similar
i il plot(),
l t() pero rellenando
ll d en ordenadas
d d d de 0 a y
stairs() funcin anloga a bar() sin lneas internas
errorbar() representa sobre una grfica mediante barras valores de
errores compass() dibuja los elementos de un vector complejo
como un conjunto de vectores partiendo de un origen comn
feather()() dibuja
j los elementos de un vector complejo j como un conjunto
j
de vectores partiendo de orgenes uniformemente espaciados
sobre el eje de abscisas hist() dibuja histogramas de un vector
rose() histograma de ngulos (en radianes)
quiver() dibujo de campos vectoriales como conjunto de vectores

Ejemplo para quiver: >> [x,y] = meshgrid(-2:.2:2,-1:.15:1);


>> z = x .* exp(-x.^2 - y.^2); [px,py] = gradient(z,.2,.2);
>> quiver(x,y,px,py)
Otros ejemplos:

>> x=[rand(1
x=[rand(1,100)*10];
100)*10];
>> plot(x)
>> bar(x)
>> stairs(
stairs(x))
>> hist(x)
( )
>> hist(x,20)
>> alfa=(rand(1,20)-0.5)*2*pi;
lf ( d(1 20) 0 5)*2* i
>> rose(alfa)
( )
FUNCIN FPLOT
vectores Si se quiere dibujar una
La funcin plot vista anteriormente dibuja vectores.
funcin, antes de ser pasada a plot debe ser convertida en un vector de
valores.
La funcin fplot admite como argumento un nombre de funcin o un
nombre de fichero *.m en el cual est definida una funcin de usuario.
La funcin puede ser escalar (un nico resultado por cada valor de x) o
vectorial La forma general de esta funcin es la siguiente:
vectorial.
fplot('funcion', limites, 'cadena', tol)

donde: 'funcion' representa el nombre de la funcin o del fichero *.m entre


apstrofos, limites es un vector de 2 4 elementos, cuyos valores son
[xmin,xmax] o [xmin,xmax,ymin,ymax], 'cadena' tiene el mismo
significado que en plot y permite controlar el color, los markers y el tipo de
lnea, tol es la tolerancia de error relativo.
Esta funcin puede utilizarse tambin en la forma:

[x,y]=fplot('funcion', limites, 'cadena', tol)


En este caso se devuelven los vectores x e y, y pero no se dibuja nada.
nada El
grfico puede obtenerse con un comando posterior por medio de la funcin
plot
Ejemplo

Se comienza creando un fichero llamado mifunc.m en el directorio


C:\Archivos de programa\MATLAB\R2006a\work que contenga las
lneas siguientes:
El fichero se crea en el editor de MATLAB (editor de m-files)

function y = mifunc(x)
y(:,1)=200*sin(x)./x;
y(: 2)=x
y(:,2) x.^2;
2;

A continuacin se ejecuta el comando

>> fplot('mifunc(x)', [-20 20], 'g')

Obsrvese que la funcin mifunc devuelve una matriz con dos


columnas, que constituyen las dos grficas dibujadas. En este caso se
ha utilizado p
para ellas el color verde.
DIBUJO SIMPLIFICADO DE FUNCIONES:
() Y EZPOLAR()
FUNCIONES EZPLOT() ()
La funcin ezplot es una funcin de dibujo simplificada, til cuando se quiere
obtener de forma muy rpida la grfica de una funcin.

>> ezplot(f);

donde f es el nombre o mejor el handle de una funcin. Tambin puede ser una
funcin inline. Por defecto la funcin se dibuja en el intervalo [2 x
2].
] Si se desea dibujar
j f en un intervalo diferente,, se puede
p escribir:

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

La funcin f puede ser una funcin implcita de dos variables f(x,y)=0. El


intervalo por defecto para cada variable es [2 x 2]. Tambin se
puede
d ddefinir
fi i un iintervalo
t l comn
o especfico
fi para cada
d variable.
i bl
>> ezplot(f); % dibuja f(x,y)=0 en -2*pi<x<2*pi y -2*pi<y<2*pi
>> ezplot(f, [a,b]); % dibuja f(x,y)=0 en a<x<b y a<y<b
>> ezplot(f, [xmin,xmax,ymin,ymax]);
Entrada de puntos con el ratn

Se realiza mediante la funcin ginput, que permite introducir las coordenadas del
punto sobre el que est el cursor, al clicar (o al pulsar una tecla). Algunas
formas de utilizar esta funcin son las siguientes:

[x,y] = ginput lee un nmero indefinido de puntos cada vez que se clica o se
pulsa una tecla cualquiera hasta que se termina pulsando la tecla
intro
[x,y] = ginput(n) lee las coordenadas de n puntos
[x,y,bot] = ginput igual que el anterior, pero devuelve tambin un vector de
enteros bot con el cdigo ASCII de la tecla pulsada o el nmero del
botn del ratn (1, 2, ...) con el que se ha clicado

clf, [x,y]=ginput(4);
>> figure(gcf)
figure(gcf), plot(x
plot(x,y,
y 'w')
w ), pause(5)
pause(5), fill(x
fill(x,y,
y 'r')
r)
Graficas con vectores

Matlab contiene funcione que permiten mostrar datos consistentes en direccion


de vectores y vectores de velocidad estas funciones son:

compass Muestra los vectores que inician en el origen de un sistema polar

feather Muestra los vectores a los largo de una lnea horizontal,


espaciados de forma uniforme

quiver Muestra vectores 2-D descritos por la componentes (u,v)


Ejemplo:
Ejemplo:
>>wdir = [45 90 90 45 360 335
360 270 335 270 335 335]; >>t = 0:0.5:10;
>>knots = [[6 6 8 6 3 9 6 8 9 10 >>s = 0.05+i;
14 12]; >>Z = exp(-s*t);
>>rdir = wdir * pi/180; feather(Z)
>>[x y] = pol2cart(rdir
>>[x,y] pol2cart(rdir,knots);
knots);
>>compass(x,y)
GRFICOS TRIDIMENSIONALES
Quizs sea sta una de las caractersticas de MATLAB que ms admiracin
despierta entre los usuarios no tcnicos (cualquier alumno de ingeniera sabe
que hay ciertas operaciones algebraicas que tienen dificultades muy
superiores, aunque "luzcan" menos).

Grficos de lnea

La primera forma de grfico 3D es la funcin plot3, que es el anlogo


tridimensional de la funcin plot. Esta funcin dibuja puntos cuyas
coordenadas estn contenidas en 3 vectores,
vectores bien unindolos mediante una
lnea continua (defecto), bien mediante markers

Sintaxis: plot3(x1 y1 z1 s1 x2 y2 z2 s2 x3 y3 z3 s3 )
plot3(x1,y1,z1,s1,x2,y2,z2,s2,x3,y3,z3,s3,...),
plot3(X1,Y1,Z1,LineSpec,...)
plot3(...,'PropertyName',PropertyValue
plot3(...,'PropertyName',PropertyValue,...)
,...)
h = plot3(...)

EJEMPLO
>> fi=[0:pi/20:6*pi];
fi=[0:pi/20:6*pi];
>> plot3(cos
plot3(cos(fi),sin(fi),
(fi),sin(fi),fi,'r
fi,'r'),
'), grid on;
on; axis square
EJEMPLO
Crear el siguiente grfico en un rango de (-
(-3 a 3) para la variables x e y

z 3 (1 x).^2
z=3*(1-x) 2.*exp(-x
exp( x.^2-(y+1)
2 (y 1).^2)-10*(x/5-x
2) 10 (x/5 x.^3-y
3 y.^5)
5).*
exp(-x.^2-y.^2)-(1/3).*exp(-(x+1).^2-y.^2);

>> plot3(x,y,z)

>> plot3(x,y,z),
plot3(x y z) grid on; axis square
[x,y]
y = meshgrid(-3:.5:3,-3:.5:3);
g ( )

>> z=3*(1-x).^2.*exp(-x.^2-(y+1).^2)-10*(x/5-x.^3-
y.^5).*exp(-x.^2-y.^2)-(1/3).*exp(-(x+1).^2-y.^2);
^5) * ( ^2 ^2) (1/3) * ( ( +1) ^2 ^2)

>> plot3(x,y,z,
plot3(x y z 'g')
g ), grid on; axis square

10

-5
5

-10
4
2 4
0 2
0
-2
-2
-4 -4
Funcin Meshgrid
Genera una matriz (arreglo) xy para plot3 (curvas en tres dimensiones)

Sintaxis:
[X,Y]
X,Y] = meshgrid(
meshgrid(x,y).
x,y). Transforma el dominio especificado por los vectores x e y
en una matriz XY, que se puede utilizar para evaluar las funciones de dos
variables
i bl y grficos
fi d
de malla/superficie
ll / fi i tridimensional.
idi i l

Las filas de la matriz de salida X son copias del vector x; columnas de la matriz Y
d salida
de lid son copias
i d dell vector
t y.

[X,Y]
X,Y] = meshgrid(x)
meshgrid(x)

[X,Y,Z]
X,Y,Z] = meshgrid(
meshgrid(x,y,z).
x,y,z). Produce un arreglo tridimensional que se utiliza para
evaluar funciones de tres variables y crear grficos volumtricos tridimensionales.

[[x,y]
y] = meshgrid(-3:3,-3:3)
g ( )
GRFICOS TRIDIMENSIONALES
G fi
Grficos d malla
de ll y de
d superficie
fi i

Matlab define una superficie por las coordenadas z de los puntos que estan por
encima de los puntos de una regilla rectangular en el plano xy.
xy

El primer paso para generar una grafica de malla de una funcion de dos variables
z=f(x,y);
f( ) es engendrar
d matrices
ti x e y formadas
f d respectivamente
ti t por filas
fil y
columnas repetidas. Matlab proporciona la funcion meshgrid para este
objetico.
[X,Y]=meshgrid(x,y);
( )

Las funciones p
para crear las g
graficas de malla y superficie
p en 3D son:

mesh(X,Y,Z)
mesh( X,Y,Z) Crea una malla en 3D
surf(X
surf(X,Y,Z,C
surf( X
X,Y,Z,C)
Y Z C)
C) Crea una superficie facetada (coloreada en su superficie)

meshc,, meshz Crea una superficie con contornos


meshc
surfl
surfl(
fl((X,Y,Z
fl X
X,Y,Z)
Y Z)
Z) C
Crea una superficie
fi i slida
lid (rellena
( ll d color)
de l )
surface((X,Y,Z,C)
surface X,Y,Z,C) Crea una superficie de bajo nivel de objetos grficos
Funciones surf, surfc
Sintaxis:
surf(Z)
surfc(...)
surfc(...)
surf(Z,C
surf( Z,C))
h = surf(...)
surf(X,Y,Z
surf( X,Y,Z))
hsurface = surf('v6',...)
surf(X,Y,Z,C
surf( X,Y,Z,C))
h
hsurface
f = surfc('v6',...)
surfc
f ('v6',...)
(' 6' )
surf(...,'PropertyName',PropertyValue
surf(...,'PropertyName',PropertyValue))
surf(axes_handles
surf( axes_handles,...)
,...)

>>[x,y] = meshgrid(-3:.5:3,-3:.5:3);
>> z=3*(1-x).^2.*exp(-x.^2-(y+1).^2)-10*(x/5-x.^3-y.^5).*exp(-
x ^2 y ^2) (1/3) *exp( (x+1) ^2 y ^2);
x.^2-y.^2)-(1/3).*exp(-(x+1).^2-y.^2);

>> surf(x,y,z), grid on; axis square


>> colormap hsv

10
10

5
5

0 0

-5 -5

-10 -10
4 4
2 3 2 3
2 2
0 1 0 1
0 0
-2 -1 -2 -1
-2 -2
-4 -3 -4 -3
>> surfc(x,y,z)

10

-5

-10
4
2 3
2
0 1
0
-2 -1
-2
-4 -3
Funciones mesh
mesh,, meshc
meshc,, meshz
Sintaxis:
mesh(X,Y,Z)
mesh( X,Y,Z)
mesh(Z)
mesh (Z)
mesh(...,C)
meshh(...,C)
( C)
mesh(...,'
mesh (...,'PropertyName',PropertyValue
PropertyName',PropertyValue,...),...)
mesh((axes_handles
mesh axes_handles,...)
,...)
meshc((...)
meshc(...)
meshc ( )
meshz(...)
meshz (...)
h = mesh(...)
mesh(...)
hsurface = mesh
mesh('v6'
mesh(('v6'
( v6 ,...)) hsurface = meshc
meshc('v6'
meshc( (('v6'
v6 ,...),
)

>>[x,y] = meshgrid(-3:.5:3,-3:.5:3);
>> z=3
z=3*(1
(1-x).^2.
x) ^2 *exp(
exp(-x.^2-(y+1).^2)-10
x ^2 (y+1) ^2) 10*(x/5
(x/5-x.^3-y.^5).
x ^3 y ^5) *exp(
exp(-
x.^2-y.^2)-(1/3).*exp(-(x+1).^2-y.^2);

>> mesh(x,y,z);
h( )
>> meshc(x,y,z);
>> meshz(x,y,z)
Ejemplos
>>close
>> l all
ll
>>u=-8:0.5:8; v=u;
>>[U,V]=meshgrid(u,v);
>>R=sqrt(U.^2+V.^2)+eps;
>>W=sin(R)./R;
>>mesh(W)

>>figure (2)
surf(W)
>>surf(W)

>>figure (1)
meshc(W)
>>meshc(W)

>>surf(X,Y,Z,'FaceColor','interp', 'EdgeColor','none', 'FaceLighting','phong')


>>daspect([5 5 1])
>>axis tight
>>view(-50
>>view( 50,30)
30)
>>camlight left
Ejemplos

x y z 25
2 2 2

z xe x 2
y2
GRFICOS TRIDIMENSIONALES
DIBUJO DE LNEAS DE CONTORNO: FUNCIONES CONTOUR Y CONTOUR3

Una forma distinta de representar funciones tridimensionales es por medio de


isolneas o curvas de nivel.

Posibles formas de estas funciones son las siguientes:

contour(Z, val) siendo val un vector de valores para las isolneas dibujar
contour(u,v,W,20) se utilizan u y v para dar valores a los ejes coordenadas
contour(Z,20,'r--') se puede especificar el tipo de lnea
contourf(Z val)
contourf(Z, anloga a contour(),
contour() pero rellenando el espacio entre
lneas

Crear las curvas de nivel de las graficas anteriores

>> contour(
contour(x,y,z)
x,y,z);
Funcin contour3
Sintaxis:
contour3(Z)
contour3(Z,n
contour3( (Z,n)
, )
contour3(Z,v
contour3( Z,v))
contour3(X,Y,Z
contour3( X,Y,Z))
contour3(X,Y,Z,n
contour3((X,Y,Z,n))
contour3(X,Y,Z,v
contour3( X,Y,Z,v))
contour3(...,LineSpec
contour3(..., LineSpec))
contour3(axes_handle
contour3( axes_handle,...)
,...)
[C,h
C,h]] = contour3(...)

Ejemplo
>> contour3(x,y,z);

[x,y]
y = meshgrid([-2:.25:2]);
g ( )
Z = x.*exp(-x.^2-y.^2);
contour3(X,Y,Z,30)
grid off
view(-15,25)
colormap cool
Utilizacin del color en grficos 3-D

En los dibujos realizados hasta ahora, se ha visto que el resultado adoptaba


determinados colores, pero todava no se ha explicado de dnde han salido.

Ahora se ver qu sistema utiliza MATLAB para determinar los colores

MAPAS DE COLORES

Un mapa de colores se define como una matriz de tres columnas, cada una de las
cuales contiene un valor entre 0 y 1, que representa la intensidad de uno de los
colores fundamentales: R (red o rojo), G (green o verde) y B (blue o azul).

La longitud por defecto de los mapas de colores de MATLAB es 64, es decir, cada
mapa
p de color contiene 64 colores.

Algunos mapas de colores estn predefinidos en MATLAB. Buscando colormap en


Help se obtiene entre otra informacin
informacin la lista de los siguientes mapas de
colores:
Mapas de colores:
autumn varies smoothly from red, through orange, to yellow.
bone is a grayscale colormap with a higher value for the blue component.
component
colorcube contains as many regularly spaced colors in RGB colorspace
cool consists of colors that are shades of cyan and magenta.
copper varies smoothly from black to bright copper.
flag consists of the colors red, white, blue, and black.
gray returns a linear grayscale colormap
colormap..
hot varies smoothly from black, through shades of red, orange, and
yellow, to white.
hsv varies the hue component of the huehue--saturation
saturation--value color model.
model
The colors begin with red, pass through yellow, green, cyan, blue,
magenta, and return to red.
jet ranges from blue to red
red, and passes through the colors cyan
cyan, yellow
yellow,
and orange. It is a variation of the hsv colormap
colormap..
pink contains pastel shades of pink.
prism repeats the six colors red, orange, yellow, green, blue, and violet.
spring consists of colors that are shades of magenta and yellow.
summer consists of colors that are shades of ggreen and yyellow.
white is an all white monochrome colormap
colormap..
winter consists of colors that are shades of blue and green.
El colormap por defecto es jet
jet..

Para visualizar estos mapas de colores, cambiando al mismo tiempo su longitud, se


pueden utilizar los siguientes comandos en la Command Window:
Window:

>> colormap
colormap(
p(hot
hot(128))
((128))
))
>> pcolor([1:129;1:129]')
pcolor([1:129;1:129]')

donde la funcin pcolor permite visualizar por medio de colores la magnitud de los
elementos de una matriz (en realidad representa colores de celdas, para lo que
necesita que la matriz tenga una fila y columna ms de las necesarias; sa es la
razn de que en el ejemplo anterior a la funcin pcolor se le pasen 129 filas y 2
columnas).
DIBUJO DE SUPERFICIES FACETEADAS

La funcin surf tiene diversas posibilidades referentes a la forma en que son


representadas las facetas o polgonos coloreados. Las tres posibilidades son las
siguientes::
siguientes

shading flat determina sombreado con color constante para cada polgono. Este
sombreado se llama plano o flat
flat..
shading interp establece que el sombreado se calcular por interpolacin de
colores entre los vrtices de cada faceta. Se llama tambin
sombreado
b d de d G Gouraud d
shading faceted consiste en sombreado constante con lneas negras
superpuestas.. Esta es la opcin por defecto
superpuestas

>>Shading flat
>>Shading
>>shading
>> shading interp
>>shading
>> shading faceted
OTRAS FUNCIONES GRFICAS 3D
Las siguientes funciones se derivan directamente de las anteriores, pero
aaden algn pequeo detalle y/o funcionalidad:
surfc combinacin de surf surf,, y contour en z=0
trisurf similar a surf
surf,, dibuja una superficie 3- 3-D a partir de los valores de
una funcin
f i en una malla de ttringulos.
ll d i l
meshz mesh con plano de referencia en el valor mnimo y una especie de
cortina en los bordes del dominio de la funcin
trimesh similar a mesh
mesh,, dibuja una superficie 3- 3-D a partir de los valores de
una funcin en una malla de tringulos.
surfl para controlar la iluminacin determinando la posicin e intensidad
de un foco de luz.
light crea un foco de luz en los ejes actuales capaz de actuar sobre
superficies
p 3
3--D. Se le deben p pasar como argumentos
g el color, el
estilo (luz local o en el infinito) y la posicin. Son muy importantes
las propiedades de los objetos iluminados patch y surface surface;;
consultarlas por medio del Help cuando se vayan a utilizar.
colorbar aade el mapa de colores activo a la figura, redimensionando los
ejes para hacerle un lugar. Se puede colocar horizontal o
verticalmente.
sphere
cylinder
Uso de la funcin Light

>>h = surf(
surf(peaks
peaks);
);
>>set(h,'FaceLighting','phong','FaceColor','interp
>>set((h,'FaceLighting','phong','FaceColor','interp',...
, g g,p g, , p',...
,
'AmbientStrength',0.5)
>>light('Position',[1 0 0],'Style','infinite
0],'Style','infinite');
');

Otras alternativas

lighting flat
lighting gouraud
lighting phong
lighting none
Colormaps
p
Incrustar colormaps en los grficos

Con la funcin colorbar


colorbar,, se muestra la barra de colores actual.

>>colorbar
Ejemplo:
hold on
[x,y,z,v
x
x,y,z,v]
y z v]
v] = flow; slice(x,y,z,v,xmax
hx = slice( (x,y,z,v,xmax,[
,y, , , ,[ ],[ ]);
xmin = min(x(:)); set(hx,'FaceColor','interp','EdgeColo
set( hx,'FaceColor','interp','EdgeColo
r','none')
r','none ')
ymin = min(y(:));
zmin = min(z(:));
hy = slice(
slice(x,y,z,v
x,y,z,v,[],
,[],ymax
ymax,[]);
,[]);
set(hy,'FaceColor','interp','EdgeColor
set( hy,'FaceColor','interp','EdgeColor
xmax = max(x(:));
','none')
','none ')
ymax = max(y(:));
zmax = max(z(:));
hz = slice(
slice(x,y,z,v
x,y,z,v,[],[],
,[],[],zmin
zmin);
);
hslice
s ce = su
surf((linspace(xmin,xmax,100),
surf(linspace
space(((xmin,xmax,100),
space , a , 00), set(hz,'FaceColor','interp','EdgeColo
set( hz,'FaceColor','interp','EdgeColo
linspace(ymin,ymax,100),
linspace (ymin,ymax,100), zeros(100)); r','none')
r','none ')

rotate(
rotate(hslice
(hslice,[
,[--1,0,0],-
,[ 1,0,0],
, , ],-45)) daspect([1,1,1])
daspect([1,1,1])
xd = get(hslice,'XData
get(hslice,'XData'); '); axis tight
yd = get(hslice,'YData
get(hslice,'YData'); '); box on
zd = g
get((hslice,'ZData');
get(hslice,'ZData
, ');
); view(--38.5,16)
view(
delete(hslice
delete( hslice)) camzoom(1.4)
camzoom (1.4)
camproj perspective
h = slice
slice((x,y,z,v,xd,yd,zd
x,y,z,v,xd,yd,zd);
); lightangle(
lightangle
g g (-45,45)
, )
set(h,'FaceColor','interp
set( h,'FaceColor','interp',', ''EdgeColor','none
EdgeColor','none',
', colormap (jet(24))
'DiffuseStrength',.8) set(gcf,'Renderer','zbuffer
set( gcf,'Renderer','zbuffer')
')
Diferentes cajas de herramientas (toolboxes)

Grficos

plottools
disttool
dfittool

Das könnte Ihnen auch gefallen