2. Por las características propias del programa, los gráficos, en
concreto los 2D,
están orientados a la representación gráfica de vectores. Se
utiliza una ventana
especial para la creación de los gráficos: la ventana gráfica o
de dibujo y, dichos
gráficos se guardan en ficheros de extensión .fig.
3. El comando básico para la representación de gráficos 2D es el
comando plot.
Su sintaxis puede ser:
plot(x,y): dibuja el conjunto de puntos (x,y) donde las abscisas
de los puntos se encuentran en el vector x y las ordenadas en el
y.
Para representar una función f(x) es necesario conocer los
valores de puntos de la forma (x,f(x)). Para ello puede seguirse
alguno de estos caminos:
- Definir un vector x con el rango de variación donde se desea
pintar la función. Para ello puede ser muy útil el comando
linspace(xmin,xmax,n).
4. >> x=linspace(0,10,100);
>> y=sin(x);
>> plot(x,y)
También es posible dibujar una función con el comando fplot cuya
sintaxis
es la siguiente: fplot(‘f(x)’,[xmin,xmax])
Si se desea representar varias funciones a la vez las opciones son:
- plot(x,y,x,z) donde x el vector de las abscisas, común para las dos
representaciones, y es el de las ordenadas de la primera representación
y z
las de la segunda.
- fplot(‘[f1(x),f2(x),...]’,[xmin,xmax]) donde f1, f2, … son las funciones a
representar en el intervalo de variación marcado por xmin y xmax.
- Mediante el comando: hold on, hold off. Todos los gráficos que se
ordene dibujar entre los comandos hold on y hold off se representan
en la misma figura. Si hay una figura abierta se dibujan en ésta.
5. Ejemplo:
>> hold on
>> x=[-3*pi:1:3*pi];
>> plot(x,sin(x))
>> plot(x,tan(x),'r')
>> hold off
- El comando subplot. Una ventana gráfica se puede dividir en m particiones
horizontales y n verticales para representar mxn figuras. Cada una de las
particiones tendrá sus ejes aunque las propiedades serán comunes a todas
ellas. La sintaxis es: subplot(m,n,i), donde m y n son el número de
subdivisiones e i la subdivisión activa. Por ejemplo:
>> x=0:0.1:2*pi;
>> y=sin(x);z=cos(x);t=exp(-x);v=x^2;
>> subplot(2,2,1), plot(x,y) 51
>> subplot(2,2,2), plot(x,z)
>> subplot(2,2,3), plot(x,t)
>> subplot(2,2,4), plot(x,v)
6. Otras funciones con matlab
Opciones de dibujo . Hemos visto
que el comando plot(x,y) dibuja los
gráficos con unas características
predefinidas en el programa, es
posible alterarlas a partir de
plot(x,y,s) donde s se compone de
dos dígitos entre comillas.
>> plot(x,y,'-*g')
Los colores vienen dados por: y:
amarillo, g: verde, m: magenta, b:
azul, c:
cían, w: blanco, r: rojo, k: negro.
Se puede modificar el grosor de
línea incluyendo la cadena:
‘Linewidth’,
número_indicativo_del_grosor. Por
ejemplo: plot(x,y,'linewidth',2)
También aquí Matlab tiene sus opciones
por defecto. En muchas ocasiones es
interesante alterarlas.
Para definir otros se utiliza el comando
axis cuya sintaxis es: axis
([xmin,xmax,ymin,ymax]). axis(‘auto’)
devuelve la escala al valor por defecto.
Destacar que: axis off elimina los ejes
del dibujo y axis on los incorpora.
- Entrada de puntos con el ratón
Matlab permite introducir las
coordenadas de los puntos sobre los que
se encuentra el cursor, al pinchar o al
pulsar alguna tecla. El comando que lo
realiza es ginput. Algunas formas de
utilizarlo son: [x,y]=ginput: lee los
puntos cada vez que se pincha o se pulsa
alguna tecla.
Finaliza al pulsar intro. [x,y]=ginput(n):
lee las coordenadas de n puntos
7. La ventana gráfica de Matlab.
La mayoría de las opciones de
cambio en una gráfica
presentadas con anterioridad,
pueden realizarse desde la
pantalla de dibujo
En el menú edit aparecen entre
otros los comandos Figure
Properties, axes Properties y
Current Object Properties, con
ellos se abre paso a los editores
correspondientes donde se nos
da la posibilidad de cambiar las
opciones de dibujo
8. Superposición de gráficos
Usando line
(x, y, 'parametros', 'valor‘)
Parametros, color
linestyle, Marker.
%Ejemplo de hold
x=linspace(0, 2*pi, 100)
y1=sin(x)
plot(x, y1)
y2= x- (x.^3)/6 + (x.^5)/120
line(x, y2, 'marker', 'o')
line(x, x, 'linestyle', '--')
axis ([ 0 5 -1 5])
legend('sin(t)', 'Aproximacion
3er
orden', 'lineal')
9. Objetos gráficos
Podemos añadir objetos al
grafico actual:
xlabel('etiqueta del eje x')
ylabel('etiqueta eje y')
title('titulo del grafico')
text (x, y, 'texto')
Si x e y son vectores, el texto
se repite. Si texto es una
matrix de cadenas, de la
misma dimensión que x e y, se
sitúa cada texto en una
posición
gtext('texto'): la posición se
indica con el ratón.
(solo en Matlab)
10. Comandos para los Gráficos
En primer lugar, comandos genéricos y
comandos orientados a gráficos
bidimensionales: – figure(n): Las
representaciones de gráficos en matlab
se realizan en ventanas graficas. En un
momento dado puede haber varias
ventanas graficas abiertas. La función
figure se utiliza para abrir una nueva
ventana grafica que será numerada de
acuerdo con el parámetro, o bien, si ya
existe una ventana con ese numero, se
convertirá en la ventana grafica
activa, donde se realizará la próxima
representación grafica.
– clf: Limpia la ventana gráfica activa.
– close(n): Para cerrar una ventana
gráfica.
close all cierra todas las ventanas
gráficas.
– title: permite añadir un
título a la grafica
– xlabel: añadir una etiqueta
al eje horizontal de la grafica
– ylabel: añadir etiqueta al eje
vertical
– grid: añadir una rejilla
– axis: permite modificar los
límites de los ejes horizontal
y vertical
– text: añadir un texto en una
posición cualquiera de la
grafica
– gtext: igual que text pero
permite seleccionar la
ubicación del texto mediante
el ratón.
11. La versión 3D de plot es
plot3(u1, v1, w1, c1, u2, v2, w2, c2,…)
Donde uj, vj, y wj son las coordenadas x, y, y z, respectivamente, de un
punto.
Son escalares, vectores de la misma longitud, matrices del mismo
orden, o expresiones que, cuando se evalúan, resultan en una de esas
cantidades. Para dibujar un conjunto de n líneas sin conectar cuyos
puntos finales son
(x1j,y1j,z1j) y (x2j,y2j,z2j), j = 1, 2, …, n
• Así, plot3 es
y = y y … y j = ,
x1 = […]; x2 = […];
y1 = […]; y2 = […];
z1 = […]; z2 = […];
plot3([x1; x2], [y1; y2], [z1; z2])
donde [x1; x2], [y1; y2], y [z1; z2] son matrices de
(2×n)
12. Todos los procedimientos de anotación descritas para los
gráficos 2D son aplicables a las funciones de generación de
curvas y superficies 3D, excepto que los argumentos de text se
usa
text(x, y, z, s)
donde s es un string y
zlabel
se usa para etiquetar el eje z
14. Ejemplo: Onda senoidal sobre una
superficie de un cilindro
Las coordenadas de una onda
senoidal sobre la superficie de un
cilindro se obtiene con
x = b cos(t) si a=10.0
y = b sin(t) b=1.0
z = ccos(at) c=0.3
0<=t<=2pi, el scrip es
t = linspace(0, 2*pi, 200);
a = 10; b = 1.0; c = 0.3;
x = b*cos(t);
y = b*sin(t);
z = c*cos(a*t);
plot3(x, y, z, 'k')
axis equal
15. Matlab contiene un conjunto de funciones gráficas 3D para crear
superficies, contornos, y variaciones, así como especializaciones de
esas formas básicas • Una superficie se define por la expresión
z = f (x, y)
donde x e y son las coordenadas en el plano-xy y z
es la altura resultante.
Las funciones básicas de graficación de superficies son
surf(x, y, z) y mesh(x, y, z) donde x, y, z son las coordenadas de los
puntos en la superficie.
surf – dibuja una superficie compuesta de parches de colores que
dependen de la magnitud z
mesh – dibuja parches de superficies blancas que se
definen por su contorno.
16. Ejemplos de superficies
Se requiere dibujar una
superficie definida por definida
en el rango −3 < x < 3 y −3 < y <
13 Se genera la función
SurfExample para calcular las
z(x, y) = x4 + 3x2 + y2 - 2x - 2 y -
2x2 y + 6
coordenadas x, y ,z
function [x, y, z] = SurfExample
x1 = linspace(-3, 3, 15); % (1×15)
y1 = linspace(-3, 13, 17); % (1×17)
[x, y] = meshgrid(x1, y1); %
(17×15)
z = x.^4+3*x.^2−2*x+6-
2*y.*x.^2+y.^2-2*y; % (17×15)
17. Gráficos de contornos
Las superficies también se
pueden transformar en
gráficos de contornos, que
son gráficos de curvas
formadas por la intersección
de la superficie y un plano
paralelo al plano xy en
valores específicos de z
Las funciones surfc(x, y, z) y
meshc(x, y, z) crean
superficies con contornos
proyectados debajo de la
superficie. x, y, z son los
valores de las coordenadas de
puntos que definen la
superficie
Se pueden crear contornos
sin visualizar la
superficie, con etiquetas o
sin etiquetas
La función
contour(x, y, z, v) crea un
gráfico de contorno donde
x, y, z son las coordenadas
de los puntos que definen
la superficie v, si es un
escalar, es el número de
niveles de contornos a
visualizar y, si es un vector
de valores, los contornos
de la superficie en los
valores de z. El uso de v es
opcional.
18. Si se quiere etiquetar el contorno se usan las funciones
[C, h] = contour(x, y, z, v)
clabel(C, h, v)
19. Gráficos de contornos 3D
Para obtener los contornos
de superficies en 3D, se usa
contour3(x, y, z, v) donde
x, y, z son las coordenadas
de los puntos de la
superficie v, si es un
escalar, es el número de
niveles de contornos a
visualizar y, si es un vector
de valores, los contornos
de la superficie en los
valores de z. El uso de v es
opcional
Para etiquetar los
contornos se usa [C, h] =
contour3(x, y, z, v)
clabel(C, h, v)
20. Para una esfera de radio a y un elipsoide con su eje
mayor en la dirección x igual a 2a, eje menor en la
dirección y igual a 2b, y un eje menor en la dirección
z igual a 2c, la proporción del volumen de un elipsoide
con relación al volumen de una esfera es
Se crea el siguiente programa para mejorar la
comprensión de un gráfico de V como función de b/a
para varios valores de c/a
21. mejora de gráficos 2D con
objetos 3D (código) b = [0.5, 1]; c = b;
for k = 1:2
plot(b, b*c(k), 'k-')
text(0.75, (b(1)*c(k)+b(2)*c(k))/2-0.02, ['c/a =
'num2str(c(k))])
hold on
end
xlabel('b/a') ylabel('V')
for k = 1:4
K
switch case 1
axes('position', [0.12, 0.2, 0.2, 0.2])
[xs, ys, zs] = ellipsoid(0, 0, 0, 1, b(1), c(1), 20);
mesh(xs, ys, zs)
text(0, 0, 1, ['b/a = ' num2str(b(1)) ' c/a = '
num2str(c(1))])
case 2
axes ('position', [0.1, 0.5, 0.2, 0.2])
[xs, ys, zs] = ellipsoid(0, 0, 0, 1, b(1), c(2), 20);
mesh (xs, ys, zs)
text (0, 0, 1.5, ['b/a = ' num2str(b(1)) ' c/a = '
num2str(c(2))])
case 3
axes ('position', [0.7, 0.65, 0.2, 0.2])
[xs, ys, zs] =
ellipsoid(0, 0, 0, 1, b(2), c(2), 20);
mesh (xs, ys, zs)
text (-1.5, 0, 2, ['b/a = ' num2str(b(2)) '
c/a = ' num2str(c(2))])
case 4
axes ('position', [0.7, 0.38, 0.2, 0.2])
[xs, ys, zs] =
ellipsoid(0, 0, 0, 1, b(2), c(1), 20);
mesh (xs, ys, zs)
text (-1.5, 0, 1.5, ['b/a = ' num2str(b(2)) '
c/a = ' num2str(c(1))])
end
colormap([0 0 0])
axis equal off
end