Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Gráficos con Matlab
1. ´
GRAFICAS CON MATLAB
Roberto Rodr´
ıguez del R´
ıo
Departamento de Matem´tica Aplicada
a
Universidad Complutense de Madrid
´
INTRODUCCION
1. Manejo elemental de Matlab.
1.1. Interfaz de usuario. Variables.
1.2. Vectores y Matrices.
2. Gr´ficas 2D.
a
2.1. Funciones de la forma y = f (x)
2.2. Curvas en param´tricas.
e
2.3. Curvas en polares.
2.4. Cambios de coordenadas polares-cartesianas.
3. Gr´ficas 3D.
a
3.1. Curvas en el espacio.
3.2. Funciones de la forma z = f (x, y)
3.3. Manipulacin de Gr´ficos 3D.
a
3.4. Algunas superficies en el espacio.
3.5. Gr´ficos de funciones complejas.
a
4. Gr´ficos estad´
a
ısticos.
4.1. Diagramas de sectores.
4.2. Diagramas de Pareto.
4.3. Diagramas de barras.
4.4. Histogramas.
5. Gr´ficas en movimiento: “movies”.
a
REFERENCIAS
1
2. ´
INTRODUCCION
El nombre MatLab es una abreviatura de las palabras MATrix LABoratory. MatLab es un sistema interactivo para c´lculos cient´
a
ıficos y de
ingenier´ basado en las matrices. Con ´l se pueden resolver complejos
ıa
e
problemas num´ricos sin necesidad de escribir un programa espec´
e
ıfico
para ello, aunque tambi´n es posible programar. Adem´s, el programa
e
a
MATLAB dispone, dependiendo de la versi´n, de diferentes m´dulos
o
o
(Toolboxes) que permiten resolver problemas espec´
ıficos.
Nosotros nos vamos a centrar en la capacidad de MatLab para generar gr´ficos, aunque, antes de llegar hasta este punto, haremos un r´pido
a
a
resumen de los comandos b´sicos del programa.
a
Debido a que MatLab es un programa de C´lculo Num´rico, la fora
e
ma de producir gr´ficos es completamente distinta de la de programas
a
de C´lculo Simb´lico como Derive, Mathematica o Maple. En MatLab,
a
o
nosotros tenemos que calcular mediante comandos adecuados los puntos
que despu´s se representar´n en la gr´fica.
e
a
a
1. MANEJO ELEMENTAL DE MATLAB
Supongamos que hemos sido capaces de abrir el programa. En Matlab, las ´rdenes se introducen escribi´ndolas una a una a continuaci´n
o
e
o
del prompt (>>) que aparece en la ventana del usuario. Veamos en primer
lugar, algunas de las operaciones matem´ticas m´s elementales.
a
a
Para sumar dos n´meros:
u
>>2+2
ans =
4
Despu´s de escribir cada comando hay que pulsar Intro para que
e
lo ejecute. Si despu´s de esta agotadora primera sesi´n con MatLab
e
o
queremos salir del programa, se puede hacer de dos formas, escribiendo
exit a continuaci´n del prompt, o bien con File Exit MATLAB.
o
El valor que queremos calcular tambi´n se puede asignar a una vae
riable. Por ejemplo:
x=3^2
x=
9
2
3. Hay que tener en cuenta que MatLab distingue entre may´sculas y
u
min´sculas, por lo tanto, se distingue entre la variable X y la variable x.
u
La notaci´n para las operaciones matem´ticas elementales es la hao
a
bitual en todos los programas de C´lculo Simb´lico:
a
o
suma
resta
divisi´n
o
exponenciaci´n
o
multiplicaci´n
o
+
/
^
*
Tambi´n est´n definidas algunas de las funciones m´s comunes utilie
a
a
zadas en Matem´ticas. Su sintaxis coincide tambi´n con la que se utiliza
a
e
en la mayor´ de los programas de Matem´ticas, como, por ejemplo, el
ıa
a
programa DERIVE, aunque hay algunas diferencias. Algunas de estas
funciones son:
sin
sinh
asin
cos
cosh
acos
tan
atan
exp
log
log10
sqrt
abs
seno
seno hiperb´lico
o
arcoseno
coseno
coseno hiperb´lico
o
arcocoseno
tangente
arcotangente
exponencial
logaritmo neperiano
logaritmo decimal
ra´ cuadrada
ız
valor absoluto
Para obtener listas completas de todas las funciones que puede utilizar Matlab, as´ como para saber el uso de cada una de ellas o de cualquier
ı
comando, siempre se puede acudir al help. Esto se puede hacer de varias
formas, poniendo >>helpwin, siendo el propio programa quien nos ofrece
la ayuda (como en cualquier otro programa), o poniendo >>helpdesk,
con lo que nos ofrece ayuda interactiva, conect´ndose a Internet si este
a
recurso est´ disponible en nuestro ordenador.
a
Si conocemos el nombre del comando, pero queremos saber para
qu´ sirve, se puede poner:
e
>>help comando
3
4. Y nos ofrecer´ ayuda sobre el comando en cuesti´n, si ´ste existe.
a
o
e
Por ejemplo,
>>help rotate3d
ROTATE3D Interactively rotate the view of a 3-D plot.
ROTATE3D ON turns on mouse-based 3-D rotation.
ROTATE3D OFF turns if off.
ROTATE3D by itself toggles the state.
See also ZOOM.
Nos ofrece informaci´n sobre el comando rotate3d, comando que
o
sirve para rotar figuras tridimensionales utilizando el rat´n.
o
Otra forma de buscar ayuda es utilizar el comando lookfor, por
ejemplo, poniendo >>lookfor cos, nos aparecer´ una lista con todos
a
los comandos que tienen que ver con la funci´n coseno.
o
1.1. Interfaz de usuario. Variables
Con las flechas del cursor: ↑ y ↓ , se pueden recuperar las ´rdenes
o
anteriores, sin tener que volver a teclearlas. Esto resulta util en el caso
´
de una equivocaci´n o cuando se quiere repetir un comando con alguna
o
peque˜a modificaci´n.
n
o
A veces, puede resultar necesario, hasta imprescindible, que el resultado de un c´lculo no aparezca en pantalla. Por ejemplo, si generamos
a
una matriz de orden muy alto con el objeto de hacer despu´s una gr´fica.
e
a
El hecho de que aparezca la matriz en pantalla puede resultar un poco
engorroso. Para conseguir esto se pone un punto y coma al final de la
instrucci´n.
o
Por ejemplo,
x=sin(3);1
No aparece ning´n resultado, pero ha realizado el c´lculo, porque si
u
a
escribimos el valor de x, aparecer´ el valor 0.1411.
a
1
El argumento de las funciones trigonom´tricas siempre se mide en radianes.
e
4
5. Los comandos se pueden ir escribiendo y ejecutando uno a uno, es
decir, rengl´n a rengl´n, y tambi´n se pueden escribir uno a continuaci´n
o
o
e
o
de otro en una misma l´
ınea, en cuyo caso deben ir separados por comas.
Si el comando o la cantidad de comandos es demasiado larga para que
aparezca en un unico rengl´n, se puede romper la cadena y seguir en el
´
o
siguiente rengl´n, escribiendo tres puntos suspensivos. Por ejemplo,
o
>>x=sin(10),y=cos(10),...
z=tan(10)
x =
-0.5440
y =
-0.8391
z =
0.6484
Los resultados num´ricos que ofrece MatLab se pueden visualizar en
e
diferentes formatos. Por defecto, si un resultado es un n´mero entero, lo
u
ofrecer´ como tal. Si no lo es, lo har´ con 4 cifras decimales (redondeana
a
do a la cuarta cifra). Si el resultado es un n´mero grande, lo expresar´ en
u
a
notaci´n cient´
o
ıfica. Este formato que usa por defecto se puede modificar en el men´ File Preferences Numeric Format, aunque tambi´n
u
e
se puede hacer directamente escribiendo las ´rdenes a continuaci´n de
o
o
>>:
Si escribimos:
>>x=34/8449;
y vamos cambiando el formato como se indica en la siguiente tabla,
volviendo a escribir >>x, cada vez se obtiene el mismo resultado en las
distintas formas num´ricas.
e
5
6. Formato
format long
format short e
format long e
format hex
format bank
format +
format rat
format short
Variable x
0.00402414486922
4.0241e-003
4.024144869215292e-003
3f707b9f29b8eae2
0.00
+
2/497
0.0040
Caracter´
ısticas
16 d´
ıgitos
5 d´
ıgitos m´s exponente
a
16 d´
ıgitos m´s exponente
a
sistema hexadecimal
2 decimales
signo +, - ´ 0
o
aproximaci´n racional
o
formato por defecto
No obstante, independientemente del formato que se est´ utilizando,
e
la representaci´n interna del n´mero siempre es la misma, lo unico que
o
u
´
cambia es la forma en que lo vemos en la pantalla.
En Matlab, lo normal es ir asignando valores escalares o matriciales a
variables, si en un momento determinado queremos saber con qu´ variae
bles estamos trabajando, se puede escribir >>who, que nos indica qu´ vae
riables est´n en uso; el comando >>whos, nos indica lo mismo, pero
a
adem´s nos informa del tama˜o y del tipo de variable. O bien, en el
a
n
item File con Show Workspace, que produce el mismo resultado que
>>whos. Para borrar una variable, se puede utilizar el comando >>clear
variable, y borrar´ la variable que se indique, si se pone s´lo >>clear,
a
o
se borrar´n todas las variables que se est´n utilizando actualmente.
a
e
Las variables pueden contener hasta 19 caracteres, los caracteres m´s
a
all´ del 19 se ignoran. Las variables deben comenzar con una letra, sea
guida por letras, d´
ıgitos o guiones de subrayado.
Adem´s hay algunas variables especiales que se utilizan por defecto:
a
ans: Es la variable que se utiliza en los resultados. En la operaci´n
o
siguiente se puede recuperar este resultado volviendo a escribir
ans. Esta variable se modificar´n en cuanto haya un nuevo resula
tado.
pi: El n´mero π. (No hay una variable para el n´mero e, pero se
u
u
podr´ definir >>e=exp(1)).
ıa
eps: Es el n´mero m´s peque˜o que utiliza el ordenador tal que,
u
a
n
cuando se le suma 1, crea un n´mero en coma flotante mayor que
u
1.
Inf: Infinito, aparece si hacemos 1/0.
NaN: Mensaje de error (Not a Number), por ejemplo, 0/0.
6
7. realmin, realmax: Son, respectivamente, el menor y el mayor de
los n´meros reales utilizables.
u
Poniendo el s´
ımbolo % se consigue que no se ejecute lo que venga
a continuaci´n, en el mismo rengl´n, sino que se interprete como un
o
o
comentario, se suele utilizar para escribir comentarios aclaratorios en
l´
ıneas de comandos de manera que no afecten a su ejecuci´n. Por ejemplo,
o
si ponemos,
>>sqrt(2) % Ra´z cuadrada de 2
ı
calcular´ la ra´ de 2 y se saltar´ el comentario.
a
ız
a
Una buena forma de acabar la lectura de esta primera introducci´n
o
ser´ la de echar un vistazo a la demo que viene incorporada con el proıa
grama. Para activarla basta con teclear >>demo, aparecer´ una ventana
a
en la que se pueden ir viendo algunas de las capacidades del programa.
1.2. Vectores y matrices
Los vectores y las matrices son los elementos b´sicos con los que
a
trabaja Matlab. Veamos c´mo se introducen y c´mo se pueden hacer
o
o
algunas de las operaciones elementales con ellos.
VECTORES. Un vector se puede definir introduciendo sus coordenadas, separadas por espacios o por comas, entre corchetes:
>> x=[1 2 3]
x
=
1
2
3
Si queremos definir un vector columna, se separan las filas por puntos
y comas, o bien se calcula el transpuesto de un vector fila con >>x’.
Otra forma de crear vectores es la siguiente:
>> x=1:0.5:3
x =
1.0000
1.5000
2.0000
2.5000
3.0000
que genera un vector que va desde 1 hasta 10 con un paso de 0.5 unidades.
Exactamente el mismo resultado lo conseguir´
ıamos con el comando
linspace
7
8. >>x=linspace(1,3,5)
que produce 5 n´meros igualmente espaciados entre 1 y 3.
u
PRODUCTO ESCALAR. Consideremos los dos vectores siguientes:
>>a=[1 2 3];b=[2 -3 5];
Si los multiplicamos de la forma
c=a.*b
c =
2
-6
15
obtenemos el producto de los elementos del primero y del segundo vector
elemento a elemento. Para obtener el valor del producto escalar
>>sum(c)
ans =
11
El producto de dos vectores o dos matrices elemento a elemento
ser´ muy importante cuando queramos representar gr´ficas de funciones.
a
a
MATRICES. Para introducir una matriz, se separa cada fila con
un punto y coma
A=[3 2 1; 6 5 4; 9 8 7]
A =
3 2 1
6 5 4
9 8 7
Ejercicio 1.1. Despu´s de definida la matriz, probar los siguientes coe
mandos e intentar descubrir para qu´ sirven:
e
a) >>A(2,3) o por ejemplo >>A(1,2)
b) A(:,1) y tambi´n A(2,:)
e
c) A^2 y A.^2. ¿En qu´ se diferencian estos dos comandos?
e
Veamos algunas operaciones elementales con matrices. Definimos dos
matrices 3 × 3
>>A=[1 1 2; 3 4 6; 2 1 0];B=[-1 2 0; 2 0 0; -2 3 4];
8
9. Para sumarlas
>>C=A+B
C =
0
5
0
3
4
4
2
6
4
Para multiplicarlas
>>D=A*B
D =
-3
-7
0
8
24
4
8
24
0
Para elevar una matriz a una potencia
>>A^3
ans =
45
162
43
44
157
39
58
204
46
Para calcular su determinante
>>det(A)
ans =
-4
Para calcular su inversa, si existe
>>inv(A)
ans =
1.5000
-3.0000
1.2500
-0.5000
1.0000
-0.2500
0.5000
0
-0.2500
MATRICES PREDEFINIDAS. En MatLab hay varios comandos que sirven para definir con gran facilidad matrices de tipos particulares. Algunas de estas funciones son las siguientes:
eye(n), matriz unidad de tama˜o (n × n)
n
9
10. zeros(m,n), matriz de ceros de tama˜o (m × n)
n
zeros(n), lo mismo, pero de orden (n × n)
ones(n), matriz de unos (n × n)
ones(m,n), lo mismo, pero de orden (m × n)
linspace(x1,x2,n), genera un vector con n valores igualmente
espaciados entre x1 y x2
logspace(d1,d2,n), genera un vector con n valores espaciados
logar´
ıtmicamente entre 10d1 y 10d2
rand(n), matriz de n´meros aleatorios entre 0 y 1, distribuidos
u
uniformemente (n × n)
rand(m,n), lo mismo, de tama˜o m × n
n
randn(n), matriz de n´meros aleatorios (n×n), distribuidos seg´n
u
u
la normal estandar, N (0, 1)
magic(n), crea una matriz en forma de cuadrado m´gico de taa
ma˜o n × n
n
´
2. GRAFICAS 2D
2.1. Funciones de la forma y = f (x)
Para hacer gr´ficas de funciones de una variable con MatLab, pria
mero tenemos que crear una tabla de valores de la variable para despu´s
e
dibujar la funci´n. Por ejemplo, queremos dibujar la gr´fica de la funci´n
o
a
o
y = sen(x):
Primero creamos una tabla de valores para x
>>x=0:pi/100:2*pi;
Con este comando hemos formado una tabla (el vector x) con 200
valores entre 0 y 2 ∗ π. Otra forma de conseguir el mismo resultado ser´
ıa
utilizar el comando
>>x=linspace(0,2*pi,200);
Ahora calculamos los valores de y
>> y = sin(x);
y por ultimo la dibujamos (ver figura 1)
´
10
11. 1
0.8
0.6
0.4
0.2
0
−0.2
−0.4
−0.6
−0.8
−1
0
1
2
3
4
5
6
7
Figura 1. Gr´fica de y = sen(x).
a
>>plot(x,y)
Realmente lo que hemos hecho es dibujar 200 puntos de la funci´n en
o
el intervalo [0, 2π], y posteriormente el programa los ha unido mediante
segmentos. Si el n´mero de puntos es lo suficientemente grande, como
u
en este caso, no se aprecian los v´rtices.
e
Veamos un ejemplo algo m´s complicado. Queremos dibujar ahora
a
2
la gr´fica de la funci´n y = xe−x .
a
o
Definimos los valores para los que queremos hacer la gr´fica
a
>>x=-3:.01:3;
Es decir, que vamos a dibujar la gr´fica en el intervalo [−3, 3] con un
a
paso de longitud 0.01.
Definimos la funci´n
o
>>y=x.*exp(-x.^2);
(¿Por qu´ hay que poner los puntos antes de las operaciones?)
e
Y por ultimo, se escribe el comando para que ejecute el dibujo (fi´
gura 2.)
>>plot(x,y)
El aspecto de la gr´fica se puede modificar utilizando algunos coa
mandos:
11
12. 0.5
0.4
0.3
0.2
0.1
0
−0.1
−0.2
−0.3
−0.4
−0.5
−3
−2
−1
0
1
2
3
2
Figura 2. Gr´fica de y = xe−x .
a
0.5
0.4
0.3
0.2
0.1
0
−0.1
−0.2
−0.3
−0.4
−0.5
−3
−2
−1
0
1
2
3
2
Figura 3. Gr´fica de y = xe−x con cuadr´
a
ıcula.
- Cuadr´
ıcula. Si queremos que aparezca una cuadr´
ıcula sobre el dibujo, utilizaremos el comando >>grid on. El aspecto del dibujo ser´
ıa
ahora como el de la figura 3. Para desactivar la cuadr´
ıcula habr´ que
a
escribir >>grid off.
- Color y trazo. El comando plot ofrece m´ltiples posibilidades de cou
lor y forma de trazo de la gr´fica. Por ejemplo, el comando
a
>>plot(x,y,’r*’), nos dibujar´ la gr´fica en color rojo y con asteıa
a
riscos. Para consultar todas las posibilidades, hacer >>help plot.
- Ejes. Los ejes que aparecen por defecto en una gr´fica tambi´n se
a
e
pueden modificar. Con el comando >>axis([-2 2 -1 1]), conseguiremos que la gr´fica aparezca en la regi´n −2 ≤ x ≤ 2, −1 ≤ x ≤ 1.
a
o
Con >>axis square, conseguiremos que la figura aparezca en un cua12
13. drado, sin cambiar el rango de los ejes. Con el comando >>axis equal,
conseguiremos que los rangos de los ejes sean iguales.
- Zoom. Utilizando el comando >>zoom on. Se puede agrandar la
figura o alguna zona seleccionada de la figura. Hay que abrir la figura
y utilizar los botones izquierdo y derecho del rat´n. Para desactivarlo,
o
habr´ que escribir >>zoom off.
a
- Varias gr´ficas en la misma figura. Se pueden dibujar tantas gr´fia
a
cas como se quieran en una misma figura. Si ya tenemos dibujada una,
y generamos una nueva gr´fica, en principio la figura anterior es sustia
tuida por la nueva. Sin embargo, utilizando el comando >>hold on, se
mantendr´ la anterior, con todas sus propiedades, y se podr´ dibujar
a
a
encima una nueva. Para desactivar el comando anterior: >>hold off.
Otra forma de hacerlo es dibujar desde el principio dos gr´ficas juntas,
a
por ejemplo, vamos a dibujar las gr´ficas de las funciones y = sen(x) e
a
π
y = sen(x + ) en la misma figura (4):
3
Generamos las tablas,
>>x=linspace(0,2*pi,300);
>>y=sin(x);
>>z=sin(x+pi/3);
Y ahora las dibujamos
1
0.8
0.6
0.4
0.2
0
−0.2
−0.4
−0.6
−0.8
−1
0
1
2
3
4
5
6
7
Figura 4. Gr´ficas de y = sen(x) y de y = sen(x +
a
>>plot(x,y,’r-’,x,z,’g--’),grid on
13
π
).
3
14. (La primera en color rojo, con trazo continuo, y la segunda en verde,
con trazo discontinuo).
- Etiquetado de gr´ficas. Existen diversas posibilidades para el etia
quetado de las gr´ficas. Ve´moslo con un ejemplo (ver figura 5):
a
a
>>x=linspace(-3,3,500);y=exp(-x.^2);z=2*exp(-x.^2);
>>plot(x,y,’-’,x,z,’--’) % dibujamos dos funciones
>>title(’Campanas de Gauss’)
>>xlabel(’Eje de Abscisas’) % Etiqueta el eje horizontal
>>ylabel(’Eje de Ordenadas’) % Etiqueta el eje vertical
>>legend(’exp(-x^2)’, ’2*exp(-x^2)’) % Pone una leyenda
Campanas de Gauss
2
exp(−x2)
2
2*exp(−x )
1.8
1.6
Eje de Ordenadas
1.4
1.2
1
0.8
0.6
0.4
0.2
0
−3
−2
−1
0
Eje de Abscisas
1
2
3
Figura 5. Etiquetado de gr´ficas.
a
Adem´s de los comandos descritos antes para etiquetar gr´ficas, exisa
a
te la posibilidad de poner un texto en alg´n otro lugar de la figura. Con
u
el comando >>gtext(’texto’), se abrir´ la figura y podremos indicar
a
con el rat´n el lugar donde ha de ir el texto, que seleccionaremos con un
o
clic.
- Obtenci´n de puntos desde el gr´fico. Una vez que se ha realizao
a
do una gr´fica, podemos necesitar conocer las coordenadas de algunos
a
puntos de la misma. Por ejemplo, el lugar aproximado en el que est´n
a
los m´ximos y m´
a
ınimos, o si queremos a˜adir alguna recta o una poligon
nal al dibujo. Para conseguir esto, se puede utilizar el comando ginput.
Escribiendo
>>[x,y]=ginput(N)
14
15. Donde N es el n´mero de puntos cuyas coordenadas queremos obu
tener. Despu´s de ejecutado el comando habr´ que pulsar con el bot´n
e
a
o
izquierdo del rat´n sobre el dibujo tantas veces como puntos hayamos
o
especificado. Las coordenadas de esos puntos quedar´n almacenadas en
a
las variables [x, y].
Para dibujar gr´ficas de funciones definidas a trozos, necesitamos
a
utilizar lo que vamos a denominar ´
ındices o variables l´gicas. Veamos
o
un ejemplo. Creamos un vector con los n´meros del 1 al 7
u
>>x=1:7
x =
1
2
3
4
5
6
7
0
1
1
1
Y ahora escribimos
>>x>4
ans =
0
0
0
Observamos que donde no se cumple la condici´n, aparece 0 y donde
o
se cumple, aparece 1. Para crear estas variables l´gicas se pueden utilizar
o
los siguientes operadores relacionales:
<
>
<=
>=
==
∼=
menor que
mayor que
menor o igual
mayor o igual
igual
distinto
Estos operadores se pueden combinar utilizando los operadores l´gio
cos:
&
|
∼
y
o
no
As´ por ejemplo, sobre el mismo x de antes, si escribimos
ı,
>>(2<x)&(x<=6)
ans =
0
0
1
1
1
15
1
0
16. obtenemos unos en los valores que verifican 2 < x ≤ 6.
Ahora supongamos que queremos
x2
f (x) = 1
−x + 2
representar la funci´n
o
si x < 0
si 0 ≤ x < 1
si 1 ≤ x
Generamos una tabla de valores en el dominio en el que queramos
dibujar la funci´n
o
>>x=linspace(-2,3,3000);
Y ahora definimos la funci´n, multiplicando cada trozo por el ´
o
ındice
l´gico que describa el lugar en el que queremos dibujarlo,
o
>>y=(x.^2).*(x<0)+1.*((0<=x)&(x<1))+(-x+2).*(1<=x);
Y ahora la dibujamos. Resulta conveniente hacerlo con puntos, asteriscos o cruces porque, de otra forma, no aparecer´n las discontinuidades
a
>>plot(x,y,’.’),grid on,title(’Funci´n definida a trozos’)
o
Y obtenemos la gr´fica de la figura 6.
a
Función definida a trozos
4
3.5
3
2.5
2
1.5
1
0.5
0
−0.5
−1
−2
−1.5
−1
−0.5
0
0.5
1
1.5
2
2.5
3
Figura 6. Una funci´n definida a trozos.
o
Ejercicio 2.1. Dibujar las gr´ficas de las siguientes funciones eligiena
do, en cada caso, una tabla de valores adecuada para que aparezcan los
aspectos m´s representativos de la funci´n:
a
o
16
17. a) f (x) = x(x2 + 4)2
√
b) f (x) = x − x
log x
x
x(x − 2)
d) f (x) =
(x + 1)(x − 2)
c) f (x) =
e) f (x) = sen
f ) f (x) =
1
x
x
e|x−1|
x2 si x < 0
−1 si x ≥ 0
−x si x < −1
h) f (x) = 1
si 0 < x < 2
2
−x si x > 2
√
1 − x si x < −1
i) f (x) = 1 − x2 si −1 < x < 1
√
x − 1 si x > 1
g) f (x) =
2.2. Curvas en param´tricas
e
Veamos ahora c´mo se pueden representar curvas en el plano dadas
o
en forma param´trica, es decir, de la forma
e
r(t) = (x(t), y(t))
t ∈ [a, b]
Empecemos con un ejemplo: queremos dibujar la gr´fica de la curva
a
r(t) =
t(t2 − 1) 2(t2 − 1)
, 2
t2 + 1
t +1
;
−5 ≤ t ≤ 5
En primer lugar generamos los valores de t en el intervalo indicado,
>>t=linspace(-5,5,1000);
Y ahora lo podemos dibujar de dos formas distintas:
>>plot((t.*(t.^2-1))./(t.^2+1),(2*(t.^2-1))./(t.^2+1))
17
18. 2
1.5
1
0.5
0
−0.5
−1
−1.5
−2
−5
−4
−3
−2
−1
0
1
2
3
4
5
Figura 7. Curva en param´tricas.
e
obtendremos la gr´fica de la figura 7.
a
Y otra forma de hacerlo es utilizar el comando
>>comet((t.*(t.^2-1))./(t.^2+1),(2*(t.^2-1))./(t.^2+1))
Los dos comandos producen el mismo resultado, sin embargo, la forma de ejecuci´n es diferente, la segunda es m´s divertida, aparece un
o
a
circulito (el cometa) que va dibujando la curva. La velocidad de ejecuci´n
o
depende del n´mero de puntos que hayamos generado con el comando
u
linspace.
Dibujada una curva en param´tricas existe la posibilidad de dibujar
e
sobre la misma los vectores velocidad, utilizando el comando quiver.
Por ejemplo, para dibujar los vectores velocidad sobre la curva
r(t) = (cos(t), sen(t)) ,
t ∈ [0, 2π]
>>t=linspace(0,2*pi,20);
>>quiver(cos(t),sin(t),-sin(t),cos(t)),axis square
Produce la gr´fica de la figura 8.
a
La sintaxis del comando es >>quiver(r(t),r’(t)). El n´mero de
u
vectores que aparecen en este caso es 20. Si el n´mero de puntos que se
u
indica con el comando linspace es demasiado grande, puede que no se
aprecie con claridad la gr´fica, ya que ´ste ser´ el n´mero de vectores
a
e
a
u
que se dibujen.
18
19. 1.5
1
0.5
0
−0.5
−1
−1.5
−1.5
−1
−0.5
0
0.5
1
1.5
Figura 8. Vectores velocidad sobre una circunferencia.
Ejercicio 2.2. Dibujar las curvas en param´tricas siguientes; en los
e
apartados a) y b), dibujar adem´s los vectores velocidad, utilizando el
a
comando quiver:
a)r(t) = (2 cos3 t, 2 sen3 t); −π ≤ t ≤ π
b)r(t) = (3 sen t, 2 sen(2t));
−π ≤ t ≤ π
c)r(t) =
t
π
t
t
t
12( )2 − 9 , (( )2 − 1)16( )2 + 2
π
π
π
d)r(t) =
3
cos t(cos t + 1), 2 sen(2t) ;
2
−π ≤ t ≤ π
e)r(t) = (sen(2t) + sen t, − cos(2t) − cos t);
t
4
t
4
f )r(t) = e sen(2t), e cos(2t) ;
g)r(t) =
2
7t 2
7
t cos( ), t sen( ) ;
3
2 3
t
h)r(t) =
t−
; −3 ≤ t ≤ 3
−π ≤ t ≤ π
−π ≤ t ≤ π
−π ≤ t ≤ π
11
22
sen(3t), − cos(3t) ;
10
10
−3π ≤ t ≤ 3π
2.3. Curvas en polares
Una curva en coordenadas polares es la imagen de la funci´n
o
r = h(θ),
θ ∈ [θ1 , θ2 ]
19
20. Un punto de la curva en polares (r0 , θ0 ) tiene distancia al origen r0 y
el ´ngulo que forma el vector de posici´n del punto con el eje horizontal,
a
o
medido en sentido positivo, es θ0 .
Por lo tanto, la relaci´n entre las coordenadas polares y las coordeo
nadas param´tricas es
e
x = r cos(θ)
y = r sen(θ)
Para dibujar una curva en polares con MatLab se utiliza el comando
polar. Por ejemplo, para dibujar la gr´fica de
a
r = 2 − 4 cos(θ),
−π ≤ θ ≤ π
Generamos los valores del ´ngulo tetha
a
>>tetha=linspace(-pi,pi,100);
Calculamos los valores de r
>>r=2-4*cos(tetha);
90
6
120
60
4
30
150
2
180
0
210
330
300
240
270
Figura 9. Curva en polares.
Y dibujamos la gr´fica
a
20
21. >>polar(tetha,r)
Ejercicio 2.3. Dibujar las gr´ficas de las siguientes funciones, dadas
a
en coordenadas polares:
a) r = 7 − 7 sen(θ);
−π ≤ θ ≤ π
b) r = 3 − 6 sen(θ);
−π ≤ θ ≤ π
c) r = sen(6θ);
−π ≤ θ ≤ π
d) r = cos(8θ);
−π ≤ θ ≤ π
e) r =
5 cos(2θ);
−π ≤ θ ≤ π
2.4. Cambios de coordenadas polares-cartesianas
Hay dos comandos que permiten hacer cambios de coordenadas. Si
queremos cambiar de coordenadas polares a coordenadas cartesianas hay
que utilizar el comando
>>[x,y]=pol2cart(theta,r);
Esto es, suponiendo que los puntos en coordenadas polares est´n
e
previamente almacenados en las variables theta y r. Los puntos ahora
obtenidos se podr´ dibujar utilizando el comando plot.
ıan
Para hacer el cambio de coordenadas cartesianas a coordenadas polares, habr´ que utilizar
ıa
>>[theta,r]=cart2pol(x,y);
Ejercicio 2.4. En los ejemplos del ejercicio anterior, utilizar el comando pol2cart para cambiar las coordenadas polares obtenidas a coordenadas cartesianas. Usar despu´s el comando plot para obtener las gr´ficas
e
a
en las nuevas coordenadas.
´
3. GRAFICAS 3D
En esta secci´n vamos a ver c´mo se pueden dibujar con MatLab
o
o
gr´ficos de curvas en el espacio en forma param´trica, gr´ficas de funa
e
a
ciones de dos variables z = f (x, y), y algunos ejemplos de superficies
parametrizadas.
21
22. 3.1. Curvas en el espacio
Se generan de una manera similar a las curvas en el plano, con la
diferencia de que aqu´ se utilizan los comandos plot3 o comet3, tambi´n
ı
e
existe un comando quiver3 para dibujar vectores velocidad sobre las
curvas.
Por ejemplo, queremos dibujar la h´lice
e
r(t) = (sen(t), cos(t), t)
0 ≤ t ≤ 8π
y sobre ella los vectores velocidad.
Generamos los valores de t:
>>t=linspace(0,8*pi,2000);
Y ahora podemos utilizar dos comandos:
plot3 lo que nos da el dibujo completo
>>plot3(sin(t),cos(t),t),grid on
con lo que obtendremos la gr´fica de la figura 10.
a
30
25
20
15
10
5
0
1
1
0.5
0.5
0
0
−0.5
−0.5
−1
−1
Figura 10. Gr´fica de una h´lice.
a
e
O tambi´n comet3, que funciona de manera an´loga a como lo hac´
e
a
ıa
el comando comet en las curvas en el plano.
>>comet3(sin(t),cos(t),t)
Para dibujar algunos vectores velocidad sobre la curva hay que utilizar el comando quiver3(vector posici´n,vector velocidad). Al
o
22
23. igual que con el comando quiver, tambi´n conviene volver a generar
e
los valores de t de manera que no sean demasiados para que se pueda
apreciar mejor la gr´fica. Por ejemplo,
a
>>t=linspace(0,8*pi,30);
>>quiver3(sin(t),cos(t),t,cos(t),-sin(t),1)
Ejercicio 3.1. Representar las curvas siguientes y representar en gr´fia
ca aparte algunos vectores velocidad de la curva en los intervalos indicados:
a)r(t) = (2 cos3 (t), 2 sen3 (t), t)
− 4 ≤ t ≤ 3.
1
sen t)
− π ≤ t ≤ π.
4
t
t
t
c)r(t) = ( cos t, sen t, )
− 12 ≤ t ≤ 19.
6
6
36
t
t
t
d)r(t) = (e 4 sen(2t), e 4 cos(2t), )
− 10 ≤ t ≤ 4,8.
4
t
e)r(t) = (sen(2t) + sen(t), − cos(2t) − cos(t), )
− 9 ≤ t ≤ 10.
6
b)r(t) = (cos(t), 2 cos2 (t),
f )r(t) = (cos(3t), 2 cos2 (t), sen(2t))
− π ≤ t ≤ π.
3.2. Funciones de la forma z = f (x, y)
Para dibujar gr´ficos de funciones de dos variables z = f (x, y), al
a
igual que para funciones de una variable, en primer lugar hay que generar
tablas de valores para las variables x e y, en realidad, ahora lo que
tenemos que hacer es generar un mallado sobre un rect´ngulo del plano
a
XY . Para eso se utiliza el comando meshgrid.
Por ejemplo, si queremos dibujar la gr´fica de la funci´n
a
o
z = e−(x
2 +y 2 )
en la regi´n del plano D = {(x, y)/−2 ≤ x ≤ 2, −2 ≤ y ≤ 2}, habr´ que
o
a
efectuar los pasos siguientes:
Generamos el mallado
>>[x,y]=meshgrid(-2:.5:2);
Sustituimos en la funci´n para calcular los valores de z
o
>>z=exp(-x.^2-y.^2);
23
24. Y ahora podemos dibujar el gr´fico con alguno de los siguientes coa
mandos que producen los dibujos mostrados en la figura 11:
>>plot3(x,y,z)
>>mesh(x,y,z)
>>surf(x,y,z)
>>surf(x,y,z),shading flat %efecto de sombreado distinto
Comando plot3
Comando mesh
1
1
0.5
0.5
0
2
2
0
0
2
−2
2
0
0
0
−2
−2
Comando surf
−2
Comando surf con shading flat
1
1
0.5
0.5
0
2
2
0
0
2
2
0
0
−2
0
−2
−2
−2
Figura 11. Gr´ficas 3D.
a
3.3. Manipulaci´n de gr´ficos 3D
o
a
MALLADO. El comando meshgrid se puede utilizar tambi´n para
e
generar mallados de regiones rectangulares. Por ejemplo, si queremos
hacer un mallado para la regi´n [0, 1] × [0, 3], tendremos que escribir
o
>>[x,y]=meshgrid(0:.1:1,0:.1:3);
La secuencia 0:.1:1 describe la variaci´n de la variable x, y 0:.1:3
o
la de la variable y. Si s´lo se utiliza un intervalo, ´ste se aplica a las dos
o
e
variables. Tambi´n se puede utilizar dentro de meshgrid el comando
e
linspace.
SOMBRAS Y COLORES. Para conseguir efectos de sombreados
y colores diferentes se pueden consultar todas las posibilidades de los
24
25. comandos colormap y shading. Algo que resulta tambi´n interesante,
e
es a˜adir una escala de colores al dibujo que nos permite conocer las
n
alturas (coordenada z) de los diferentes puntos de la gr´fica, esto se
a
consigue con el comando colorbar (despu´s de dibujada la gr´fica).
e
a
Para generar la gr´fica de la figura 12 ha sido utilizada la siguiente
a
secuencia de comandos:
>>[x,y]=meshgrid(linspace(-1,1,50));
>>z=cos((x.*y)./(x.^2+y.^2+1));
>>surf(x,y,z),colorbar
0.995
0.99
1
0.99
0.985
0.98
0.98
0.97
0.975
0.96
0.97
0.95
0.965
0.96
0.94
1
1
0.5
0.5
0
0
−0.5
−0.5
−1
−1
0.955
0.95
0.945
Figura 12. Gr´fica 3D con escala de colores.
a
Como se puede observar, los puntos m´s altos corresponden a los
a
colores m´s calientes y los puntos m´s bajos de la gr´fica est´n coloreados
a
a
a
a
con colores fr´
ıos.
EJES. Las longitudes de los ejes coordenados tambi´n se pueden
e
modificar con el comando
>>axes([xmin xmax ymin ymax zmin zmax])
Los comandos grid on y axis square tambi´n funcionan en este
e
tipo de gr´ficos.
a
´
´
ROTACION DE GRAFICAS. Otro comando interesante en las
gr´ficas 3D es rotate3d, que nos permite, utilizando el rat´n sobre la
a
o
figura, rotarla de manera interactiva en tres dimensiones.
25
26. CURVAS DE NIVEL. Dada una funci´n z = f (x, y), las curvas
o
sobre el plano XY , determinadas por f (x, y) = k, donde k es una constante se llaman curvas de nivel. Hay varias formas de obtenerlas usando
MatLab.
Vamos a representar la gr´fica de la funci´n
a
o
z = x2 + y 2 ,
dibujando algunas curvas de nivel.
Creamos el mallado,
>>[x,y]=meshgrid(-2:.1:2);
Sustituimos en la funci´n, para calcular los valores de z,
o
>>z=x.^2+y.^2;
Ahora, podemos dibujar la gr´fica utilizando alguno de los comandos
a
descritos anteriormente.
Las curvas de nivel se pueden hacer utilizando alguno de los comandos siguientes (ver figuras 13, 14 y 15):
>>contour(x,y,z,10) % dibuja 10 curvas de nivel
>>contour3(x,y,z,10) % lo mismo, pero en el espacio
>>pcolor(x,y,z),colorbar
Esta ultima orden dibuja un mapa de colores por niveles, la orden
´
colorbar hace aparecer una escala de valores seg´n el color, es decir,
u
nos indica el valor de la variable z, como se describi´ antes.
o
Si se usa el comando contour, despu´s se pueden etiquetar las curvas
e
con los valores correspondientes de la z. Para hacer esto:
Primero dibujamos las curvas de nivel con
>>contour(x,y,z,10)
Despu´s guardamos la informaci´n en una variable, por ejemplo,
e
o
>>cs=contour(x,y,z,30);
A continuaci´n, tenemos dos opciones:
o
26
27. 2
1.5
1
0.5
0
−0.5
−1
−1.5
−2
−2
−1.5
−1
−0.5
0
0.5
1
1.5
2
Figura 13. Curvas de nivel sobre el plano XY .
8
7
6
5
4
3
2
1
0
2
2
1
1
0
0
−1
−1
−2
−2
Figura 14. Curvas de nivel en el espacio.
>>clabel(cs) % etiqueta algunas aleatoriamente
O bien
>>clabel(cs,’manual’) % nos permite elegirlas con el rat´n
o
Por otra parte, el comando >>meshc(x,y,z), dibuja la gr´fica, y por
a
debajo, las curvas de nivel (algunas veces ser´ necesario modificar los
a
ejes para que la gr´fica de la funci´n no tape a las curvas de nivel).
a
o
Ejercicio 3.2. Representar las gr´ficas de las siguientes funciones de
a
2 variables, utilizando alguno de los comandos descritos anteriormente.
Dibujar tambi´n algunas curvas de nivel:
e
1
a)z =
9 + x2 + y 2
27
28. 2
8
1.5
7
1
6
0.5
5
0
4
−0.5
3
−1
2
−1.5
1
−2
−2
−1.5
−1
−0.5
0
0.5
1
1.5
2
0
Figura 15. Gr´fica 3D con escala de colores.
a
b)z = −
|xy|
2
2
cos( x +y )
4
c)z =
3 + x2 + y 2
d)z =
y2
− 3|x|
5
e)z = e−(x
2 +y 2 )
3.4. Algunas superficies en el espacio
Hay varios comandos en MatLab que permiten generar las gr´ficas
a
3 (superficies que no son funciones.) Estos comandos
de superficies en R
son funciones que ya vienen programadas.
ESFERA. Se genera utilizando el comando >>sphere(n), donde n
es el n´mero de puntos en los que queda dividido el ecuador de la esfera.
u
Cuanto mayor sea n, mayor ser´ la aproximaci´n a la curvatura real de
a
o
la esfera (de radio 1, centrada en el origen.) Poniendo s´lo >>sphere, el
o
valor que tomar´ n ser´ 20, por defecto
a
a
>>sphere,axis square,title(’ESFERA’)
Obtenemos la gr´fica de la figura 16.
a
Ejercicio 3.3. Utilizando el comando sphere, dibujar varias esferas
con diferentes valores de n. Probar, en particular, los valores 2, 3, 4,
etc.
28
29. ESFERA
1
0.5
0
−0.5
−1
1
1
0.5
0.5
0
0
−0.5
−0.5
−1
−1
Figura 16. Esfera de radio 1 centrada en el origen.
Ejercicio 3.4. Vectores Normales a una superficie
Dibujar los vectores normales a la superficie de una esfera siguiendo
los siguientes pasos:
Dibujar una esfera utilizando lo descrito anteriormente, pero guardando la informaci´n en tres variables
o
>>[x,y,z]=sphere(n);
Utilizar el comando >>surfnorm(x,y,z)
Este comando tambi´n se puede utilizar para dibujar los vectores nore
males en superficies de funciones de la forma z = f (x, y). Para dibujar
las normales en el sentido opuesto habr´ que poner surfnorm(x’,y’,z’).
a
CILINDRO. El comando >>cylinder(R,n) genera autom´ticaa
mente un cilindro de revoluci´n de radio R, donde n es el n´mero de
o
u
puntos de la circunferencia de la base del cilindro. Como en el caso de la
esfera, si usamos s´lo >>cylinder(R), el n´mero n es, por defecto, 20.
o
u
Lo realmente interesante de este comando es que tambi´n admite
e
radios variables R(t), con t ∈ [a, b]. De esta forma, puede ser utilizado
para obtener las gr´ficas de diferentes tipos de superficies de revoluci´n,
a
o
donde la generatriz es una funci´n definida por R(t). Por ejemplo, si
o
queremos dibujar un paraboloide de revoluci´n, podemos utilizar como
o
√
generatriz la funci´n r(t) = t, con t ∈ [0, 2]
o
29
30. >>t=linspace(0,2,20);r=sqrt(t);cylinder(r)
Y obtendremos la gr´fica de la figura 17. (No conviene poner demaa
siados puntos en linspace para que se pueda apreciar bien el dibujo.)
1
0.8
0.6
0.4
0.2
0
1.5
1
0.5
0
−0.5
−1
−1.5
−1.5
−1
−0.5
0
0.5
1
1.5
Figura 17. Paraboloide de revoluci´n generado con cylinder.
o
Ejercicio 3.5. Dibujar las superficies generadas por >>cylinder(R(t),30),
en cada uno de los siguientes casos:
a) R(t) = t, t ∈ [−1, 1]
b) R(t) = t2 , t ∈ [−1, 1]
c) R(t) = 2 + sen(t), t ∈ [−2π, 2π]
d) R(t) = et , t ∈ [−3, 3]
´
´
MAS SUPERFICIES DE REVOLUCION. El comando
>>makevase hace aparecer una ventana interactiva que permite dibujar gr´ficas de superficies de revoluci´n en las que la generatriz es una
a
o
poligonal cuyos v´rtices se se˜alan con el rat´n sobre el propio dibujo.
e
n
o
3.5. Gr´ficos de funciones complejas
a
El comando cplxmap permite representar gr´ficas de funciones coma
plejas de variable compleja en el siguiente sentido:
Sea la funci´n compleja de variable compleja
o
f : C −→ C
z −→ w = f (z)
El comando >>cplxmap(z,f(z)) dibuja una gr´fica tridimensional
a
en la que el eje X es la parte real de la variable, es decir, Real(z); el eje
30
31. Y es la parte imaginaria de la variable, es decir, Im(z) y el eje Z es la
parte real de la imagen de la funci´n, es decir, Re(f (z)).
o
La variable z va a pertenecer siempre al dominio constituido por
el disco unidad centrado en el origen y las coordenadas de los puntos
deben estar en forma polar. Esto se consigue utilizando previamente el
comando >>cplxgrid(n), donde n es el n´mero entero positivo.
u
Por ejemplo, con los comandos
>>z=cplxgrid(12);
>>cplxmap(z,z.^2)
obtenemos la gr´fica de la funci´n f (z) = z 2 (figura 18)
a
o
1
0.5
0
−0.5
−1
1
1
0.5
0.5
0
0
−0.5
−0.5
−1
−1
Figura 18. Gr´fica de f (z) = z 2 .
a
Obs´rvese que para cada valor de z, su imagen f (z), es unica. Ese
´
to no es as´ para cualquier funci´n compleja. Por ejemplo, la funci´n
ı
o
o
f (z) = z 1/2 es una funci´n bivaluada, la funci´n g(z) = z 1/3 es una funo
o
ci´n trivaluada, cada z puede producir tres valores distintos para g(z), y
o
as´ sucesivamente. Para obtener las gr´ficas de estas funciones especiaı
a
les, que se denominan Superficies de Riemann, MatLab dispone de un
comando que las dibuja autom´ticamente, es el comando cplxroot(n),
a
donde n es el ´
ındice de la ra´
ız.
El comando >>cplxroot(2) generar´ la superficie de la figura 19.
ıa
Para obtener m´s informaci´n, se pueden ejecutar los comandos
a
o
cplxdemo y grafcplx, que contienen sendas demostraciones de gr´fia
cas de funciones complejas.
31
32. 1
0.5
0
−0.5
−1
1
1
0.5
0.5
0
0
−0.5
−0.5
−1
−1
Figura 19. Gr´fica de f (z) = z 1/2 .
a
´
4. GRAFICOS ESTAD´
ISTICOS
A pesar de que no se puede decir que MatLab sea el programa ideal
para hacer c´lculos relacionados con la Estad´
a
ıstica2 , dispone de algunos
comandos que nos permiten calcular algunos de los par´metros estad´
a
ısticos b´sicos, as´ como comandos para generar bastantes gr´ficos.
a
ı
a
Dependiendo del tipo de datos estad´
ısticos de los que dispongamos,
resulta conveniente utilizar uno u otro tipo de gr´fico. Vamos a ir viendo
a
los que se pueden hacer con MatLab, que son: diagramas de Sectores,
diagramas de Pareto, diagramas de barras e histogramas.
4.1. Diagramas de sectores
Resultan utiles para representar datos de tipo cualitativo, en los que
´
tenemos varias opciones, el diagrama de sectores permite compararlas
en un c´
ırculo con sectores cuyo ´ngulo es directamente proporcional al
a
porcentaje de cada opci´n.
o
Ejemplo 4.1 Los resultados de las elecciones generales del 12 de marzo
de 2000 al Congreso de los Diputados fueron los siguientes:
2
No al menos como programas especializados en c´lculos estad´
a
ısticos, como
puede ser el programa STATGRAPHICS.
32
33. Formaci´n Pol´
o
ıtica
Partido Popular
Partido Socialista Obrero Espa˜ol
n
Converg`ncia i Uni´
e
o
Izquierda Unida
Partido Nacionalista Vasco
Otros
Total
N´ mero de Esca˜ os
u
n
183
124
15
8
7
12
350
Para dibujar un diagrama de sectores de los resultados de las elecciones, procedemos como sigue. Introducimos los datos en un vector
>>x=[183 125 15 8 7 12]
x =
183
125
15
8
7
12
Y ahora, dibujamos el diagrama. Se puede poner una leyenda que nos
indique qu´ sector corresponde a cada partido pol´
e
ıtico. Como se puede
observar en el gr´fico (figura 20), MatLab calcula autom´ticamente los
a
a
porcentajes correspondientes y los pone junto a su sector
>>pie(x),legend(’PP’, ’PSOE’,’CiU’,’IU’,’PNV’,’Otros’)
(Nota: si la leyenda no sale en el lugar deseado, se puede mover utilizando el bot´n izquierdo del rat´n y coloc´ndola en el lugar adecuao
o
a
do.)
3%
PP
PSOE
2%
2%
4%
CiU
IU
PNV
Otros
52%
36%
Figura 20. Diagrama de sectores.
Con el comando pie3 se obtiene tambi´n un diagrama de sectores,
e
pero en versi´n tridimensional (ver figura 21).
o
33
34. Tanto para el comando pie, como para el comando pie3 existe la
posibilidad de separar uno o m´s sectores para destacarlos con respecto
a
de los dem´s. Por ejemplo, si queremos separar los sectores correspona
dientes a los dos primeros datos
>>pie3(x,[1 1 0 0 0 0])
El vector que se pone a continuaci´n de x debe tener la misma lono
gitud que el x, los unos y los ceros indican, respectivamente, los sectores
que queremos separar y los que no.
PP
PSOE
CiU
IU
PNV
3%
Otros
2% 2%
4%
36%
52%
Figura 21. Diagrama de sectores 3D.
4.2. Diagramas de Pareto
Vamos a utilizar el ejemplo 4.1, pero ligeramente modificado:
Formaci´n Pol´
o
ıtica
Partido Popular
Partido Socialista Obrero Espa˜ol
n
Otros
Total
N´ mero de Esca˜ os
u
n
183
124
42
350
El diagrama de Pareto que produce MatLab constar´ de barras cuyas
a
alturas son el n´mero de esca˜os, ordenadas en forma decreciente y sobre
u
n
las barras, un pol´
ıgono con las frecuencias acumuladas de los esca˜os.
n
Adem´s, en el eje vertical derecho aparece una escala de porcentajes.
a
Para generarlo, escribimos
>>x=[183 125 42]
x =
183
125
42
34
35. >>pareto(x),ylabel(’N´mero de Esca~os’)
u
n
Y obtenemos el gr´fico de la figura 22.
a
100%
300
86%
250
71%
200
57%
150
43%
100
29%
50
Número de Escaños
350
14%
0
1
2
3
0%
Figura 22. Diagrama de Pareto.
Este comando tiene un peque˜o problema y es que si la frecuencia
n
de uno de los datos es peque˜a en comparaci´n con las otras, puede no
n
o
aparecer en el dibujo. Por ejemplo, si hubi´semos utilizado los datos tal y
e
como aparec´ en el ejemplo 4.1, algunas de las barras correspondientes
ıan
a los partidos pol´
ıticos que hab´ obtenido un n´mero bajo de esca˜os
ıan
u
n
no habr´ aparecido.
ıan
4.3. Diagramas de barras
Existen varias posibilidades para representar diagramas de barras.
Supongamos que queremos representar los siguientes datos en un diagrama de barras:
Introducimos los datos en un vector
>>x=[10 2 3 5 18 20 15 ];
Y ahora usamos los comandos bar, barh, bar3 y bar3h para generar los gr´ficos. (Usando el comando subplot podemos conseguir que
a
aparezcan todos en la misma figura.)
>>subplot(2,2,1),bar(x),title(’Barras Verticales’)
>>subplot(2,2,2),barh(x),title(’Barras Horizontales’)
>>subplot(2,2,3),bar3(x),title(’Barras Verticales 3D’)
>>subplot(2,2,4),bar3h(x),title(’Barras Horizontales 3D’)
35
36. Barras Verticales
20
Barras Horizontales
7
15
6
5
10
4
3
5
2
1
0
1
2
3
4
5
6
7
0
Barras Verticales 3D
5
10
15
20
Barras Horizontales 3D
20
7
6
5
4
3
2
1
15
10
5
0
1
2
3
4
5
0
6
10
7
20
Figura 23. Diagramas de barras.
Obtenemos los gr´ficos de la figura 23.
a
Hay que observar que las gr´ficas 3D se pueden modificar utilizando
a
el comando rotate3d descrito en las secciones anteriores.
Los datos pueden estar agrupados, en este caso, las ´rdenes anteriores
o
los dibujan tambi´n agrupados de manera que resulte f´cil compararlos.
e
a
Veamos el siguiente ejemplo:
>>x=[1 2 3;4 3 6; 10 9 8; 4 2 7;12 10 7];
Ahora, utilizando los mismos comandos que antes, obtenemos los
gr´ficos de la figura 24.
a
Y por ultimo, tambi´n se pueden agrupar en 3D, de forma diferen´
e
te a la anterior, con la orden bar3(x,’group’) y se puede hacer que
aparezcan las barras apiladas con bar3(x,’stack’) (ver figura 25).
4.4. Histogramas
Para generar histogramas se utiliza el comando hist. Por ejemplo,
generamos 1000 n´meros aleatorios siguiendo la normal N (0, 1)
u
>>x=randn(1000,1);
Con la orden hist(x), obtenemos (figura 26) un histograma en el
que los datos aparecen agrupados en 10 intervalos. Si queremos que
36
37. 12
10
5
8
4
6
3
4
2
2
1
0
1
2
3
4
5
0
5
10
15
15
5
10
4
3
5
2
0
1
1
2
3
4
0
10
5
20
Figura 24. Diagramas de barras con datos agrupados.
aparezcan m´s o menos intervalos, habr´ que indicarlo con >>hist(x,N),
a
a
donde N es el n´mero de intervalos.
u
´
5. GRAFICAS EN MOVIMIENTO: “MOVIES”
Entre las m´ltiples posibilidades del programa MatLab est´ la de
u
a
producir gr´ficas en movimiento. Se trata de peque˜os programas, llaa
n
mados “movies”, que elaboran una “pel´
ıcula”fotograma a fotograma.
Estos fotogramas, una vez visualizados, producen la sensaci´n de movio
miento.
Veamos un ejemplo: queremos dibujar la gr´fica de la curva y =
a
λ sin(x) para varios valores de λ contenidos en el intervalo [−1, 1].
Veamos en primer lugar el programa:
En primer lugar, abrimos el editor de programas de MatLab, con
File New M-File. Se abre un editor en el que escribiremos lo siguiente,
Ejemplo 1
function cuerda
% movie cuerda
x=linspace(0,2*pi,1000); n=50;
% n numero de fotogramas
37
38. 12
30
10
25
8
20
6
15
4
10
2
5
0
0
1
1
2
2
3
3
4
4
5
5
Figura 25. Datos agrupados en 3D y barras apiladas.
for j = 1:n
t=(2*pi/49)*(j-1);
y=sin(t)*sin(x);
plot(x,y,’*’),axis([0 2*pi -1.2 1.2])
F(j) = getframe;
end
movie(F,2) % veces que queremos ver la peli
A continuaci´n lo guardamos (en el directorio que aparece por deo
fecto, Work) con el nombre cuerda. Si se pone otro nombre, habr´ que
a
cambiar la primera l´
ınea del programa. Para ejecutarlo, basta con escribir el nombre del programa, cuerda, en la l´
ınea de comandos.
El n´cleo del programa lo constituyen el conjunto de comandos:
u
for j = 1:n
t=(2*pi/49)*(j-1);
y=sin(t)*sin(x);
plot(x,y,’*’),axis([0 2*pi -1.2 1.2])
F(j) = getframe;
end
Es lo que en programaci´n se deonomina un bucle, esto es, un cono
junto de instrucciones, en este caso, comandos gr´ficos que se ejecutan
a
varias veces, dependiendo del valor de j. A medida que j var´ de 1 a
ıa
38
39. 250
200
150
100
50
0
−4
−3
−2
−1
0
1
2
3
4
Figura 26. Histograma.
50, t var´ de 0 a 2π y, por tanto, λ = sin(t) var´ entre -1 y 1. Para
ıa,
ıa
cada valor de j se realiza un gr´fico/fotograma que se almacena con
a
la instrucci´n F(j) = getframe;. Por ultimo, el comando movie(F,2)
o
´
permite visualizar la pel´
ıcula el n´mero de veces que se le indique.
u
A continuaci´n se incluyen algunos ejemplos m´s de “movies”:
o
a
Ejemplo 2
function elipse
% movie
n=30; x=linspace(0,2*pi,200);
for j = 1:n
t=(pi/29)*(j-1);
plot(cos(x),sin(t)*sin(x),’rs’),
axis([-1 1 -1 1]);
F(j)=getframe;
end
movie(F,5)
Ejemplo 3
function colores
% movie
39
40. n=30;
for j = 1:n
x=rand(10);
imagesc(x)
F(j) = getframe;
end
movie(F,5)
Ejemplo 4
function membrana
% movie membrana
[x,y]=meshgrid(-1:.1:1); n=20;
for j = 1:n
t=(2*pi/19)*(j-1);
z=2*sin(t)*exp(-x.^2-y.^2);
surf(x,y,z),axis([-1 1 -1 1 -2 2])
F(j) = getframe;
end
movie(F,6)
Ejemplo 5
function picos
% movie
[x,y,z]=peaks; n=20;
for j = 1:n
t=(2*pi/19)*(j-1);
z1=sin(t)*z;
surf(x,y,z1),axis([-3 3 -3 3 -5 5])
F(j) = getframe;
end
movie(F,3)
Ejemplo 6
40
41. function reloj
% movie reloj
n=100;
for j = 1:n;
t=linspace(0,2*pi,1000);
plot(cos(t),sin(t)),axis square hold on horas=0:12;
plot(.9*cos(horas*2*pi/12),... .9*sin(horas*2*pi/12),’k*’)
hor=pi/2-(j-1)*2*pi/(n-1); %horaria
plot([0 .5*cos(hor)],[0 .5*sin(hor)]),
min=pi/2-(j-1)*12*2*pi/(n-1); % minutera
plot([0 .8*cos(min)],[0 .8*sin(min)]) hold off
F(j) = getframe;
end
movie(F)
41
42. REFERENCIAS
CHEN, K., GIBLIN, P. e IRVING, A. Mathematical Explorations with
Matlab. Cambridge University Press. Cambridge, 1999.
DUOANDIKOETXEA, J. “An´lisis de Fourier: historia y aplicaciones
a
recientes”. En Zuazua, E. (Director) Temas relevantes de la Matem´tia
ca actual: el reto de la Ense˜anza Secundaria. Centro de publicaciones
n
del Ministerio de Educaci´n, Cultura y Deporte/UIMP. Madrid, 2000.
o
P´gs. 11-43.
a
HARMAN, Th. L., DABNEY, J. y RICHERT, N. Advanced Engineering
Mathematics using Matlab. Vol. 4. PWS. Boston, 1997.
HIGHAM, D.J. y HIGHAM, N.J. Matlab guide. SIAM. Philadelphia,
2000.
RODR´
IGUEZ DEL R´ R. “Matem´ticas en el Aula de Inform´tica”.
IO,
a
a
En Zuazua, E. (Director) Temas relevantes de la Matem´tica actual: el
a
reto de la Ense˜anza Secundaria. Centro de publicaciones del Ministerio
n
de Educaci´n, Cultura y Deporte/UIMP. Madrid, 2000. P´gs. 145-210.
o
a
ZUAZUA, E. (Director) Temas relevantes de la Matem´tica actual: el
a
reto de la Ense˜anza Secundaria. Centro de publicaciones del Ministerio
n
de Educaci´n, Cultura y Deportes/UIMP. Madrid, 2000.
o
42