desarrollo de ejercicios básicos en matlab
TRANSCRIPT
Desarrollo de ejercicios en MATLAB
Algoritmos computacionales y programación
Adalberto Cortés Ruiz
Instructor: Dr. Eliseo Hernández Martínez
INTRODUCCIÓN
En el salón de clases se indagó acerca del uso de MATLAB1, un software especializado para
la resolución de problemas matemáticos de toda clase. Se inició con las aplicaciones de
vectores y la forma en la que estos deben escribirse para poder realizar operaciones
aritméticas básicas y de igual manera con la creación y operación de matrices.
El modo de operar de MATLAB permite guardar los trabajos realizados a través de un
archivo (.m) por medio de un script, (archivo de órdenes o archivo de procesamiento por
lotes), los cuales se pueden ejecutar introduciendo en el área o ventana de comandos
(command window).
Las gráficas son de gran utilidad para la comprensión de funciones que describen algún
fenómeno o situación en especial si la función expresa tres variables distintas, por lo cual
es importante saber crear y manejar graficas de dos y tres dimensiones. Si MATLAB tiene
algo de especial es que puede realizar gráficas en tercera dimensión con la misma facilidad
para realizar una de dos dimensiones. Además ofrece distintas funciones especiales que
muestran distinta apariencia de los datos.
A continuación se muestran dos problemas de aplicación relacionados con la creación de
matrices y vectores, operaciones aritméticas y gráficas que ponen en práctica los
conocimientos adquiridos.
Primer ejercicio
Generar una matriz de números aleatorios (12,20) en la que 12 son los
meses en los que se registró la temperatura durante 20 años.
- Graficar temperatura vs. tiempo (años).
Segundo ejercicio
Generar una función que contengo funciones trigonométricas y
exponenciales. Sea del tipo z=f(x,y).
-curvas de nivel para 5 valores de x,y.
-Realizar gráficas.
1El acrónimo de MATLAB proviene de las palabras en inglés: Matrix Laboratoy.
MATLAB fue desarrollado por MathWorks
METODOLOGÍA
Inicio de un script2
Una vez abierto el programa, en la barra de herramientas se pueden visualizar las
pestañas de Home, Plots y Apps.
Seleccionamos Home y allí se pueden visualizar distintos botones y se selecciona en botón
New Script como se muestra en la figura 1.
Figura 1. Inicio de un script.
En un script de MATLAB se debe agregar siempre al inicio los siguientes comandos con la
finalidad de evitar posibles errores con las variables, ya que MATLAB podría cambiar el
valor de las variables creadas en el script.
clear all (borra todas las variables creadas)
close all (cierra las ventanas que se encuentran)
home (corre toda el área de comandos)
Con el signo de porcentaje % se puede agregar comentarios y si se le añade una llave %{
gel comentario se extiende a varios renglones hasta ser cerrado con el mismo signo pero
con la llave opuesta %}como se muestra en la figura 2.
Figura 2. Comentario extendido.
2 Todos los procesos fueron desarrollados en la versión 8.3 R2014a de MATLAB.
Primer ejercicio
1. Determinación de la matriz
Se genera una matriz de datos aleatorios en la que cada dato representa el registro de la
temperatura de un mes y se reconocen 20 años.
El comando rand genera una matriz de datos aleatorios entre cero y uno. En el problema,
la temperatura se estableció en grados Celsius (°C) con una mínima de 0°C y una máxima
de 40°C. Para la cual, se obtiene multiplicando el comando por cuarenta.
r=rand(12,20)*40
Se coloca una apostrofe para indicar la matriz transpuesta.
w=r'
2. Transformación de la matriz a vector Después se genera un vector a partir de los datos de la matriz. En la que cada fila equivale a un año de registro de temperaturas. q=[w(1,:) w(2,:) w(3,:) w(4,:) w(5,:) w(6,:) w(7,:) w(8,:) w(9,:)
w(10,:)]; q2=[w(11,:) w(12,:) w(13,:) w(14,:) w(15,:) w(16,:) w(17,:) w(18,:)
w(19,:) w(20,:)]; qt=[q q2];
Se genera el vector que determina el tiempo utilizando un intervalo de 1
12 (equivalente a
un mes) y se parte del primer mes hasta el año 20.
annos=1/12:1/12:20;
3. gráfica de los datos Se introduce el comando plot para realizar la gráfica de los datos asignando primero el vector de los años y después el de las temperaturas generando la figura 1.1. plot(annos,qt,'-*k'),xlabel('Años'),ylabel('Temperatura (°C)') title('Registro de la temperatura')
vector=matriz(fila,:)
Se utiliza ésta notación para extraer datos de una matriz.
Donde los : indican que se quiere extraer todo el conjunto de filas o columnas
Figura 1.1. Registro de la temperatura
Para plot, es necesario que los
vectores tengan la misma
dimensión
El '-*k' agregado al final del comando modifica
la apariencia de la gráfica.
Esta será una línea solida de color negra con un
asterisco en cada puto (temperatura al final del
mes). El punto y coma ; hace que
MATLAB no imprima los
resultados de la operación
Se obtiene un total de 240 en
ambos vectores (qt y annos).
Segundo ejercicio
1. Determinación de la función
Se genera un modelo que contenga funciones trigonométricas y exponenciales tal y como
lo plantea el problema. Además, debe contener dos variables distintas para que sea del
tipo 𝑧 = 𝑓(𝑥,𝑦).
𝑧 = 𝑓(𝑥,𝑦) =𝑒cos 𝑥 + sin 𝑦 + 𝑥2 + 𝑦2
𝑥2 + 𝑦2 + cos 𝑥 + sin𝑦
Se le deben asignar valores a x y y simultáneamente, para ello se utiliza la función
meshgrid, que genera una matriz de malla a partir de vectores y que tiene la siguiente
estructura:
vector=límite inferior:distribución:límite superior; [x,y]=meshgrid(vector);
El vector se generó a partir de valores de entrada (esto se hace con el comando input) de los límites inferior y superior y para la distribución se creó un valor h=(w-q)/e, en la que h es la distribución; w, el límite superior; q, el límite inferior y e representa el número de datos con los que se desea formar el vector. 2. La función escrita en MATLAB
La función se escribió por partes, en la que a=cos 𝑥 + sin𝑦 ; b= 𝑥2 + 𝑦2 y z=(𝑒𝑎 + 𝑏)/(𝑏 + 𝑎) Todo ello está expresado en lenguaje de MATLAB de la siguiente manera:
q=input('Número menor del intervalo:\n'); w=input('Número mayor del intervalo:\n'); e=input('Número de divisiones del intervalo:\n');
h=(w-q)/e; v=q:h:w; [x,y]=meshgrid(v); a=cos(x)+sin(y); b=sqrt(x.^2+y.^2); z=(exp(a)+b)./(b+a);
El signo \n indica que a la hora de
ser ejecutado el script escribirá
abajo del mensaje Ejemplo: Número menor del intervalo:
-20
El punto y coma ; hace que
MATLAB no imprima los
resultados de la operación
El punto . agregado a final de las
variables se usa para realizar
operaciones de componente a
componente, ya que los valores se
encuentran expresados como una
matriz malla
Cundo se realiza una sola gráfica en MATLAB, por defecto se le asigna como figure(1). Pero en caso necesario de graficar más de una, es necesario agregar el número de la figura que ataña antes de la orden correspondiente a la gráfica. Una vez escrita la función nos cercioramos de que 𝑏 + 𝑎 ≠ 0 para cualquier valor de las variables x y y.3 A ser del tipo z=f(x,y) es necesario realizar una gráfica de tres dimensiones. MATLAB ofrece distintos comandos en los que se pueden realizar estas tareas:
mesh(x,y,z) Realiza una gráfica de tipo malla. surf(x,y,z) Realiza una gráfica de superficie.
pcolor(x,y,z) Realiza una gráfica en la que se muestran los niveles del eje z en colores. waterfall(x,y,z) Realiza una gráfica de líneas.
contour(x,y,z) Grafica el contorno.
Existen diversos variantes de estos comandos que sirven para dar un aspecto más detallado. Si agregamos una c al final de los comandos surf y mesh, se le añade a la gráfica el contorno de la función. En la figura 3 se muestra la aplicación del comando surfc.
Figura 2.1. Se agrega el contorno de la función a la gráfica.
3 En el caso de que así sea, se le puede agregar una adición al cociente de eps.
3. Complementos
El comando hidden off se agrega para tener una visión translúcida de la función como se
puede observar en la figura 2.2.
Figura 2.2. Uso de hidden off.
Al agregar el comando colorbar, aparecerá una barra de colores a la derecha y para
especificar la escala de colores que se desea se utiliza el comando colormap y a
continuación escribimos la escala (ver figura 2.3). shading flat quita las líneas negras que
dividen cada área, mientras de shading interp hace que los colores de cada área se
entremezclen, obteniendo así una apariencia mas suave.
Los complementos de identificación de gráficas en MATLAB se pueden aagregar con los
siguientes comandos mostrados en la tabla 2:
xlabel('Ejex')
ylabel('Eje y') zlabel('Eje z')
Agregan una etiqueta al eje correspondiente
title('titulo')
Agrega titulo en la gráfica situado en la parte superior
legend('leyenda1’,
'leyenda2’,2)
Agrega una leyenda a la gráfica en la que se indican los valores para cada dato. Se escribe al final el número de datos.
Tabla 2. Complementos de identificación.
Figura 2.3.
Escala de colores
En la figura 2.4 se muestra el uso de los complementos de etiqueta, titulo y algunos de
apariencia aplicados en la función.
figure(1) surfc(x,y,z),colorbar,shading interp,xlabel('Eje x'),ylabel('Eje
y'),zlabel('Eje z'),colormap(hsv); title('gráfica superficie');
Figura 2.4.
Gráfica de la función
en un intervalo de
-20:1:20
El comando subplot se utiliza para unir más de una gráfica en una, como se muestra en la
figura 2.5 generada por la siguiente cadena:
figure(2) subplot(2,2,1),mesh(x,y,z),colorbar,hidden off,shading flat,xlabel('Eje
x'),ylabel('Eje y'),zlabel('Eje z'); title('gráfica malla'); subplot(2,2,2),surf(x,y,z),colorbar,shading flat,xlabel('Eje
x'),ylabel('Eje y'),zlabel('Eje z'); title('gráfica superficie'); subplot(2,2,3),pcolor(x,y,z),colorbar,shading flat,xlabel('Eje
x'),ylabel('Eje y'),zlabel('Eje z'),view(-30,40); title('gráfica plano de colores'); subplot(2,2,4),waterfall(x,y,z),colorbar,shading flat,xlabel('Eje
x'),ylabel('Eje y'),zlabel('Eje z'); title('gráfica cascada');
Figura 2.5. Mezcla de gráficas a partir de subplot.
El comando view utilizado en la gráfica de plano de colores hace que se altere la
posición de acuerdo a los ángulos que se le asignen
4. Curvas de nivel
Para las curvas de frecuencia se tomaron los siguientes valores constantes para x y y:
x1=-5; x2=0; x3=1; x4=1.5; x5=3;
y1=-7; y2=-2; y3=-1; y4=0; y5=5;
Se insertan los cinco valores de x considerados como constantes en la función y se obtiene
la figura 2.6 a partir de la siguiente cadena de comandos:
a1=cos(x1)+sin(v); b1=sqrt(x1^2+v.^2)+eps; Z=(exp(a1)+b1)./(b1+a1);
a2=cos(x2)+sin(v); b2=sqrt(x2^2+v.^2)+eps; z2=(exp(a2)+b2)./(b2+a2);
a3=cos(x3)+sin(v); b3=sqrt(x3^2+v.^2)+eps; z3=(exp(a3)+b3)./(b3+a3);
a4=cos(x4)+sin(v); b4=sqrt(x4^2+v.^2)+eps; z4=(exp(a4)+b4)./(b4+a4);
a5=cos(x5)+sin(v); b5=sqrt(x5^2+v.^2)+eps; z5=(exp(a5)+b5)./(b5+a5);
Figura 2.6. Curva de nivel para 5 valores de x
figure(3) plot(v,Z,'-+g',v,z2,'-*r',v,z3,'-+b',v,z4,'-+k',v,z5,'-*m');
xlabel('Eje y'),ylabel('Eje z') legend('X=-5','X=0','X=1','X=1.5','X=3',5) title('curvas de nivel para 5 valores de x')
h=(w-q)/e; v=q:h:w; [x,y]=meshgrid(v); a=cos(x)+sin(y); b=sqrt(x.^2+y.^2); z=(exp(a)+b)./(b+a);
Se debe utilizar los valores de y
expresados en vector para que al
momento de insertar el comando
de leyenda sea posible identificar
los cinco valores constantes de x.
Donde v=q:h:w es un vector con los mismos valores para x y y.
Con la siguiente cadena de
comandos genera la figura 2.7 que
corresponde a la curva de nivel con
los valores constantes de y:
c=cos(v)+sin(y1); d=sqrt(v.^2+y1^2)+eps; zy=(exp(c)+d)./(d+c);
c2=cos(v)+sin(y2); d2=sqrt(v.^2+y2^2)+eps; zy2=(exp(c2)+d2)./(d2+c2);
c3=cos(v)+sin(y3); d3=sqrt(v.^2+y3^2)+eps; zy3=(exp(c3)+d3)./(d3+c3);
c4=cos(v)+sin(y4); d4=sqrt(v.^2+y4^2)+eps; zy4=(exp(c4)+d4)./(d4+c4); Figura 2.7. Curvas de nivel para 5 valores de y
c5=cos(v)+sin(y5); d5=sqrt(v.^2+y5^2)+eps; zy5=(exp(c5)+d5)./(d5+c5);
figure(4) plot(v,zy,'-og');hold on xlabel('Eje x'),ylabel('Eje z') title('curvas de nivel para 5 valores de y'); figure(4) plot(v,zy2,'-*k') figure(4) plot(v,zy3,':*m') figure(4) plot(v,zy4,'-+b') figure(4) plot(v,zy5,'-^y') legend('y=-7','y=-2','y=-1','y=0','y=5',5)
La gráfica de contorno se realiza introduciendo el comando contour
contour(x,y,z),colorbar; xlabel('Eje x'),ylabel('Eje y') title('contorno de la función')
CONCLUSIONES
Se deben de tomar en cuenta los atributos que definen el funcionamiento de cada
comando y la forma en que los datos pueden ser expresados con mayor claridad.
Para cada comando existen diversas restricciones en los valores que se les asigna. En el
aula se reconocieron las características que deben cumplir los comandos generadores de
gráficas de tres dimensiones. Por ejemplo, El comando mesh ,(al igual que los demás
comandos), tiene la siguiente estructura:
mesh(vector1,vector2,matriz)
Donde el vector1 mide nx1 y el vector2 mide 1xm y la matriz tiene medidas de nxm.
Lo mismo sucede con otros comandos especializados para la resolución de gráficas.
Si una curva de niveles es realizada tomando a la variable como una matriz, se genera un
error cuando se inserta una leyenda a la gráfica, como se muestra en la figura 3.
La leyenda no reconoce a las líneas trazadas a partir de los valores de x, puesto que la
leyenda está describiendo a cada punto de la gráfica.
Figura 3. 4.Error en la leyenda