Gráficos bidimensionales (II)
fill
El comando
En este ejempo, dibujamos una elipse y un polígono de 10 lados inscrito en la elipse. Calculamos el área del polígono con la función
%elipse a=2; b=5; t=linspace(0, 2*pi, 200); x=a*cos(t); y=b*sin(t); hold on plot(x,y,'b') %polígono t=linspace(0, 2*pi, 11); x=a*cos(t); y=b*sin(t); fill(x,y,'y') plot(x,y,'ro','markersize',4,'markeredgecolor','r','markerfacecolor','r') hold off title('área de un polígono') disp(['Area = ' num2str(polyarea(x, y))])
Area = 29.3893
El área de la elipse es πab=π·2·5=31.4159
Dibujamos dos funciones y=-x2 e y=-x2+8, que se cortan en los puntos ±2 y rellenamos el área comprendida entre las dos funciones. Para encerrar el área (véase la figura más abajo) especificamos la primera función y=-x2 entre -2 y +2 y la segunda y=-x2+8, entre +2 y -2. Para ello, invertimos el sentido de los vectores
hold on fplot('x^2',[-3,3]) fplot('-x^2+8',[-3,3]) x=-2:0.05:2; fill([x,fliplr(x)],[x.^2,fliplr(-x.^2+8)],'c') hold off grid on xlabel('x') ylabel('y') title('área')
stem
Se ha analizado una señal periódica y los coeficientes bn (seno) del desarrollo en serie de Fourier tienen la expresión
Representamos mediante
n=1:11; bn=(-1).^n*2./(n*pi); stem(bn) title('Espectro de frecuencias') xlabel('n') ylabel('b_n') xlim([0 12])
bar
Se han realizado las siguientes observaciones de la velocidad del viento en una estación meteorológica. Medimos el número de horas en las que la velocidad del viento tenía un valor medio comprendido entre 0 y 1 m/s, entre 1 y 2, ... entre 22 y 23.
Velocidad | 0.5 | 1.5 | 2.5 | 3.5 | 4.5 | 5.5 | 6.5 | 7.5 | 8.5 | 9.5 | 10.5 | 11.5 | 12.5 | 13.5 | 14.5 | 15.5 | 16.5 | 17.5 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Horas | 6 | 31 | 30 | 50 | 69 | 75 | 60 | 59 | 69 | 61 | 43 | 44 | 54 | 43 | 21 | 11 | 7 | 4 |
Velocidad | 18.5 | 19.5 | 20.5 | 21.5 | ||||||||||||||
Horas | 2 | 1 | 1 | 3 |
Vamos a representar las frecuencias mediante un diagrama de barras.
x=0.5:21.5; horas=[6,31,30,50,69,75,60,59,69,61,43,44,54,43,21,11,7,4,2,1,1,3]; frec=horas/sum(horas); bar(frec,'c'); title('Distribución Weibull') xlabel('Observación') ylabel('Frecuencia')
Histogramas, hist
El intervalo (a, b) que abarca todos los datos, se divide en subintervalos. El histograma es un diagrama de barras verticales en el que la anchura de cada barra se corresponde con el tamaño del subintervalo y la altura con el número de datos en dicho subintervalo.
Por defecto, MATLAB divide el intervalo (a,b) en 10 subintervalos de la misma anchura.
y=[53,50,93,89,91,80,59,69,56,64,69,63,74,82,84,91, 63,66,48,56,73,73,66,64,74,63,69,58,73,73]; hist(y) xlabel('T') ylabel('n') title('Temperaturas')
>> min(y) ans = 48 >> max(y) ans = 93
El valor mínimo del vector
>> [N,X]=hist(y) N = 2 3 2 7 3 6 0 3 0 4 X = 50.2500 54.7500 59.2500 63.7500 68.2500 72.7500 77.2500 81.7500 86.2500 90.7500
La función
La función
x0=1; % valor medio sigma=0.5; % desviación estándar xp=x0+sigma*randn(1,10000); %vector de N números aleatorios hold on [n,xs]=hist(xp, 25); bar(xs, n); xlabel('Valores') ylabel('Número de datos') f=@(x) max(n)*exp( -(x-x0).^2/(2*sigma^2)); fplot(f,[-0.5,2.5],'r') hold off
Es posible cambiar el valor por defecto. Se le puede suministrar a la función
Se miden las temperaturas a lo largo de un periodo de 30 días en una ciudad. La temperatura mínima es
Las temperaturas se generan de forma aleatoria mediante la función
a=5; %temperatura mínima b=35; %temperatura máxima T=round(a+(b-a)*rand(30,1)); %30 temperaturas al azar x=a+5:10:b; hist(T,x) hg=findobj(gca,'Type','patch'); %color set(hg,'FaceColor','c','EdgeColor','k') xlabel('Temperatura') ylabel('n. de días') title('Temperatura en una ciudad')
semilog, loglog
Son útiles cuando hacemos representaciones gráficas de funciones exponenciales o potenciales. Representamos la función 10·exp(-2·x) utilizando el comando
x=linspace(0,3); y=10*exp(-2*x); semilogy(x,y) grid on
Representamos la siguiente función en un diagrama doblemente logarítmico
con a=24, b=0.32 y c=0.52
a=24; b=0.32; c=0.52; f=@(x) ((a./x).^c+b^c).^(1/c); x=logspace(-2,6,100); loglog(x,f(x)) grid on xlabel('x') ylabel('y') title('loglog')
polar

Las coordenadas polares especifican un punto en términos de la distancia (radio) al origen r y el ángulo θ que forma con el eje X.
La espiral logarítmica es una de las curvas notables junto a la catenaria, la cicloide, etc. La ecuación de la espiral logarítmica en coordenadas polares es
r=r0·exp(b·θ)
Donde r0 es el radio inicial, b es un parámetro, y θ es el ángulo en radianes.
r0=0.4; b=0.05; ang=0:pi/18:9*pi/2; r=r0*exp(b*ang); polar(ang,r,'r') title('Espiral logarítmica')
Utilizando la función
r0=0.4; b=0.05; ang=0:pi/18:9*pi/2; r=r0*exp(b*ang); [x,y]=pol2cart(ang,r); plot(x,y,'r') axis equal title('Espiral logarítmica') grid on
En Internet se pueden encontrar las ecuaciones de curvas polares como las cardiodes
r=b+a·cosθ
r=b+a·sinθ
en los siguientes casos: b<a, a<b<2a, 2a≤b. El primero es el más interesante.
Otra curva es la denominada pétalos de una rosa
r=a·cos(nθ)
donde n es el número entero: 2, 3, 4, 6...
La lemniscata de Bernoulli
r2=2a2cos(2θ)
Manejadores de los gráficos
Siempre que MATLAB crea un gráfico, crea un manejador (handle) para este gráfico. Vamos a ver mediante ejemplos como se pueden cambiar las propiedades del gráfico mediante manejadores.
La función
>> x=0:pi/30:2*pi; >> hg=plot(x,sin(x)); >> set(hg,'color','r','linewidth',3)
El gráfico que inicialmente tenía color azul (por defecto) cambia a color rojo. La anchura de línea cambia a tres.
x = 0:.02:2*pi; y = cos(x); plot(x,y) set(gca,'XTick',0:pi/2:2*pi) set(gca,'XTickLabel',{'0','\pi/2','\pi','3\pi/2','2\pi'}) set(gca,'YTick',-1:0.25:1)
De esta forma, podemos cambiar las divisiones por defecto de los ejes X e Y.
En este ejemplo, las divisiones
x=1:6; y=[13,5,7,14,10,2]; plot(x,y,'o',x,y) set(gca,'XTick',x); set(gca,'XTickLabel',{'Julio','Agosto','Septiembre','Octubre', 'Noviembre','Diciembre'}, 'XTickLabelRotation',15) xlabel('Mes') ylabel('Ventas') title('Ventas mensuales')
Combinando ejes lineales y logarítmicos
Podemos utilizar
a=1000;b=0.005; t=0:900; y1=a*exp(-b*t); y2=sin(b*t); yyaxis left semilogy(t,y1); ylabel('Semilogarítmico') yyaxis right plot(t,y2,'linewidth',1.5) ylabel('Lineal')
Dibujamos la primera función
Edición en la ventana de los gráficos
Escribimos en la ventana de comandos
>> x=0:pi/40:2*pi; >> plot(x,cos(x))
En la ventana de los gráficos (Figure Window) podemos cambiar las propiedades de un gráfico. Seleccionamos Tools->Edit Plot
Se selecciona el gráfico con el cursor, aparecen cuadrados de color negro (handles), se pulsa el botón derecho del ratón estando el gráfico seleccionado, aparece el menú de la figura, que nos permite cambiar varias propiedades del gráfico: color, anchura y estilo de línea, marcador, etc.
Se puede utilizar el menú Insert para establecer las etiquetas de los ejes (
Seleccionando Show Property Editor, o bien, en el menú View->Property Editor o en el menú Edit->(Figure Properties, Axes properties, Current Object Properties, Colormap) aparece una ventana que nos permite cambiar las propiedades del gráfico de forma interactiva. Pulsamos en el botón More properties... aparece una tabla (Inspector) de propiedades del objeto seleccionado que podemos modificar.
La edición interactiva en la ventana de los gráficos, nos permite prepararlos para presentaciones, pero escasamente se utilizará en este Curso Interactivo, por lo que queda al lector la tarea de explorar sus numerosas opciones, consultando el extenso documento MATLAB Graphics
Ejemplos en el curso de Física
plot
La mayor parte de las porciones de código MATLAB, terminan con una representación gráfica, por lo que la lista de páginas en las que se utiliza el comando plot es demasiado numerosa para mencionarlas en este apartado.
fplot
Se dispara un proyectil contra un blanco móvil
Movimiento sobre una superficie semicircular cóncava
Movimiento sobre una superficie cóncava en forma de cicloide
Un modelo de colisiones inelásticas
polar
Interferencia de ondas producidas por varias fuentes
Medidas de la velocidad y dirección del viento
pie
stem
Análisis armónico de las mareas
Análisis de Fourier de los desplazamiento de las olas
bar, barh
Movimiento de caída de los cuerpos
Macroestado, microestados. Temperatura, entropía
Análisis de las alturas y periodos de las olas
Medidas de la velocidad y dirección del viento
Función de distribución de Weibull
quiver
fill
Apuntar un cañón para dar en el blanco
Alcance máximo en un plano inclinado
Respuesta de un oscilador a una fuerza impulsiva (I)
Distribución de la energía entre las moléculas de un gas ideal
Potencial periódico. Modelo de Kronig-Penney
El oscilador armónico cuántico
El espejo esférico y el espejo parabólico (I)
Análisis de las alturas y periodos de las olas
Función de distribución de Weibull
Función de distribución de Rayleigh
subplot
Un bloque desliza a lo largo de un plano inclinado y deforma un muelle
Medida de la velocidad de una bala
Un depósito de arena que se mueve sobre una pista horizontal
Solución numérica de las ecuaciones del movimiento
Movimiento de una caja sobre una cinta transportadora