X,Y

Anuncio
Funciones definidas por el usuario
El usuario pude agregar nuevas funciones al vocabulario de la MATLAB
MATLAB,
expresadas en términos de las funciones existentes. Los comandos
existentes y las funciones que componen la nueva función 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 carácter alfabético (a,b,..) y tiene
una extensión de archivo *.m. El m-nombre de archivo, menos su extensión, es lo
que MATLAB busca cuando intenta utilizar la secuencia o función.
Ejemplo:
g
; b12_g
g.m;; archivo de calculo.m
Nombre valido: algo123.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 extensión .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 línea 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, también se puede
utilizar un editor de texto.
Desde la ventana de historia de comandos
Se seleccionan la líneas (sentencias)
(sentencias),
que deberá contener el script
Se da clic con el botón derecho del
ratón, 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
gráfica de usuario para la edición de
texto, así como para la depuración del
M-archivo
Ejercicio
Crear un script, que resuelva la siguiente función
log( ax  bx  c)  sin( ax  bx  c)
f 
2
2
4x  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
evaluación
l
ió estén
é contenidos
id en una matriz,
i es d
decir:
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
gráfica de la función 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 parámetro r que introduciremos antes de ejecutar el
programa, de
d esta
t forma:
f
>> r=10;
>> solucion
Características generales de las funciones de MATLAB
El concepto de función en MATLAB es semejante al de C y al de otros lenguajes de
programación, aunque con algunas diferencias importantes. Al igual que en C, una
función tiene nombre, valor de retorno y argumentos.
function (y,w) = fact(x,z)
output
argument
input argument
function name
 Una función se llama utilizando su nombre en una expresión o utilizándolo como un




comando más.
Las funciones se definen en ficheros de texto *.m en la forma q
que se verá más
adelante.
Los valores de retorno son el resultado de la función y sustituyen a ésta en la
expresión
p
donde la función aparece
p
Los argumentos de cada función van a continuación del nombre entre paréntesis
(y separados por comas si hay más de uno)..
En MATLAB las funciones pueden tener valores de retorno matriciales
múltiples; los valores de retorno se recogen entre corchetes, separados por
comas
Características generales de las funciones de MATLAB
 Una característica de MATLAB es que las funciones que no tienen argumentos
no llevan paréntesis
 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 función (function handle
handle)).
 MATLAB permite que una función tenga un número de argumentos de
entrada y valores de retorno
retorno, variables; determinado sólo en tiempo de
ejecución.
Sintaxis general de una función
function (y,w)
(y w) = fact(x,z)
fact(x z)
output
arg ment
argument
input argument
function name
Cuando se crea un archivo .m, que se utilizara como función, en la primera
línea debe llevar siempre el nombre de la función, la sintaxis de la primer línea 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);
if m == n
Operaciones
Subfunciones
 Las variables contenidas en el cuerpo de la función son variables
locales
locales.
 Dentro del mismo archivo se puede crear una subfunción.
subfunción.
 La creación de una subfunción es definiendo una nueva función,
función
utilizando al sintaxis de creación
creación..
 Se
S genera dentro
d t del
d l cuerpo de
d la
l función
f
ió o subfunción.
subfunción
bf
ió .
 Las salidas de las subfunciones no son visibles solo son utilizadas
dentro de la función
función..
Ejemplo: Crear el siguiente archivo solu.m y ejecutarla para diferentes
valores de xx.
function [mean,stdev]
mean,stdev] = stat(x)
stat(x)
Función
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)
mean = sum
sum(x)/n;
(x)/n;
Subfunción
RESOLUCIÓN DE ECUACIONES NO LINEALES LINEALES
Ejemplo: El factor de fricción f para los fluidos turbulentos en una
tubería está dado por:
llamada correlación de Colebrook, donde Re es el número de Reynolds,
e es la rugosidad de la superficie de la tubería y D es el diámetro de la
tubería Resolver la ecuación para f,
tubería.
f creando un archivo de función
utilizando el método de punto fijo para los siguientes casos:
(a) D = 0.1m,
0 1m e = 0.0025m,
0 0025m Re = 3 × 104
(b) D = 0.1m, e = 0.0005m, Re = 5 × 106
Solución: Para resolver el problema empleando el método de punto fijo
se debe llevar la ecuación a la forma:
Sugerencia: Realizar el siguiente cambio
Solución
Realizar el cambio
La ecuación resulta
E t
Entonces
l función
la
f
ió de
d iteración
it
ió del
d l punto
t fijo
fij es es:
Se resuelve la función de iteración de p
punto fijo,
j , dando valores a x
hasta que x~~g(x)
Considerar el intervalo de x[1,2]
x[1 2]
Solución
function [sol,f]=pfijo(x,e,D,Re)
% resuelve la ecuación de correlación de Colebrook
%por el método 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';
RESOLUCIÓN DE ECUACIONES NO LINEALES
De manera más fácil podemos utilizar las rutinas internas de MATLAB, que
encuentran raíces de ecuaciones no lineales. Algunas de estas son:
fzero(fun,x0):
fzero(fun
x0): Encuentra una raíz de la función f (x) = fun,
fun que debe ser
definida antes o allí mismo con la instrucción inline. Esta instrucción busca
un cero de f un cerca del punto x0 especificado por el usuario, y se basa
en los métodos de la secante
secante, bisección e interpolación ccuadrática
adrática in
inversa,
ersa
por lo que la función 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
RESOLUCIÓN DE ECUACIONES NO LINEALES LINEALES
• roots(p): Encuentra todas las raíces de un polinomio p, tanto reales como
complejas.
l j
P
Para
usarla
l es necesario
i 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 raíces del polinomio
P (x) = x5 + 3x3 − 2x + 1,
Se debe digitar la instrucción:
>> rr=roots([1
roots([1 0 3 0 -2
2 1])
r=
-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
(donde el vector [1 0 3 0 -2 1]
representa los coeficientes del
polinomio P).
con la cual obtenemos:
Como vemos coincide con lo que esperábamos: Las raíces complejas siempre
vienen por pares conjugados y hay al menos una raíz real.
RESOLUCIÓN 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 aplicación de la función 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 cálculos con polinomios
l (A)
poly(A)
roots(pol)
p
y (p
)
polyval(pol,x)
li
i característico
í i d
i A
polinomio
de lla matriz
raíces del polinomio pol
evaluación del p
polinomio p
pol p
para el valor de x. Si x es un vector,
pol se evalúa para cada elemento de x
polyvalm(pol,A) evaluación del polinomio pol de la matriz A
conv(p1 p2)
conv(p1,p2)
producto de convolución de dos polinomios p1 y p2
[c,r]=deconv(p,q) división del polinomio p por el polinomio q. En c se devuelve el
cociente y en r el resto de la división
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 también el
método de interpolación. La cadena de caracteres m admite los
valores 'nearest', 'linear', 'spline', 'pchip', 'cubic' y 'v5cubic'.
FUNCIONES DE FACTORIZACIÓN Y/O DESCOMPOSICIÓN MATRICIAL
Normas de matrices:
norm(A)
normest(A)
norma 2, es decir, máximo valor singular de A, max(svd(A)).
norma-2,
calcula una estimación o aproximación 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, máxima suma de valores absolutos por columnas,
es decir: max(sum(abs((A)))).
norm(A,inf)
(A i f)
norma-∞ de
d A,
A máxima
á i
suma d
de 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 euclídea; equivale al módulo 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 cálculos 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 (función polyval()) y calcular las raíces (función
roots())
Evaluación del polinomio
Raíces de la ecuación
>> polyval(pol,1)
ans =
>> pol=[1 0 -8 6 -10];
-11
>> roots(pol);
>> 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 cálculos con polinomios
Derivadas de polinomios utilizando la función
polyder(pol)
Por ejemplo, calcular la derivada de x4− 8 x2 + 6x − 10 = 0
Vector del polinomio
>> pol=[1 0 -8 6 -10];
>> 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)
Declaración de Vectores
>> a = [3 6 9]; b = [1 2 0];
>> p=conv(a,b); p = 3
12
21
>>polyder(p); 12
42
18
>>polyder(a,b);
36
12
36
42
18
0
Producto de Vectores del polinomio
V t d
Vector
de la
l derivada
d i d
18
Vector de la derivada
Ejemplo de algunas funciones
para cálculos 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 función de error, erf (x), por un polinomio en x.
Este es un proyecto arriesgado porque erf (x) es una función acotada, mientras
que los polinomios son ilimitados, por lo que el ajuste podría no ser muy buena.
En primer lugar generar un vector de x puntos, igualmente espaciados en el
intervalo [0, 2.5], después evaluar erf (x) en estos puntos.
>>x = (0: 0.1: 2.5)';
>>y = erf(x);
Calcular los coeficientes del polinomio de aproximación de grado 6
6, utilizando la
función 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.1000
0 2000
0.2000
0.3000
0.4000
0 5000
0.5000
0
0.1125
0
0.2227
2227
0.3286
0.4284
0
0.5205
5205
0.0004
0.1119
0
0.2223
2223
0.3287
0.4288
0
0.5209
5209
Gráficamente el resultado es:.
>> x = (0: 0.1: 5)';
>>y = erf(x);
>>f = polyval(p,x);
polyval(p x);
>>plot(x,y,'o',x,f,'-')
>>axis([0 5 0 2])
-0.0004
0.0006
0
0.0004
0004
-0.0001
-0.0004
-0
0.0004
0004
2
15
1.5
1
0.5
0
0
1
2
3
4
5
Ejemplo de interpolación
Interp1
Sintaxis
yi = interp1(x,Y,xi)
i t 1(Y i)
yii = interp1(Y,xi)
yi = interp1(x,Y,xi,method)
yi = interp1(x,Y,xi,method,'extrap')
yi = interp1(x
interp1(x,Y,xi,method,extrapval)
Y xi method extrapval)
pp = interp1(x,Y,method,'pp')
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') como la anterior, pero
permitiendo especificar también el método de
p
La cadena de caracteres m
interpolación.
admite los valores 'nearest', 'linear', 'spline',
'pchip', 'cubic' y 'v5cubic'.
Por ejemplo: Considerar dos vectores que representan el censo de los años 1900 a
1990 y la correspondiente población 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 función interp1, para interpolar entre los datos del censo, para estimar la
población en 1975
>> interp1(t,p,1975)
ans =
214.8585
>>interp1(t,p,1975,'cubic')
ans =
214.9056
>>interp1(t,p,1995,'cubic','extrap')
ans =
261.1350
RESOLUCIÓN DE SISTEMAS DE ECUACIONES LINEALES
En esta p
parte se p
presenta como usar MATLAB p
para resolver sistemas de
ecuaciones lineales. Al igual que en la sección anterior se utilizan tanto funciones
internas de MATLAB como funciones propias creadas por el usuario. Pero
además se p
puede usar una combinación de los dos p
procedimientos.
Comencemos con las fáciles 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 RESOLUCIÓN DE SISTEMAS DE ECUACIONES
LINEALES
MATLAB utiliza
tili
l
los
operadores
d
d división
de
di i ió para la
l resolución
l ió de
d sistemas
i t
d
de
ecuaciones lineales.
Por su gran importancia, estos operadores requieren una explicación
Considérese el siguiente sistema de ecuaciones lineales,
Ax = b
donde x y b son vectores columna, y A una matriz cuadrada invertible.
La resolución de este sistema de ecuaciones se puede escribir en las 2 formas
siguientes (¡Atención a la 2a forma, basada en la barra invertida (\), que puede
resultar un poco extraña!):
x = inv(A)*b
x = A\b
Así pues, el operador división-izquierda por una matriz (barra invertida \) equivale
a pre-multiplicar por la inversa de esa matriz
OPERADORES PARA LA RESOLUCIÓN DE
SISTEMAS DE ECUACIONES LINEALES
Por ejemplo, considérese el siguiente ejemplo de matriz (1×2) que conduce a un
sistema de infinitas soluciones
>> A=[1 2], b=[2]
A=
12
b=
2
>> x=A\b
5x  y  z  5
x  4y  z  4
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
x=
0.3333
0.6667
A=[5
A
[5 1 1;
1 1 4 1;
1 1 1 3]
3],
b=[5 4 3]’
x=A\b,
x
A\b, resto
resto=A*x-b
Axb
matriz de coeficientes Singular
Una matriz cuadrada A es singular si no tiene columnas linealmente
independientes. Si A es singular, la solución 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 condición
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 solución, entonces se puede encontrar una
solución particular que no es única, escribiendo
P = pinv(A)*b
pinv(A)*b
PINV Pseudoinverse. X = PINV(A) produces a
matrix
t i X off the
th same dimensions
di
i
as A' so th
thatt
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 solución exacta, pinv (A)
devuelve una solución de mínimos cuadrados.
OTROS TIPOS DE DATOS DE MATLAB
p
j
Se ha visto la “especialidad”
de MATLAB: trabajar
con vectores y
matrices.
MATLAB puede
d también
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 programación.
2. Hipermatrices, o matrices de más 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 tamaño con la mayor parte de sus elementos cero
Cadenas de caracteres
MATLAB trabaja también con cadenas de caracteres, con ciertas semejanzas y
diferencias respecto a C/C++ y Java
A continuación se pueden ver algunos ejemplos y practicar con ellos:
>> c='cadena'
c=
cadena
>> size(c) % dimensiones del array
ans =
16
>> double(c) % convierte en números ASCII cada carácter
ans =
99 97 100 101 110 97
>> char(abs(c)) % convierte números ASCII en caracteres
ans =
cadena
>> cc=char('más','madera') % convierte dos cadenas en una matriz
cc =
más
madera
>> size(cc) % se han añadido tres espacios a 'más'
Funciones más importantes para manejo de cadenas de caracteres
double(c)
char(v)
char(c1,c2)
convierte en números ASCII cada carácter
convierte un vector de números v en una cadena de caracteres
crea una matriz de caracteres, completando con blancos las cadenas
más 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 carácter es una letra del alfabeto.
isspace()
detecta si un carácter es un espacio en blanco.
strcmp(c1 c2)
strcmp(c1,c2)
comparación 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 mayúsculas y
minúsculas
strncmp(c1,c2,n) compara los n primeros caracteres de dos cadenas c1==c2 compara
dos cadenas carácter a carácter. Devuelve un vector o matriz de unos y
ceros
int2str(v)
convierte un número entero en cadena de caracteres
num2str(x,n)
convierte un número real x en su expresión por medio de una cadena de
caracteres, con cuatro cifras decimales por defecto (pueden
especificarse
f
más
á cifras,
f
con un argumento opcional n))
str2double(str) convierte una cadena de caracteres representando un número real en el
número real correspondiente
Ejemplos
>> num2str(pi) % el resultado es una cadena de caracteres, no un número
ans =
3.142
>>
ans =num2str(pi,8)
=num2str(pi 8)
3.1415927
Es habitual convertir los valores numéricos en cadenas de caracteres para
poder imprimirlos como títulos en los dibujos o gráficos. Véase el siguiente
ejemplo:
>> fahr =70; grd=(fahr-32)/1.8;
>> title([
title(['Temperatura
Temperatura ambiente:
',num2str(grd),' grados centígrados'])
>> st1=strcat(‘C:\Documents
t1 t
t(‘C \D
t and
d
Settings\personal\Mis documentos\ ');
Hipermatrices (arrays de más de dos dimensiones)
MATLAB permite trabajar con hipermatrices, es decir con matrices de
más de dos dimensiones
Las funciones que operan con matrices de más de dos dimensiones son
análogas a las funciones vistas previamente, aunque con algunas
diferencias. Por ejemplo, las siguientes sentencias generan, en dos pasos,
una matriz de 2×3×2:
>> 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
funciones de MATLAB para
generar
matrices admiten más de dos
g
p
g
subíndices y pueden ser utilizadas para generar hipermatrices.
Entre ellas están rand(),
rand() randn(),
randn() zeros() y ones()
>> 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 función cat
cat()
() permite concatenar matrices según las distintas “dimensiones”:
>> 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
funciones de MATLAB se pueden
emplear
también con
g
p
p
hipermatrices
size()
devuelve tres o más valores (el n
nº de elementos en cada
dimensión)
ndims()
devuelve el número de dimensiones
squeeze()
elimina las dimensiones que son igual a uno
reshape()
distribuye el mismo número de elementos en una matriz con
distinta forma o con distintas dimensiones
permute(A,v)
permute(A
v) permuta las dimensiones de A según los índices del vector v
ipermute(A,v) realiza la permutación 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 según la primera dimensión, resultando un array de menor dimensión
3 Las funciones matriciales propias del Álgebra Lineal (det (),
3.
() inv(),
inv() etc.)
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 agrupación de datos de tipo diferente
nombre
bajo un mismo 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 número).
CREACIÓN 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
También p
puede crearse la estructura p
por medio de la función 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 función struct() entre apóstrofos ((')),
seguidos del valor que se les quiere dar. Este valor puede ser la cadena
vacía ('') o la matriz vacía ([ ]).
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)
(
) p
permite 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 números o cadenas de
caracteres. Sin embargo, en un array de celdas, el primer elemento puede ser
un número; el segundo una matriz; el tercero una cadena de caracteres; el
cuarto una estructura,, etc..
CREACIÓN 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 tamaño con la mayor
parte de sus elementos cero.
Operar sobre este tipo de matrices con los métodos convencionales lleva a
obtener
tiempos d
de cálculo
Por esta
desarrollado
bt
ti
ál l prohibitivos.
hibiti
P
t razón
ó se han
h d
ll d
técnicas especiales para este tipo de matrices.
En ingeniería 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 posición 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 posición 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 0
0, 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 0
0, 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)
(2,2) 2
(4,2)
(3,3) 1
(1,4)
(3 4) 1
(3,4)
(4 4)
(4,4)
(2,5) 1
(5,5)
-3
2
-1
1
2
FUNCIONES PARA CREAR MATRICES DISPERSAS
Las siguientes
funciones permiten crear matrices dispersas.Se recomienda ver
g
el Help de MATLAB para tener una información más detallada.
speye(m,n)
sprand(m,n)
sprandn(m,n)
sprandsym(n)
spdiags(A)
sparse(m,n)
Matriz identidad dispersa de tamaño m×n
Matriz aleatoria dispersa con distribución uniforme
Matriz aleatoria dispersa con distribución normal
Matriz aleatoria simétrica
Matriz dispersa a partir de las diagonales de otra matriz
Crea una matriz dispersa de tamaño m×n 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
í
f
í
índices
de fila,
j vector de índices
de columna, val vector
de valores, m número de filas, n número de columnas, y
un 6º argumento que permite definir el máximo nnz (por
d f t en ell tamaño
defecto
t
ñ de
d val)
l) por sii se quieren
i
añadir
ñ di
después más 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).
Gráficos en MATLAB
Matlab
M
tl b permite
it crear gráficos
áfi
de
d varios
i tipos,
ti
que se utilizan
tili
para:
– visualizar el contenido de las variables
– crear imágenes/películas/VR/GIS
– generar interfaces de usuario
Tipos de Gráficos (1D, 2D)
Tipos de Gráficos (>=3D)
GRÁFICOS BIDIMENSIONALES
L gráficos
áfi
2
Dd
tá ffundamentalmente
d
t l
t orientados
i t d a lla
Los
2-D
de MATLAB están
representación gráfica de vectores (y matrices).
MATLAB utiliza un tipo especial de ventanas para realizar las operaciones
gráficas.
Funciones g
gráficas 2D elementales
MATLAB dispone de cinco funciones básicas para crear gráficos 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()
plotyy()
loglog()
semilogx()
semilogy()
crea un gráfico a partir de vectores y/o columnas de matrices
matrices, con
escalas lineales sobre ambos ejes
dibuja dos funciones con dos escalas diferentes para las
ordenadas una a la derecha y otra a la izquierda de la figura
ordenadas,
figura.
ídem con escala logarítmica en ambos ejes
ídem con escala lineal en el eje de ordenadas y logarítmica en
ell eje
j d
de abscisas
b i
ídem con escala lineal en el eje de abscisas y logarítmica en el
eje de ordenadas
FUNCIÓN PLOT
Esta es la función clave de todos los gráficos 2-D en MATLAB.
g
Ya se ha dicho q
que el elemento básico de los gráficos
bidimensionales es el
vector.
Se utilizan también cadenas de 1
1, 2 ó 3 caracteres para indicar colores y tipos
de línea.
La función
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 FUNCIÓN PLOT
Esta es la función clave de todos los gráficos 2-D en MATLAB.
[1 3 2 4 5 3]
>> x
x=[1
x=
132453
>> plot(x)
>> x=[1 6 5 2 1]; y=[1 0 4 3 1];
>> plot(x,y)
La función plot() permite también dibujar múltiples curvas introduciendo
varias parejas de vectores como argumentos.
Dibujar la función 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 FUNCIÓN 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 también con matrices como argumentos.
plot(A)
ordenadas frente al índice de los
dibuja una línea 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 dimensión de las filas
coincide con la de x, se dibujan las filas
plot(A,x) análogo 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 LÍNEA Y MARCADORES EN LA FUNCIÓN PLOT
El conjunto
j
básico de argumentos
g
de esta función es una tripleta formada por
dos vectores y una cadena de 1, 2 ó 3 caracteres que indica el color y el tipo de
línea o de marker
Sintaxis:
plot(x,y,'-.rs', 'LineWidth',4, 'MarkerEdgeColor','k', 'MarkerFaceColor''g',...
'MarkerSize',10)
Ejemplos de gráficos
Ejemplo1:
Ej
l 1
>> x=0:pi/100:4*pi;
>> y=sin(x).*cos(x/3);
>> plot(x,y)
1
0.8
0.6
1
0.4
0.8
j p
Ejemplo2:
>> x=0:pi/100:4*pi;
>> y=sin(x).*cos(x/3); z=sin(x).*cos(x/2);
>> plot(x,y,x,z)
plot(x y x z)
0.2
0.6
0
0.4
1
-0.2
0.2
1
0.8
-0.4
0
0.8
0.6
-0.6
-0.2
0.6
Ejemplo3:
>> x=0:pi/100:4*pi;
>> A=[sin(x);sin(x/2);sin(x/3);sin(x/4)];
plot(x,A)
( , )
>> p
Ejemplo4:
plot(x,y,’r*’)
( ,y, )
>> p
0.4
-0.8
-0.4
0.4
0.2
-1
-0.6
0.20
0
-0.80
-0.2
-0.2
-1
0
-0.4
-0.4
2
4
6
8
10
12
14
2
4
6
8
10
12
14
22
44
66
8 8
10 10
12 12
14 14
-0
-0.6
-0.6
0 66
-0.8
-0.8
-1
-1
00
>>plot(x,y,'-.rh', 'MarkerEdgeColor','k', 'MarkerFaceColor''g‘)
Ejemplos de gráficas de funciones
y   25  x
x  y  25
2
2
2
x  r cos(
cos(tetha
tetha)
y  rsen (tetha
(tetha)
y  x  3x  x
4
x  ((2,2)
2
AÑADIR LÍNEAS A UN GRÁFICO YA EXISTENTE
Existe la posibilidad de añadir líneas a un gráfico 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 cómo se añaden las gráficas de x2 y x3 a la gráfica
de x previamente creada (cada una con un tipo de línea 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
gráfica
á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 múltiples gráficos 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 número
ú
d subdivisiones
de
bdi i i
en filas
fil y columnas,
l
e i es la
l
subdivisión 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: FUNCIÓN AXIS()
d básico
bá i es ell comando
d axis.
i Por
P defecto,
d f t MATLAB ajusta
j t la
l escala
l de
d
El comando
cada uno de los ejes de modo que varíe entre el mínimo y el máximo 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 dirección 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 automático sólo en dirección x
x z
axis('auto xz') utiliza el escalado automático sólo en direcciones x,
axis(axis)
mantiene los ejes en sus actuales valores, de cara a posibles
nuevas gráficas añadidas con hold on
axis('tight')
establece los mismos límites 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: FUNCIÓN AXIS()
Es posible
E
ibl ttambién
bié ttener un control
t l preciso
i sobre
b llas marcas y llos rótulos
ó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'})
Obsérvese
Ob
é
cómo
ó
llas propiedades
i d d se establecen
t bl
sobre
b llos ejes
j actuales,
t l
a llos que
se accede con la función gca (get current axis).
Manipulación de gráficos
Existen diversas funciones para la manipulación de gráficos:
title(‘ ') Adiciona un titulo al gráfico
xlabel(‘ ', 'FontSize', 16) Adiciona la etiqueta del eje “x”
ylabel(‘ ','FontSize',16) Adiciona la etiqueta del eje “y”
grid on
g
Añade una rejilla
j a la g
grafica actual
grid off
Elimina la rejilla
text(x,y,’string’) Añade una etiqueta o cualquier texto en una localización
especifica xx,y.
y
gtext(’string’) Añade una etiqueta o cualquier texto, su posición se elige en
cualquier punto de la figura, con el ratón.
Símbolos matemáticos, letras griegas, y caracteres TEX
g
Se p
pueden incluir símbolos matemáticos y letras 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 gráficas: Función figure
Si se llama a la función figure sin argumentos, se crea una nueva ventana
gráfica con el número 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 número
consecutivo que le corresponda
La función close cierra la figura activa, mientras que close(n) cierra la ventana
o figura número n.
El comando clf elimina el contenido de la figura activa
La función gcf devuelve el número de la figura activa en ese momento.
El comando figure(gcf) (get current figure) permite hacer visible la ventana de
gráficos desde la ventana de comandos.
Control de ventanas gráficas: Función figure
>> x=[
x=[--4*pi:pi/20:4*pi];
>> plot(x,sin(x),'r',x,cos(x),'g')
>> title('Función
titl ('F
ió seno(x)
( ) -en rojo
rojoj - y función
f
ió coseno(x)
( ) -en verdeverde
d -')
>> xlabel('ángulo en radianes'), figure(gcf)
>> ylabel(
ylabel('valor
valor de la función trigonométrica
trigonométrica')), 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 función figure también admite que se fijen algunas de sus propiedades, como por
ejemplo
eje
p o la
a posición
pos c ó y e
el ta
tamaño
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 gráficas 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-D
3D
pie()
gráficos con forma de “tarta”
pie3() gráficos 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() función análoga a bar() sin líneas internas
errorbar()
representa sobre una gráfica –mediante barras– valores de
errores compass() dibuja los elementos de un vector complejo
como un conjunto de vectores partiendo de un origen común
feather()
()
dibuja
j los elementos de un vector complejo
j como un conjunto
j
de vectores partiendo de orígenes 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)
(
)
FUNCIÓN FPLOT
vectores Si se quiere dibujar una
La función plot vista anteriormente dibuja vectores.
función, antes de ser pasada a plot debe ser convertida en un vector de
valores.
La función fplot admite como argumento un nombre de función o un
nombre de fichero *.m en el cual esté definida una función de usuario.
La función puede ser escalar (un único resultado por cada valor de x) o
vectorial La forma general de esta función es la siguiente:
vectorial.
fplot('funcion', limites, 'cadena', tol)
donde: 'funcion' representa el nombre de la función o del fichero *.m entre
apóstrofos, 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
línea, tol es la tolerancia de error relativo.
Esta función puede utilizarse también 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
gráfico puede obtenerse con un comando posterior por medio de la función
plot
Ejemplo
Se comienza creando un fichero llamado mifunc.m en el directorio
C:\Archivos de programa\MATLAB\R2006a\work que contenga las
líneas 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 continuación se ejecuta el comando
>> fplot('mifunc(x)', [-20 20], 'g')
Obsérvese que la función mifunc devuelve una matriz con dos
columnas, que constituyen las dos gráficas dibujadas. En este caso se
ha utilizado p
para ellas el color verde.
DIBUJO SIMPLIFICADO DE FUNCIONES:
() Y EZPOLAR()
()
FUNCIONES EZPLOT()
La función ezplot es una función de dibujo simplificada, útil cuando se quiere
obtener de forma muy rápida la gráfica de una función.
>> ezplot(f);
donde f es el nombre o mejor el handle de una función. También puede ser una
función inline. Por defecto la función 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 función f puede ser una función implícita de dos variables f(x,y)=0. El
intervalo por defecto para cada variable es [–2π ≤ x ≤ 2π]. También se
puede
d d
definir
fi i un iintervalo
t
l común
ú o específico
í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 ratón
Se realiza mediante la función 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 función son las siguientes:
[x,y] = ginput lee un número 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 también un vector de
enteros bot con el código ASCII de la tecla pulsada o el número del
botón del ratón (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 línea horizontal,
espaciados de forma uniforme
quiver
Muestra vectores 2-D descritos por la componentes (u,v)
Ejemplo:
>>wdir = [45 90 90 45 360 335
360 270 335 270 335 335];
>>knots = [[6 6 8 6 3 9 6 8 9 10
14 12];
>>rdir = wdir * pi/180;
>>[x y] = pol2cart(rdir
>>[x,y]
pol2cart(rdir,knots);
knots);
>>compass(x,y)
Ejemplo:
>>t = 0:0.5:10;
>>s = 0.05+i;
>>Z = exp(-s*t);
feather(Z)
GRÁFICOS TRIDIMENSIONALES
Quizás sea ésta una de las características de MATLAB que más admiración
despierta entre los usuarios no técnicos (cualquier alumno de ingeniería sabe
que hay ciertas operaciones algebraicas que tienen dificultades muy
superiores, aunque "luzcan" menos).
Gráficos de línea
La primera forma de gráfico 3D es la función plot3, que es el análogo
tridimensional de la función plot. Esta función dibuja puntos cuyas
coordenadas están contenidas en 3 vectores,
vectores bien uniéndolos mediante una
línea 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 gráfico 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.^3y.^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
0
-5
5
-10
4
2
4
2
0
0
-2
-2
-4
-4
Función Meshgrid
Genera una matriz (arreglño) 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 gráficos
á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 gráficos volumétricos tridimensionales.
[[x,y]
y] = meshgrid(-3:3,-3:3)
g (
)
GRÁFICOS TRIDIMENSIONALES
G áfi
Gráficos
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);
( )
para crear las g
graficas de malla y superficie
p
en 3D son:
Las funciones p
mesh(X,Y,Z)
mesh(
X,Y,Z)
surf(X
surf(X,Y,Z,C
surf(
X
X,Y,Z,C)
Y Z C)
C)
Crea una malla en 3D
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 sólida
ó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 gráficos
Funciones surf, surfc
Sintaxis:
surf(Z)
surf(Z,C
surf(
Z,C))
surf(X,Y,Z
surf(
X,Y,Z))
surf(X,Y,Z,C
surf(
X,Y,Z,C))
surf(...,'PropertyName',PropertyValue
surf(...,'
PropertyName',PropertyValue))
surf(axes_handles
surf(
axes_handles,...)
,...)
surfc(...)
surfc(...)
h = surf(...)
hsurface = surf('v6',...)
h
hsurface
f
= surfc('v6',...)
surfc
f ('v6',...)
(' 6' )
>>[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
10
>> colormap hsv
10
5
5
0
0
-5
-5
-10
4
-10
4
2
0
-2
-4
-3
-2
-1
0
1
2
3
2
0
-2
-4
-3
-2
-1
0
1
2
3
>> surfc(x,y,z)
10
5
0
-5
-10
4
2
0
-2
-4
-3
-2
-1
0
1
2
3
Funciones mesh
mesh,, meshc
meshc,, meshz
Sintaxis:
mesh(X,Y,Z)
mesh(
X,Y,Z)
mesh(Z)
mesh
(Z)
mesh(...,C)
mesh
h(...,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

x
z  xe
2
2
 y2

GRÁFICOS TRIDIMENSIONALES
DIBUJO DE LÍNEAS DE CONTORNO: FUNCIONES CONTOUR Y CONTOUR3
Una forma distinta de representar funciones tridimensionales es por medio de
isolíneas o curvas de nivel.
Posibles formas de estas funciones son las siguientes:
contour(Z, val)
contour(u,v,W,20)
contour(Z,20,'r--')
contourf(Z val)
contourf(Z,
siendo val un vector de valores para las isolíneas dibujar
se utilizan u y v para dar valores a los ejes coordenadas
se puede especificar el tipo de línea
análoga a contour(),
contour() pero rellenando el espacio entre
líneas
Crear las curvas de nivel de las graficas anteriores
>> contour(
contour(x,y,z)
x,y,z);
Función contour3
Sintaxis:
contour3(Z)
contour3(Z,n
(Z,n)
, )
contour3(
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
Utilización del color en gráficos 3-D
En los dibujos realizados hasta ahora, se ha visto que el resultado adoptaba
determinados colores, pero todavía no se ha explicado de dónde 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 están predefinidos en MATLAB. Buscando colormap en
Help se obtiene –entre otra información–
información– la lista de los siguientes mapas de
colores:
autumn
bone
colorcube
cool
copper
flag
gray
hot
hsv
jet
pink
prism
spring
summer
white
winter
Mapas de colores:
varies smoothly from red, through orange, to yellow.
component
is a grayscale colormap with a higher value for the blue component.
contains as many regularly spaced colors in RGB colorspace
consists of colors that are shades of cyan and magenta.
varies smoothly from black to bright copper.
consists of the colors red, white, blue, and black.
returns a linear grayscale colormap
colormap..
varies smoothly from black, through shades of red, orange, and
yellow, to white.
varies the hue component of the hue
hue--saturation
saturation--value color model.
model
The colors begin with red, pass through yellow, green, cyan, blue,
magenta, and return to red.
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..
contains pastel shades of pink.
repeats the six colors red, orange, yellow, green, blue, and violet.
consists of colors that are shades of magenta and yellow.
consists of colors that are shades of g
green and yyellow.
is an all white monochrome colormap
colormap..
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 función 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 más de las necesarias; ésa es la
razón de que en el ejemplo anterior a la función pcolor se le pasen 129 filas y 2
columnas).
DIBUJO DE SUPERFICIES FACETEADAS
La función surf tiene diversas posibilidades referentes a la forma en que son
representadas las facetas o polígonos coloreados. Las tres posibilidades son las
siguientes::
siguientes
shading flat
determina sombreado con color constante para cada polígono. Este
sombreado se llama plano o flat
flat..
shading interp establece que el sombreado se calculará por interpolación de
colores entre los vértices de cada faceta. Se llama también
sombreado
b d de
d G
Gouraud
d
shading faceted
consiste en sombreado constante con líneas negras
superpuestas.. Esta es la opción por defecto
superpuestas
>>Shading flat
>>Shading
>>shading
>>
shading interp
>>shading
>>
shading faceted
OTRAS FUNCIONES GRÁFICAS 3D
Las siguientes funciones se derivan directamente de las anteriores, pero
añaden algún pequeño detalle y/o funcionalidad:
surfc
combinación de surf
surf,, y contour en z=0
trisurf
similar a surf
surf,, dibuja una superficie 33-D a partir de los valores de
una función
de ttriángulos.
f
ió en una malla
ll d
iá
l
meshz
mesh con plano de referencia en el valor mínimo y una especie de
“cortina” en los bordes del dominio de la función
trimesh
similar a mesh
mesh,, dibuja una superficie 33-D a partir de los valores de
una función en una malla de triángulos.
surfl
para controlar la iluminación determinando la posición e intensidad
de un foco de luz.
light
crea un foco de luz en los ejes actuales capaz de actuar sobre
superficies
3
3--D. Se le deben p
pasar como argumentos
el color, el
p
g
estilo (luz local o en el infinito) y la posición. Son muy importantes
las propiedades de los objetos iluminados patch y surface
surface;;
consultarlas por medio del Help cuando se vayan a utilizar.
colorbar
añade 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 función Light
>>h = surf(
surf(peaks
peaks);
);
>>set(h,'FaceLighting','phong','FaceColor','interp
(h,'FaceLighting','phong','FaceColor','interp',...
,
g
g,p
g,
,
p',...
,
>>set(
'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 gráficos
Con la función colorbar
colorbar,, se muestra la barra de colores actual.
>>colorbar
Ejemplo:
[x,y,z,v
x
x,y,z,v]
y z v]
v] = flow;
xmin = min(x(:));
ymin = min(y(:));
zmin = min(z(:));
xmax = max(x(:));
ymax = max(y(:));
zmax = max(z(:));
hslice
s ce = su
surf((linspace(xmin,xmax,100),
surf(linspace
space(((xmin,xmax,100),
space
, a , 00),
linspace(ymin,ymax,100),
linspace
(ymin,ymax,100), zeros(100));
hold on
slice(x,y,z,v,xmax
(x,y,z,v,xmax,[
,y, , ,
,[ ],[ ]);
hx = slice(
set(hx,'FaceColor','interp','EdgeColo
set(
hx,'FaceColor','interp','EdgeColo
r','none')
r','none
')
hy = slice(
slice(x,y,z,v
x,y,z,v,[],
,[],ymax
ymax,[]);
,[]);
set(hy,'FaceColor','interp','EdgeColor
set(
hy,'FaceColor','interp','EdgeColor
','none')
','none
')
hz = slice(
slice(x,y,z,v
x,y,z,v,[],[],
,[],[],zmin
zmin);
);
set(hz,'FaceColor','interp','EdgeColo
set(
hz,'FaceColor','interp','EdgeColo
r','none')
r','none
')
rotate(
rotate(hslice
(hslice,[
,[--1,0,0],,[
1,0,0],
, , ],-45))
xd = get(hslice,'XData
get(hslice,'XData');
');
yd = get(hslice,'YData
get(hslice,'YData');
');
get((hslice,'ZData');
get(hslice,'ZData
,
');
);
zd = g
delete(hslice
delete(
hslice))
daspect([1,1,1])
daspect([1,1,1])
axis tight
box on
view(--38.5,16)
view(
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);
);
set(h,'FaceColor','interp
set(
h,'FaceColor','interp',
', ''EdgeColor','none
EdgeColor','none',
',
'DiffuseStrength',.8)
lightangle(
lightangle
g
g (-45,45)
, )
colormap (jet(24))
set(gcf,'Renderer','zbuffer
set(
gcf,'Renderer','zbuffer')
')
Diferentes cajas de herramientas (toolboxes)
Gráficos
plottools
disttool
dfittool
Descargar